|
From: Márcio V. d. S. <mv...@us...> - 2007-06-08 15:14:26
|
Update of /cvsroot/tail/Tail/src/java/net/sf/tail/analysis/criteria In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv9490/src/java/net/sf/tail/analysis/criteria Added Files: AnalysisCriterion.java TotalProfitCriterion.java MaximumDrawDownCriteria.java RewardRiskRatioCriterion.java Log Message: Criação da classes TotalProfitCriterion e RewardRiskRadioCriterion --- NEW FILE: TotalProfitCriterion.java --- package net.sf.tail.analysis.criteria; import java.util.List; import net.sf.tail.Indicator; import net.sf.tail.TimeSeries; import net.sf.tail.Trade; import net.sf.tail.indicator.simple.ClosePriceIndicator; public class TotalProfitCriterion implements AnalysisCriterion { private final Indicator<? extends Number> indicator; private List<Trade> trades; public TotalProfitCriterion(Indicator<? extends Number> indicator, List<Trade> trades) { this.indicator = indicator; this.trades = trades; } public TotalProfitCriterion(TimeSeries series, List<Trade> trades) { this(new ClosePriceIndicator(series),trades); } public double calculate() { double value = 1d; for (Trade trade : trades) { value = calculateProfit(trade, value); } return value; } private double calculateProfit(Trade trade, double value) { return (indicator.getValue(trade.getExit().getIndex()).doubleValue() / indicator.getValue( trade.getEntry().getIndex()).doubleValue()) * value; } } --- NEW FILE: AnalysisCriterion.java --- package net.sf.tail.analysis.criteria; public interface AnalysisCriterion { double calculate(); } --- NEW FILE: MaximumDrawDownCriteria.java --- package net.sf.tail.analysis.criteria; import net.sf.tail.Indicator; public class MaximumDrawDownCriteria implements AnalysisCriterion { private Indicator<? extends Number> indicator; private int seriesSize; public MaximumDrawDownCriteria(Indicator<? extends Number> indicator, int seriesSize) { this.indicator = indicator; this.seriesSize = seriesSize; } public double calculate() { double max = 0; double maxPeak = 0; double drawDown = 0; for (int i = 0; i < seriesSize; i++) { double value = indicator.getValue(i).doubleValue(); if (value > maxPeak) { maxPeak = value; } drawDown = maxPeak - value; if (drawDown > max) { max = drawDown; } } return max; } } --- NEW FILE: RewardRiskRatioCriterion.java --- package net.sf.tail.analysis.criteria; import java.util.List; import net.sf.tail.Indicator; import net.sf.tail.TimeSeries; import net.sf.tail.Trade; import net.sf.tail.indicator.simple.ClosePriceIndicator; public class RewardRiskRatioCriterion implements AnalysisCriterion { private final AnalysisCriterion totalProfit; private MaximumDrawDownCriteria maxDrawnCriteria; public RewardRiskRatioCriterion(Indicator<? extends Number> indicator, List<Trade> trades, int seriesSize) { this.totalProfit = new TotalProfitCriterion(indicator,trades); maxDrawnCriteria = new MaximumDrawDownCriteria(indicator,seriesSize); } public RewardRiskRatioCriterion(TimeSeries series, List<Trade> trades, int seriesSize) { this(new ClosePriceIndicator(series),trades, seriesSize); } public double calculate() { return totalProfit.calculate()/maxDrawnCriteria.calculate(); } } |