|
From: Márcio V. d. S. <mv...@us...> - 2007-11-21 21:55:17
|
Update of /cvsroot/tail/Tail/src/java/net/sf/tail/runner In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv7865/src/java/net/sf/tail/runner Modified Files: HistoryRunner.java ShortSellRunner.java Added Files: RunnerFactory.java HistoryRunnerFactory.java Log Message: Mega refatoração, Runner não está mais vendendo no final de cada slice --- NEW FILE: RunnerFactory.java --- package net.sf.tail.runner; import net.sf.tail.Runner; import net.sf.tail.Strategy; import net.sf.tail.TimeSeriesSlicer; public interface RunnerFactory { Runner create(Strategy strategy,TimeSeriesSlicer slicer); } --- NEW FILE: HistoryRunnerFactory.java --- package net.sf.tail.runner; import net.sf.tail.Runner; import net.sf.tail.Strategy; import net.sf.tail.TimeSeriesSlicer; public class HistoryRunnerFactory implements RunnerFactory { public Runner create(Strategy strategy, TimeSeriesSlicer slicer) { return new HistoryRunner(slicer,strategy); } } Index: HistoryRunner.java =================================================================== RCS file: /cvsroot/tail/Tail/src/java/net/sf/tail/runner/HistoryRunner.java,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** HistoryRunner.java 31 Oct 2007 16:24:39 -0000 1.19 --- HistoryRunner.java 21 Nov 2007 21:55:20 -0000 1.20 *************** *** 4,42 **** import java.util.List; - import org.apache.log4j.Logger; - import net.sf.tail.OperationType; import net.sf.tail.Runner; import net.sf.tail.Strategy; import net.sf.tail.Trade; public class HistoryRunner implements Runner { private OperationType operationType; private static final Logger LOG = Logger.getLogger(HistoryRunner.class); ! public HistoryRunner(OperationType type) { ! if (type == null) throw new NullPointerException(); this.operationType = type; } ! public HistoryRunner() { ! this.operationType = OperationType.BUY; } ! public List<Trade> run(Strategy strategy, int start, int end) { - if (start < 0 || end < 0) - throw new IndexOutOfBoundsException(); ! if (start > end) ! throw new IllegalArgumentException(); LOG.info("running strategy " + strategy); List<Trade> trades = new ArrayList<Trade>(); Trade lastTrade = new Trade(operationType); ! for (int i = Math.max(start, 0); i <= end; i++) { if (strategy.shouldOperate(lastTrade, i)) { lastTrade.operate(i); --- 4,83 ---- import java.util.List; import net.sf.tail.OperationType; import net.sf.tail.Runner; import net.sf.tail.Strategy; + import net.sf.tail.TimeSeriesSlicer; import net.sf.tail.Trade; + import org.apache.log4j.Logger; + public class HistoryRunner implements Runner { private OperationType operationType; + private TimeSeriesSlicer slicer; + + private Strategy strategy; + + private ArrayList<List<Trade>> listTradesResults; + private static final Logger LOG = Logger.getLogger(HistoryRunner.class); ! public HistoryRunner(OperationType type,TimeSeriesSlicer slicer,Strategy strategy) { ! if (type == null || slicer == null || strategy == null) throw new NullPointerException(); + this.slicer = slicer; + this.strategy = strategy; this.operationType = type; + + listTradesResults = new ArrayList<List<Trade>>(); } ! public HistoryRunner(TimeSeriesSlicer slicer,Strategy strategy) { ! this(OperationType.BUY,slicer,strategy); } ! public List<Trade> run(int slicePosition) { ! if(listTradesResults.size() < slicePosition){ ! listTradesResults.add(run(slicePosition - 1)); ! } ! else if(listTradesResults.size() > slicePosition){ ! return listTradesResults.get(slicePosition); ! } ! int begin = 0; ! int end = 0; ! if(listTradesResults.size() == 0){ ! begin = slicer.getSlice(slicePosition).getBegin(); ! end = slicer.getSlice(slicePosition).getEnd(); ! }else{ ! ! end = slicer.getSlice(slicePosition).getEnd(); ! ! int i = listTradesResults.size()-1; ! List<Trade> lastTrades = listTradesResults.get(i); ! while(lastTrades.size() == 0 && i > 0){ ! i--; ! lastTrades = listTradesResults.get(i); ! } ! ! if(i <= 0){ ! begin = slicer.getSlice(slicePosition).getBegin(); ! ! }else{ ! Trade lastTrade = lastTrades.get(lastTrades.size()-1); ! begin = lastTrade.getExit().getIndex()+1; ! ! if(begin > end){ ! return new ArrayList<Trade>(); ! } ! } ! } LOG.info("running strategy " + strategy); List<Trade> trades = new ArrayList<Trade>(); Trade lastTrade = new Trade(operationType); ! for (int i = Math.max(begin, 0); i <= end; i++) { if (strategy.shouldOperate(lastTrade, i)) { lastTrade.operate(i); *************** *** 48,85 **** } } ! if (lastTrade.isOpened() && lastTrade.getEntry().getIndex() != end) { ! lastTrade.operate(end); ! LOG.debug("new trade for closing time: " + lastTrade); ! ; ! trades.add(lastTrade); ! } ! ! return trades; ! } ! @Override ! public int hashCode() { ! final int prime = 31; ! int result = 1; ! result = prime * result + ((operationType == null) ? 0 : operationType.hashCode()); ! return result; } ! ! @Override ! public boolean equals(Object obj) { ! if (this == obj) ! return true; ! if (obj == null) return false; ! if (getClass() != obj.getClass()) return false; ! final HistoryRunner other = (HistoryRunner) obj; ! if (operationType == null) { ! if (other.operationType != null) ! return false; ! } else if (!operationType.equals(other.operationType)) return false; ! return true; ! } } --- 89,151 ---- } } ! if (lastTrade.isOpened()) { ! int j = 1; ! while(slicer.getSlices() > slicePosition + j) { ! int start = slicer.getSlice(slicePosition + j).getBegin(); ! int last = slicer.getSlice(slicePosition + j).getEnd(); ! for (int i = start; i <= last; i++) { ! if (strategy.shouldOperate(lastTrade, i)) { ! lastTrade.operate(i); ! break; ! } ! } ! if(lastTrade.isClosed()){ ! trades.add(lastTrade); ! LOG.debug("new trade: " + lastTrade); ! break; ! } ! j++; ! } } ! listTradesResults.add(trades); ! return trades; ! } ! @Override ! public int hashCode() { ! final int prime = 31; ! int result = 1; ! result = prime * result + ((operationType == null) ? 0 : operationType.hashCode()); ! result = prime * result + ((slicer == null) ? 0 : slicer.hashCode()); ! result = prime * result + ((strategy == null) ? 0 : strategy.hashCode()); ! return result; ! } ! @Override ! public boolean equals(Object obj) { ! if (this == obj) ! return true; ! if (obj == null) ! return false; ! if (getClass() != obj.getClass()) ! return false; ! final HistoryRunner other = (HistoryRunner) obj; ! if (operationType == null) { ! if (other.operationType != null) return false; ! } else if (!operationType.equals(other.operationType)) ! return false; ! if (slicer == null) { ! if (other.slicer != null) return false; ! } else if (!slicer.equals(other.slicer)) ! return false; ! if (strategy == null) { ! if (other.strategy != null) return false; ! } else if (!strategy.equals(other.strategy)) ! return false; ! return true; ! } ! } Index: ShortSellRunner.java =================================================================== RCS file: /cvsroot/tail/Tail/src/java/net/sf/tail/runner/ShortSellRunner.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** ShortSellRunner.java 23 Aug 2007 12:47:26 -0000 1.3 --- ShortSellRunner.java 21 Nov 2007 21:55:20 -0000 1.4 *************** *** 7,10 **** --- 7,11 ---- import net.sf.tail.Runner; import net.sf.tail.Strategy; + import net.sf.tail.TimeSeriesSlicer; import net.sf.tail.Trade; *************** *** 12,21 **** private Runner runner; ! public ShortSellRunner() { ! this.runner = new HistoryRunner(OperationType.BUY); } ! public List<Trade> run(Strategy strategy, int start, int end) { ! List<Trade> trades = runner.run(strategy, start, end); List<Trade> tradesWithShortSells = new ArrayList<Trade>(); --- 13,22 ---- private Runner runner; ! public ShortSellRunner(TimeSeriesSlicer slicer, Strategy strategy) { ! this.runner = new HistoryRunner(slicer, strategy); } ! public List<Trade> run(int slicePosition) { ! List<Trade> trades = runner.run(slicePosition); List<Trade> tradesWithShortSells = new ArrayList<Trade>(); |