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