package org.ripple.power.hft;
import org.ripple.power.hft.def.HPeriod;
import org.ripple.power.hft.def.IHStatistics;
public class MomentumEntrySignalGenerator implements EntrySignalGenerator {
private int period;
public MomentumEntrySignalGenerator(int period) {
super();
this.period = period;
}
public double generateSignal(IHStatistics stat) {
// 储存进去对应的数组
double[] close = stat.history(period, HPeriod.Day).getClosingPrice();
// 计算周期momentum
double[] momentum = computeMomentum(close, period);
// 计算当期momentum
double currentMomentum = momentum[0];
// 简单起见信号强度绝对值统一设置成1
if (currentMomentum > 0) {
return 1;
}
// 当期close值是channel低值
else if (currentMomentum < 0) {
return -1;
}
// 什么也不做
else {
return 0;
}
}
public double[] computeMomentum(double[] input, int period) {
double[] out = new double[input.length - period + 1];
for (int i = period - 1; i < input.length; i++) {
double start = input[i - (period - 1)];
double end = input[i];
out[i - (period - 1)] = end - start;
}
return out;
}
}