|
From: Márcio V. d. S. <mv...@us...> - 2007-05-13 01:00:09
|
Update of /cvsroot/tail/Tail/src/java/net/sf/tail/indicator/tracker In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv956/src/java/net/sf/tail/indicator/tracker Modified Files: EMAIndicator.java RSIIndicator.java Added Files: AbstractIndicator.java EMAAbstractIndicator.java SMAAbstractIndicator.java RSIAbstractIndicator.java Log Message: Criada a nova classe AbstractIndicator e seus filhos ;-) Index: EMAIndicator.java =================================================================== RCS file: /cvsroot/tail/Tail/src/java/net/sf/tail/indicator/tracker/EMAIndicator.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** EMAIndicator.java 12 May 2007 18:13:01 -0000 1.4 --- EMAIndicator.java 13 May 2007 01:00:06 -0000 1.5 *************** *** 39,53 **** private Double calculate(int index) { ! if(index + 1 < timeFrame){ return new SMAIndicator(indicator,timeFrame).getValue(index); - } double emaPrev = getValue(index - 1).doubleValue(); ! double result = ( ( indicator.getValue(index).doubleValue() - emaPrev ) * multiplier()) + emaPrev; ! ! ! return result; ! ! } } --- 39,47 ---- private Double calculate(int index) { ! if(index + 1 < timeFrame) return new SMAIndicator(indicator,timeFrame).getValue(index); double emaPrev = getValue(index - 1).doubleValue(); ! return ( ( indicator.getValue(index).doubleValue() - emaPrev ) * multiplier()) + emaPrev; } } --- NEW FILE: AbstractIndicator.java --- package net.sf.tail.indicator.tracker; import java.util.ArrayList; import java.util.List; import net.sf.tail.Indicator; public abstract class AbstractIndicator<T> implements Indicator<T> { protected final Indicator<? extends Number> indicator; protected final int timeFrame; protected List<T> resultsList; public AbstractIndicator(Indicator<? extends Number> indicator, int timeFrame) { this.indicator = indicator; this.timeFrame = timeFrame; resultsList = new ArrayList<T>(); } public T getValue(int index) { if(resultsList.size() <= index ) { increaseLenght(index); } if(resultsList.get(index) == null){ resultsList.set(index,calculate(index)); } return resultsList.get(index); } private void increaseLenght(int lenght) { for (int i = 0; i <= lenght; i++) { resultsList.add(null); } } protected abstract T calculate(int index); } --- NEW FILE: RSIAbstractIndicator.java --- package net.sf.tail.indicator.tracker; import net.sf.tail.Indicator; public class RSIAbstractIndicator extends AbstractIndicator<Double> { public RSIAbstractIndicator(Indicator<? extends Number> indicator, int timeFrame) { super(indicator, timeFrame); } protected Double calculate(int index) { return 100d - 100d/(1 + rs(index)); } private Double rs(int index) { if(index < timeFrame){ /* TODO - Na interpretação da minha fonte (www.stockcharts.com) RSI de Ãndices menores que o timeFrame são null */ } return averageGain(index)/averageLoss(index); } private double averageLoss(int index) { double result = 0; for (int i = Math.max(1, index - timeFrame + 1); i <= index; i++) { if(indicator.getValue(i).doubleValue() < indicator.getValue(i-1).doubleValue() ) result += indicator.getValue(i-1).doubleValue() - indicator.getValue(i).doubleValue(); } return result/ Math.min(timeFrame, index + 1); } public double averageGain(int index) { double result = 0; for (int i = Math.max(1, index - timeFrame + 1); i <= index; i++) { if(indicator.getValue(i).doubleValue() >= indicator.getValue(i-1).doubleValue() ) result += indicator.getValue(i).doubleValue() - indicator.getValue(i-1).doubleValue(); } return result/ Math.min(timeFrame, index + 1); } } --- NEW FILE: EMAAbstractIndicator.java --- package net.sf.tail.indicator.tracker; import net.sf.tail.Indicator; public class EMAAbstractIndicator extends AbstractIndicator<Double> { public EMAAbstractIndicator(Indicator<? extends Number> indicator, int timeFrame) { super(indicator, timeFrame); } private double multiplier(){ return 2 / (double)(timeFrame + 1); } protected Double calculate(int index) { if(index + 1 < timeFrame) return new SMAIndicator(indicator,timeFrame).getValue(index); double emaPrev = getValue(index - 1).doubleValue(); return ( ( indicator.getValue(index).doubleValue() - emaPrev ) * multiplier()) + emaPrev; } } Index: RSIIndicator.java =================================================================== RCS file: /cvsroot/tail/Tail/src/java/net/sf/tail/indicator/tracker/RSIIndicator.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** RSIIndicator.java 12 May 2007 23:54:53 -0000 1.2 --- RSIIndicator.java 13 May 2007 01:00:06 -0000 1.3 *************** *** 42,49 **** /* TODO - Na interpretação da minha fonte (www.stockcharts.com) RSI de Ãndices menores que o timeFrame são null */ } ! ! ! return averageGain(index)/averageLoss(index); ! } --- 42,46 ---- /* TODO - Na interpretação da minha fonte (www.stockcharts.com) RSI de Ãndices menores que o timeFrame são null */ } ! return averageGain(index)/averageLoss(index); } *************** *** 51,57 **** double result = 0; for (int i = Math.max(1, index - timeFrame + 1); i <= index; i++) { ! if(indicator.getValue(i).doubleValue() < indicator.getValue(i-1).doubleValue() ){ result += indicator.getValue(i-1).doubleValue() - indicator.getValue(i).doubleValue(); - } } return result/ Math.min(timeFrame, index + 1); --- 48,53 ---- double result = 0; for (int i = Math.max(1, index - timeFrame + 1); i <= index; i++) { ! if(indicator.getValue(i).doubleValue() < indicator.getValue(i-1).doubleValue() ) result += indicator.getValue(i-1).doubleValue() - indicator.getValue(i).doubleValue(); } return result/ Math.min(timeFrame, index + 1); *************** *** 61,70 **** double result = 0; for (int i = Math.max(1, index - timeFrame + 1); i <= index; i++) { ! if(indicator.getValue(i).doubleValue() >= indicator.getValue(i-1).doubleValue() ){ result += indicator.getValue(i).doubleValue() - indicator.getValue(i-1).doubleValue(); - } } - - return result/ Math.min(timeFrame, index + 1); } --- 57,63 ---- double result = 0; for (int i = Math.max(1, index - timeFrame + 1); i <= index; i++) { ! if(indicator.getValue(i).doubleValue() >= indicator.getValue(i-1).doubleValue() ) result += indicator.getValue(i).doubleValue() - indicator.getValue(i-1).doubleValue(); } return result/ Math.min(timeFrame, index + 1); } --- NEW FILE: SMAAbstractIndicator.java --- package net.sf.tail.indicator.tracker; import net.sf.tail.Indicator; public class SMAAbstractIndicator extends AbstractIndicator<Double> { public SMAAbstractIndicator(Indicator<? extends Number> indicator, int timeFrame) { super(indicator, timeFrame); } protected Double calculate(int index) { double sum = 0.0; for (int i = Math.max(0, index - timeFrame + 1); i <= index; i++) { sum += indicator.getValue(i).doubleValue(); } return sum / Math.min(timeFrame, index + 1); } } |