|
From: Márcio V. d. S. <mv...@us...> - 2007-05-17 21:30:58
|
Update of /cvsroot/tail/Tail/src/java/net/sf/tail/indicator/tracker In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv27559/src/java/net/sf/tail/indicator/tracker Modified Files: AverageLossIndicator.java SMAIndicator.java CachedIndicator.java WilliamsRIndicator.java EMAIndicator.java RSIIndicator.java AverageGainIndicator.java Log Message: transformando template method em decorator (caso CachedIndicator) Index: EMAIndicator.java =================================================================== RCS file: /cvsroot/tail/Tail/src/java/net/sf/tail/indicator/tracker/EMAIndicator.java,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** EMAIndicator.java 14 May 2007 12:08:21 -0000 1.9 --- EMAIndicator.java 17 May 2007 21:30:55 -0000 1.10 *************** *** 3,10 **** import net.sf.tail.Indicator; ! public class EMAIndicator extends CachedIndicator<Double> { public EMAIndicator(Indicator<? extends Number> indicator, int timeFrame) { ! super(indicator, timeFrame); } --- 3,14 ---- import net.sf.tail.Indicator; ! public class EMAIndicator implements Indicator<Double> { + private final Indicator<? extends Number> indicator; + private final int timeFrame; + public EMAIndicator(Indicator<? extends Number> indicator, int timeFrame) { ! this.indicator = indicator; ! this.timeFrame = timeFrame; } *************** *** 13,18 **** } ! protected Double calculate(int index) { ! if(index + 1 < timeFrame) return new SMAIndicator(indicator,timeFrame).getValue(index); --- 17,21 ---- } ! public Double getValue(int index) { if(index + 1 < timeFrame) return new SMAIndicator(indicator,timeFrame).getValue(index); Index: AverageLossIndicator.java =================================================================== RCS file: /cvsroot/tail/Tail/src/java/net/sf/tail/indicator/tracker/AverageLossIndicator.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** AverageLossIndicator.java 17 May 2007 17:52:05 -0000 1.1 --- AverageLossIndicator.java 17 May 2007 21:30:54 -0000 1.2 *************** *** 3,13 **** import net.sf.tail.Indicator; ! public class AverageLossIndicator extends CachedIndicator<Double> { public AverageLossIndicator(Indicator<? extends Number> indicator, int timeFrame) { ! super(indicator, timeFrame); } ! protected Double calculate(int index) { double result = 0; for (int i = Math.max(1, index - timeFrame + 1); i <= index; i++) { --- 3,17 ---- import net.sf.tail.Indicator; ! public class AverageLossIndicator implements Indicator<Double> { + private final Indicator<? extends Number> indicator; + private final int timeFrame; + public AverageLossIndicator(Indicator<? extends Number> indicator, int timeFrame) { ! this.indicator = indicator; ! this.timeFrame = timeFrame; } ! public Double getValue(int index) { double result = 0; for (int i = Math.max(1, index - timeFrame + 1); i <= index; i++) { Index: RSIIndicator.java =================================================================== RCS file: /cvsroot/tail/Tail/src/java/net/sf/tail/indicator/tracker/RSIIndicator.java,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** RSIIndicator.java 17 May 2007 17:52:05 -0000 1.9 --- RSIIndicator.java 17 May 2007 21:30:55 -0000 1.10 *************** *** 3,13 **** import net.sf.tail.Indicator; ! public class RSIIndicator extends CachedIndicator<Double> { public RSIIndicator(Indicator<? extends Number> indicator, int timeFrame) { ! super(indicator, timeFrame); } ! protected Double calculate(int index) { return 100d - 100d / (1 + rs(index)); } --- 3,17 ---- import net.sf.tail.Indicator; ! public class RSIIndicator implements Indicator<Double> { + private final Indicator<? extends Number> indicator; + private final int timeFrame; + public RSIIndicator(Indicator<? extends Number> indicator, int timeFrame) { ! this.indicator = indicator; ! this.timeFrame = timeFrame; } ! public Double getValue(int index) { return 100d - 100d / (1 + rs(index)); } Index: SMAIndicator.java =================================================================== RCS file: /cvsroot/tail/Tail/src/java/net/sf/tail/indicator/tracker/SMAIndicator.java,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** SMAIndicator.java 14 May 2007 12:08:21 -0000 1.7 --- SMAIndicator.java 17 May 2007 21:30:54 -0000 1.8 *************** *** 3,13 **** import net.sf.tail.Indicator; ! public class SMAIndicator extends CachedIndicator<Double> { public SMAIndicator(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++) { --- 3,17 ---- import net.sf.tail.Indicator; ! public class SMAIndicator implements Indicator<Double> { + private final Indicator<? extends Number> indicator; + private final int timeFrame; + public SMAIndicator(Indicator<? extends Number> indicator, int timeFrame) { ! this.indicator = indicator; ! this.timeFrame = timeFrame; } ! public Double getValue(int index) { double sum = 0.0; for (int i = Math.max(0, index - timeFrame + 1); i <= index; i++) { Index: AverageGainIndicator.java =================================================================== RCS file: /cvsroot/tail/Tail/src/java/net/sf/tail/indicator/tracker/AverageGainIndicator.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** AverageGainIndicator.java 17 May 2007 17:52:05 -0000 1.1 --- AverageGainIndicator.java 17 May 2007 21:30:55 -0000 1.2 *************** *** 3,13 **** import net.sf.tail.Indicator; ! public class AverageGainIndicator extends CachedIndicator<Double> { public AverageGainIndicator(Indicator<? extends Number> indicator, int timeFrame) { ! super(indicator, timeFrame); } ! protected Double calculate(int index) { double result = 0; for (int i = Math.max(1, index - timeFrame + 1); i <= index; i++) { --- 3,17 ---- import net.sf.tail.Indicator; ! public class AverageGainIndicator implements Indicator<Double> { + private final Indicator<? extends Number> indicator; + private final int timeFrame; + public AverageGainIndicator(Indicator<? extends Number> indicator, int timeFrame) { ! this.indicator = indicator; ! this.timeFrame = timeFrame; } ! public Double getValue(int index) { double result = 0; for (int i = Math.max(1, index - timeFrame + 1); i <= index; i++) { Index: WilliamsRIndicator.java =================================================================== RCS file: /cvsroot/tail/Tail/src/java/net/sf/tail/indicator/tracker/WilliamsRIndicator.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** WilliamsRIndicator.java 17 May 2007 20:48:43 -0000 1.2 --- WilliamsRIndicator.java 17 May 2007 21:30:54 -0000 1.3 *************** *** 5,21 **** import net.sf.tail.indicator.simple.MinPriceIndicator; ! public class WilliamsRIndicator extends CachedIndicator<Double>{ private MaxPriceIndicator maxPriceIndicator; private MinPriceIndicator minPriceIndicator; public WilliamsRIndicator(Indicator<? extends Number> indicator, int timeFrame, MaxPriceIndicator maxPriceIndicator, MinPriceIndicator minPriceIndicator) { ! super(indicator, timeFrame); this.maxPriceIndicator = maxPriceIndicator; this.minPriceIndicator = minPriceIndicator; } ! ! @Override ! protected Double calculate(int index) { double highestHighPrice = getHighestHighPrice(index); double lowestLowPrice = getLowestLowPrice(index); --- 5,23 ---- import net.sf.tail.indicator.simple.MinPriceIndicator; ! public class WilliamsRIndicator implements Indicator<Double> { + private final Indicator<? extends Number> indicator; + private final int timeFrame; private MaxPriceIndicator maxPriceIndicator; private MinPriceIndicator minPriceIndicator; public WilliamsRIndicator(Indicator<? extends Number> indicator, int timeFrame, MaxPriceIndicator maxPriceIndicator, MinPriceIndicator minPriceIndicator) { ! this.indicator = indicator; ! this.timeFrame = timeFrame; this.maxPriceIndicator = maxPriceIndicator; this.minPriceIndicator = minPriceIndicator; } ! ! public Double getValue(int index) { double highestHighPrice = getHighestHighPrice(index); double lowestLowPrice = getLowestLowPrice(index); Index: CachedIndicator.java =================================================================== RCS file: /cvsroot/tail/Tail/src/java/net/sf/tail/indicator/tracker/CachedIndicator.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** CachedIndicator.java 17 May 2007 20:16:11 -0000 1.4 --- CachedIndicator.java 17 May 2007 21:30:54 -0000 1.5 *************** *** 7,42 **** import net.sf.tail.Indicator; ! public abstract class CachedIndicator<T> implements Indicator { protected final Indicator<? extends Number> indicator; ! protected final int timeFrame; ! protected List<T> results; public CachedIndicator(Indicator<? extends Number> indicator, int timeFrame) { this.indicator = indicator; this.timeFrame = timeFrame; ! results = new ArrayList<T>(); } ! public T getValue(int index) { increaseLength(index); if (results.get(index) == null) { ! results.set(index, calculate(index)); } return results.get(index); - } private void increaseLength(int index) { if (results.size() <= index) { ! results.addAll(Collections.<T> nCopies(index - results.size() + 1, null)); } } ! protected abstract T calculate(int index); } --- 7,46 ---- import net.sf.tail.Indicator; ! public class CachedIndicator implements Indicator { protected final Indicator<? extends Number> indicator; ! protected int timeFrame = 0; ! protected List<Number> results; public CachedIndicator(Indicator<? extends Number> indicator, int timeFrame) { this.indicator = indicator; this.timeFrame = timeFrame; ! results = new ArrayList<Number>(); } ! public CachedIndicator(Indicator<? extends Number> indicator) { ! this.indicator = indicator; ! results = new ArrayList<Number>(); ! } ! ! public Number getValue(int index) { increaseLength(index); if (results.get(index) == null) { ! results.set(index, indicator.getValue(index)); } return results.get(index); } private void increaseLength(int index) { if (results.size() <= index) { ! results.addAll(Collections.<Number> nCopies(index - results.size() + 1, null)); } } ! } |