|
From: Carlos <ma...@us...> - 2007-07-12 17:59:28
|
Update of /cvsroot/tail/Tail/src/java/net/sf/tail/analysis/walk In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv10579/src/java/net/sf/tail/analysis/walk Modified Files: Walker.java Added Files: WalkForward.java Log Message: Feita classe WalkForward e alterações feitas em outras classes para que o cálculo fosse possível. Como dito no e-mail. --- NEW FILE: WalkForward.java --- package net.sf.tail.analysis.walk; import java.util.ArrayList; import java.util.List; import java.util.Set; import net.sf.tail.AnalysisCriterion; import net.sf.tail.ConstrainedTimeSeries; import net.sf.tail.Evaluator; import net.sf.tail.OperationType; import net.sf.tail.Runner; import net.sf.tail.Strategy; import net.sf.tail.TimeSeries; import net.sf.tail.TimeSeriesSplitter; import net.sf.tail.Trade; import net.sf.tail.runner.HistoryRunner; import org.apache.log4j.Logger; public class WalkForward { private static final Logger LOG = Logger.getLogger(WalkForward.class); private Evaluator evaluator; public WalkForward(Evaluator evaluator) { this.evaluator = evaluator; } public double walkForward(Set<Set<Strategy>> strategiesSet, TimeSeries series, int interval, AnalysisCriterion criterion) { Walker walker = new Walker(evaluator); Runner runner = new HistoryRunner(OperationType.BUY); List<Double> values = new ArrayList<Double>(); List<Double> bestValues = null; Set<Strategy> bestStrategySet = null; TimeSeriesSplitter splitter = new TimeSeriesSplitter(); List<ConstrainedTimeSeries> constrainedSeries = splitter.split(series, interval); for (int i = 0; i < strategiesSet.size(); i++) { Set<Strategy> strategies = strategiesSet.iterator().next(); values = walker.walk(strategies, constrainedSeries, interval, criterion); if (bestStrategySet == null || criterion.isBetter(values, bestValues)) { bestValues = values; bestStrategySet = strategies; } } Strategy bestStrategy = evaluator.evaluate(bestStrategySet, constrainedSeries.get(constrainedSeries.size() - 2), criterion); ConstrainedTimeSeries lastInterval = constrainedSeries.get(constrainedSeries.size() - 1); List<Trade> trades = runner.run(bestStrategy, lastInterval.getBegin(), lastInterval.getBegin() + lastInterval.getSize()); return criterion.calculate(lastInterval, trades); } } Index: Walker.java =================================================================== RCS file: /cvsroot/tail/Tail/src/java/net/sf/tail/analysis/walk/Walker.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** Walker.java 5 Jul 2007 21:53:17 -0000 1.1 --- Walker.java 12 Jul 2007 17:59:23 -0000 1.2 *************** *** 11,16 **** import net.sf.tail.Runner; import net.sf.tail.Strategy; - import net.sf.tail.TimeSeries; - import net.sf.tail.TimeSeriesSplitter; import net.sf.tail.Trade; import net.sf.tail.runner.HistoryRunner; --- 11,14 ---- *************** *** 28,32 **** } ! public List<Double> walk(Set<Strategy> strategies, TimeSeries series, int interval, AnalysisCriterion criterion) { // tem de picotar o timeseries e ir chamando o walker pra cada --- 26,30 ---- } ! public List<Double> walk(Set<Strategy> strategies, List<ConstrainedTimeSeries> constrainedSeries, int interval, AnalysisCriterion criterion) { // tem de picotar o timeseries e ir chamando o walker pra cada *************** *** 34,39 **** // do "periodo" passado no proximo periodo // e recalculando a melhor estatratgia - TimeSeriesSplitter splitter = new TimeSeriesSplitter(); - List<ConstrainedTimeSeries> constrainedSeries = splitter.split(series, interval); List<Double> values = new ArrayList<Double>(); Strategy bestStrategy = evaluator.evaluate(strategies, constrainedSeries.get(0), criterion); --- 32,35 ---- |