|
From: Thies <tg...@us...> - 2007-05-17 19:59:26
|
Update of /cvsroot/tail/Tail/src/java/net/sf/tail/indicator/tracker In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv25602/src/java/net/sf/tail/indicator/tracker Added Files: WilliamsRIndicator.java Log Message: Indicador Williams % R --- NEW FILE: WilliamsRIndicator.java --- package net.sf.tail.indicator.tracker; import net.sf.tail.Indicator; import net.sf.tail.indicator.simple.MaxPriceIndicator; 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); return ((highestHighPrice - indicator.getValue(index).doubleValue()) / (highestHighPrice - lowestLowPrice)) * -100d; } private Double getHighestHighPrice(int index) { int start = Math.max(0, index - timeFrame + 1); Double highest = maxPriceIndicator.getValue(start); for (int i = start + 1; i <= index; i++) { if(highest.doubleValue() < maxPriceIndicator.getValue(i).doubleValue()) highest = maxPriceIndicator.getValue(i); } return highest; } private Double getLowestLowPrice(int index) { int start = Math.max(0, index - timeFrame + 1); Double lowest = minPriceIndicator.getValue(start); for (int i = start + 1; i <= index; i++) { if(lowest.doubleValue() > minPriceIndicator.getValue(i).doubleValue()) lowest = minPriceIndicator.getValue(i); } return lowest; } } |