Update of /cvsroot/tail/Tail/src/java/net/sf/tail/strategy
In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv20090/src/java/net/sf/tail/strategy
Added Files:
MinValueStopperStrategy.java JustBuyOnceStrategy.java
Removed Files:
StopDecoratorStrategy.java
Log Message:
Criado teste para o HistoryRunner
Criado JustBuyOnceStrategy
Criado MinvalueStopperStrategy
--- StopDecoratorStrategy.java DELETED ---
--- NEW FILE: JustBuyOnceStrategy.java ---
package net.sf.tail.strategy;
import net.sf.tail.Operation;
import net.sf.tail.OperationType;
import net.sf.tail.Strategy;
public class JustBuyOnceStrategy implements Strategy {
private boolean buyed;
private int buyedIndex;
public JustBuyOnceStrategy() {
buyed = false;
}
public Operation shouldEnter(int index) {
if(!buyed || buyedIndex == index ){
buyed = true;
buyedIndex = index;
return new Operation(index, OperationType.BUY);
}
return null;
}
public Operation shouldExit(Operation entry, int index) {
return null;
}
}
--- NEW FILE: MinValueStopperStrategy.java ---
package net.sf.tail.strategy;
import net.sf.tail.Indicator;
import net.sf.tail.Operation;
import net.sf.tail.OperationType;
import net.sf.tail.Strategy;
/**
* MinValueStopperStrategy baseia a compra em uma {@link Strategy} enviada como parâmetro,
* registrando o valor do {@link Indicator} enviado como parâmetro no mesmo Ãndice de compra,
* e baseia a venda nessa mesma {@link Strategy} desde que o valor registrado do {@link Indicator}
* na compra não tenha um decréscimo maior que loss %
*
*/
public class MinValueStopperStrategy implements Strategy {
private Strategy strategy;
private double loss;
private Indicator<? extends Number> indicator;
private double value;
public MinValueStopperStrategy(Indicator<? extends Number> indicator, Strategy strategy, int loss) {
this.strategy = strategy;
this.loss = (double) loss;
this.indicator = indicator;
}
public Operation shouldEnter(int index) {
if (strategy.shouldEnter(index) == null) {
return null;
}
value = indicator.getValue(index).doubleValue();
return strategy.shouldEnter(index);
}
public Operation shouldExit(Operation entry, int index) {
if (value - (value * (loss / 100)) > indicator.getValue(index).doubleValue()) {
return new Operation(index, OperationType.SELL);
}
return strategy.shouldExit(entry, index);
}
public double getLoss() {
return loss;
}
public Strategy getStrategy() {
return strategy;
}
}
|