|
From: Márcio V. d. S. <mv...@us...> - 2007-11-21 21:55:46
|
Update of /cvsroot/tail/Tail/src/java/net/sf/tail/analysis/evaluator In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv7865/src/java/net/sf/tail/analysis/evaluator Modified Files: HigherValueEvaluator.java DummyDecision.java Decision.java Added Files: StrategyEvaluatorFactory.java HigherValueEvaluatorFactory.java Log Message: Mega refatoração, Runner não está mais vendendo no final de cada slice Index: Decision.java =================================================================== RCS file: /cvsroot/tail/Tail/src/java/net/sf/tail/analysis/evaluator/Decision.java,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** Decision.java 17 Oct 2007 23:23:36 -0000 1.15 --- Decision.java 21 Nov 2007 21:55:19 -0000 1.16 *************** *** 7,11 **** --- 7,13 ---- import net.sf.tail.Strategy; import net.sf.tail.TimeSeries; + import net.sf.tail.TimeSeriesSlicer; import net.sf.tail.Trade; + import net.sf.tail.series.RegularSlicer; public class Decision { *************** *** 13,18 **** private AnalysisCriterion criterion; - private TimeSeries series; - private Strategy strategy; --- 15,18 ---- *************** *** 21,39 **** private Runner runner; ! public Decision(Strategy bestStrategy, TimeSeries series, AnalysisCriterion criterion, List<Trade> trades, Runner runner) { this.strategy = bestStrategy; ! this.series = series; this.criterion = criterion; this.trades = trades; this.runner = runner; } public double evaluateCriterion() { ! return this.criterion.calculate(series, trades); } public double evaluateCriterion(AnalysisCriterion otherCriterion) { ! return otherCriterion.calculate(series, trades); } --- 21,44 ---- private Runner runner; ! private TimeSeriesSlicer slicer; ! ! private int slicerPosition; ! ! public Decision(Strategy bestStrategy, TimeSeriesSlicer slicer,int slicerPosition,AnalysisCriterion criterion, List<Trade> trades, Runner runner) { this.strategy = bestStrategy; ! this.slicer = new RegularSlicer(slicer.getSeries(), slicer.getPeriod(), slicer.getSlice(0).getTick(slicer.getSlice(0).getBegin()).getDate()); this.criterion = criterion; this.trades = trades; this.runner = runner; + this.slicerPosition = slicerPosition; } public double evaluateCriterion() { ! return this.criterion.calculate(getActualSlice(), trades); } public double evaluateCriterion(AnalysisCriterion otherCriterion) { ! return otherCriterion.calculate(getActualSlice(), trades); } *************** *** 42,48 **** } ! public Decision applyFor(TimeSeries nextSeries) { ! List<Trade> newTrades = runner.run(strategy, nextSeries.getBegin(), nextSeries.getEnd()); ! return new Decision(this.strategy, nextSeries, this.criterion, newTrades, runner); } --- 47,53 ---- } ! public Decision applyFor(int slicePosition) { ! List<Trade> newTrades = runner.run(slicePosition); ! return new Decision(this.strategy,slicer,slicerPosition+1, this.criterion, newTrades, runner); } *************** *** 51,72 **** } ! public TimeSeries getSeries() { ! return series; ! } ! ! @Override ! public boolean equals(Object obj) { ! if (obj instanceof Decision) { ! Decision decision = (Decision) obj; ! return decision.criterion.equals(this.criterion) && decision.series.equals(this.series) ! && decision.strategy.equals(this.strategy) && decision.trades.equals(this.trades); ! } ! return false; ! } ! ! @Override ! public int hashCode() { ! return (17 * criterion.hashCode()) + (31 * strategy.hashCode()) + (51 * series.hashCode()) ! + (23 * trades.hashCode()); } --- 56,61 ---- } ! public TimeSeries getActualSlice() { ! return slicer.getSlice(slicerPosition); } *************** *** 83,94 **** public String getName() { ! return series.getName() + ": " + series.getPeriodName(); } public String getFileName() { ! return this.getClass().getSimpleName() + series.getTick(series.getBegin()).getDate().toString("hhmmddMMyyyy"); } - } --- 72,133 ---- public String getName() { ! return getActualSlice().getName() + ": " + getActualSlice().getPeriodName(); } public String getFileName() { ! return this.getClass().getSimpleName() + getActualSlice().getTick(getActualSlice().getBegin()).getDate().toString("hhmmddMMyyyy"); } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((criterion == null) ? 0 : criterion.hashCode()); + result = prime * result + ((runner == null) ? 0 : runner.hashCode()); + result = prime * result + ((slicer == null) ? 0 : slicer.hashCode()); + result = prime * result + slicerPosition; + result = prime * result + ((strategy == null) ? 0 : strategy.hashCode()); + result = prime * result + ((trades == null) ? 0 : trades.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 Decision other = (Decision) obj; + if (criterion == null) { + if (other.criterion != null) + return false; + } else if (!criterion.equals(other.criterion)) + return false; + if (runner == null) { + if (other.runner != null) + return false; + } else if (!runner.equals(other.runner)) + return false; + if (slicer == null) { + if (other.slicer != null) + return false; + } else if (!slicer.equals(other.slicer)) + return false; + if (slicerPosition != other.slicerPosition) + return false; + if (strategy == null) { + if (other.strategy != null) + return false; + } else if (!strategy.equals(other.strategy)) + return false; + if (trades == null) { + if (other.trades != null) + return false; + } else if (!trades.equals(other.trades)) + return false; + return true; + } } --- NEW FILE: HigherValueEvaluatorFactory.java --- package net.sf.tail.analysis.evaluator; import java.util.Set; import net.sf.tail.AnalysisCriterion; import net.sf.tail.Strategy; import net.sf.tail.StrategyEvaluator; import net.sf.tail.TimeSeriesSlicer; import net.sf.tail.runner.RunnerFactory; public class HigherValueEvaluatorFactory implements StrategyEvaluatorFactory { public StrategyEvaluator create(RunnerFactory runnerFactory, Set<Strategy> strategies, TimeSeriesSlicer slicer, AnalysisCriterion criterion) { return new HigherValueEvaluator(runnerFactory,strategies,slicer,criterion); } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + (this.getClass().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; return true; } } Index: DummyDecision.java =================================================================== RCS file: /cvsroot/tail/Tail/src/java/net/sf/tail/analysis/evaluator/DummyDecision.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** DummyDecision.java 7 Nov 2007 22:22:10 -0000 1.1 --- DummyDecision.java 21 Nov 2007 21:55:19 -0000 1.2 *************** *** 4,10 **** import java.util.List; ! import net.sf.tail.OperationType; import net.sf.tail.Trade; - import net.sf.tail.runner.HistoryRunner; public class DummyDecision extends Decision { --- 4,9 ---- import java.util.List; ! import net.sf.tail.TimeSeriesSlicer; import net.sf.tail.Trade; public class DummyDecision extends Decision { *************** *** 12,22 **** private double value; ! public DummyDecision(double value) { ! super(null, null, null, new LinkedList<Trade>(), new HistoryRunner(OperationType.BUY)); this.value = value; } ! public DummyDecision(List<Trade> trades) { ! super(null, null, null, trades, new HistoryRunner(OperationType.BUY)); } --- 11,21 ---- private double value; ! public DummyDecision(double value, TimeSeriesSlicer slicer) { ! super(null, slicer,0, null, new LinkedList<Trade>(), null); this.value = value; } ! public DummyDecision(List<Trade> trades, TimeSeriesSlicer slicer) { ! super(null, slicer,0, null, trades, null); } Index: HigherValueEvaluator.java =================================================================== RCS file: /cvsroot/tail/Tail/src/java/net/sf/tail/analysis/evaluator/HigherValueEvaluator.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** HigherValueEvaluator.java 8 Oct 2007 19:38:14 -0000 1.1 --- HigherValueEvaluator.java 21 Nov 2007 21:55:19 -0000 1.2 *************** *** 1,16 **** package net.sf.tail.analysis.evaluator; import java.util.Iterator; import java.util.Set; - import org.apache.log4j.Logger; - import net.sf.tail.AnalysisCriterion; - import net.sf.tail.StrategyEvaluator; - import net.sf.tail.OperationType; import net.sf.tail.Runner; import net.sf.tail.Strategy; ! import net.sf.tail.TimeSeries; ! import net.sf.tail.runner.HistoryRunner; public class HigherValueEvaluator implements StrategyEvaluator { --- 1,16 ---- package net.sf.tail.analysis.evaluator; + import java.util.HashMap; import java.util.Iterator; import java.util.Set; import net.sf.tail.AnalysisCriterion; import net.sf.tail.Runner; import net.sf.tail.Strategy; ! import net.sf.tail.StrategyEvaluator; ! import net.sf.tail.TimeSeriesSlicer; ! import net.sf.tail.runner.RunnerFactory; ! ! import org.apache.log4j.Logger; public class HigherValueEvaluator implements StrategyEvaluator { *************** *** 18,38 **** private static final Logger LOG = Logger.getLogger(HigherValueEvaluator.class); - private Runner runner; ! public HigherValueEvaluator(Runner runner) { ! this.runner = runner; } ! public Decision evaluate(Set<Strategy> strategies, TimeSeries series, AnalysisCriterion criterion) { Iterator<Strategy> iter = strategies.iterator(); Strategy bestStrategy = iter.next(); ! Decision bestDecision = new Decision(bestStrategy, series, criterion, runner.run(bestStrategy, series ! .getBegin(), series.getEnd()), runner); while (iter.hasNext()) { Strategy strategy = iter.next(); ! Decision decision = new Decision(strategy, series, criterion, runner.run(strategy, series.getBegin(), ! series.getEnd()), new HistoryRunner(OperationType.BUY)); double value = decision.evaluateCriterion(); LOG.info(String.format("For %s, criterion %s, gave %.3f", strategy, criterion.getClass().getSimpleName(), --- 18,58 ---- private static final Logger LOG = Logger.getLogger(HigherValueEvaluator.class); ! private Set<Strategy> strategies; ! ! private TimeSeriesSlicer slicer; ! ! private AnalysisCriterion criterion; ! ! private int slicePosition; ! ! private HashMap<Strategy, Runner> hashRunner; ! ! public HigherValueEvaluator(RunnerFactory runnerFactory,Set<Strategy> strategies, TimeSeriesSlicer slicer, AnalysisCriterion criterion) { ! this.strategies = strategies; ! this.slicer = slicer; ! this.criterion = criterion; ! this.slicePosition = 0; ! ! this.hashRunner = new HashMap<Strategy, Runner>(); ! ! for (Strategy strategy : strategies) { ! hashRunner.put(strategy, runnerFactory.create(strategy, slicer)); ! } } ! public Decision evaluate(int slicePosition) { Iterator<Strategy> iter = strategies.iterator(); Strategy bestStrategy = iter.next(); ! Runner runner = hashRunner.get(bestStrategy); ! ! Decision bestDecision = new Decision(bestStrategy, slicer,slicePosition, criterion, runner.run(slicePosition), runner); while (iter.hasNext()) { Strategy strategy = iter.next(); ! runner = hashRunner.get(strategy); ! ! Decision decision = new Decision(strategy, slicer,slicePosition, criterion, runner.run(slicePosition), runner); double value = decision.evaluateCriterion(); LOG.info(String.format("For %s, criterion %s, gave %.3f", strategy, criterion.getClass().getSimpleName(), *************** *** 50,54 **** final int prime = 31; int result = 1; ! result = prime * result + ((runner == null) ? 0 : runner.hashCode()); return result; } --- 70,78 ---- final int prime = 31; int result = 1; ! result = prime * result + ((criterion == null) ? 0 : criterion.hashCode()); ! result = prime * result + ((hashRunner == null) ? 0 : hashRunner.hashCode()); ! result = prime * result + slicePosition; ! result = prime * result + ((slicer == null) ? 0 : slicer.hashCode()); ! result = prime * result + ((strategies == null) ? 0 : strategies.hashCode()); return result; } *************** *** 63,70 **** return false; final HigherValueEvaluator other = (HigherValueEvaluator) obj; ! if (runner == null) { ! if (other.runner != null) return false; ! } else if (!runner.equals(other.runner)) return false; return true; --- 87,111 ---- return false; final HigherValueEvaluator other = (HigherValueEvaluator) obj; ! if (criterion == null) { ! if (other.criterion != null) return false; ! } else if (!criterion.equals(other.criterion)) ! return false; ! if (hashRunner == null) { ! if (other.hashRunner != null) ! return false; ! } else if (!hashRunner.equals(other.hashRunner)) ! return false; ! if (slicePosition != other.slicePosition) ! return false; ! if (slicer == null) { ! if (other.slicer != null) ! return false; ! } else if (!slicer.equals(other.slicer)) ! return false; ! if (strategies == null) { ! if (other.strategies != null) ! return false; ! } else if (!strategies.equals(other.strategies)) return false; return true; --- NEW FILE: StrategyEvaluatorFactory.java --- package net.sf.tail.analysis.evaluator; import java.util.Set; import net.sf.tail.AnalysisCriterion; import net.sf.tail.Strategy; import net.sf.tail.StrategyEvaluator; import net.sf.tail.TimeSeriesSlicer; import net.sf.tail.runner.RunnerFactory; public interface StrategyEvaluatorFactory { StrategyEvaluator create(RunnerFactory runnerFactory,Set<Strategy> strategies, TimeSeriesSlicer slicer, AnalysisCriterion criterion); } |