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;
}
}
|