package org.ripple.power.hft; import java.util.List; import com.tictactec.ta.lib.Core; import com.tictactec.ta.lib.MInteger; import com.tictactec.ta.lib.RetCode; public class CalculatorRSI { private Core core = new Core(); private int rsiPeriod; int noOutEle; double result; public enum RSIState { ABOVE_THRESHOLD, BETWEEN_THRESHOLD, BELOW_THRESHOLD; } public RetCode calcRSI(InstrumentAo instrumentAo, List<Double> resultList) { noOutEle = instrumentAo.getPriceList().size(); int endIndex = instrumentAo.getPriceList().size() - 1; int startIndex = endIndex - noOutEle + 1; double[] outResult = new double[endIndex + 1]; double[] closePriceInput = new double[endIndex + 1]; MInteger strtOutIndex = new MInteger(); strtOutIndex.value = startIndex; MInteger outNb = new MInteger(); outNb.value = noOutEle; for (int index = 0; index <= endIndex; index++) { closePriceInput[index] = instrumentAo.getPriceList().get(index) .close; } RetCode retCode = core.rsi(startIndex, endIndex, closePriceInput, rsiPeriod, strtOutIndex, outNb, outResult); for (int i = 0; i <= endIndex; i++) { resultList.add(outResult[i]); } return retCode; } public CalculatorRSI(int noOutEle) { rsiPeriod = 14; this.noOutEle = noOutEle; } public RSIState getRSIState(Double result) { if (result > 65) { return RSIState.ABOVE_THRESHOLD; } else if (result > 35) { return RSIState.BETWEEN_THRESHOLD; } else { return RSIState.BELOW_THRESHOLD; } } public void setNoOutEle(int noOutEle) { this.noOutEle = noOutEle; } }