|
From: Márcio V. d. S. <mv...@us...> - 2007-05-19 15:45:15
|
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; } } |