|
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(); } } |
|
From: Julian M. <jm...@fl...> - 2007-06-08 17:54:08
|
Ois, vi os comentario Danilo e acabei esbarrando nesse aqui sem querer. O calculate do MaximumDrawnDown me soou estranho: O drawnDown esta sendo calculado como sendo a diferenca: maxPeak - =20 value; Isso quer dizer que qdo os valores absolutos do indicador sao altos=20 (400 - 100,etc..), entao o risco no RewardRiskRatioCriterion ser=E1 baixo? Mas, se outro indicador tem valores baixos (0,4 - 0,1), entao o MDD =20 sera 0,3 e o valor do RewardRiskRatio sera alto! Sera que esse drawnDown nao tinha que ser a relacao value/maxPeak? (p.s. nao li a respeito do assunto :-(..) btw, e se o indicador soh tiver valores negativos.. o 'maxPeak' est=E1 =20= sendo inicializado com zero n=E9? ... acho que n=E3o vai funcionar. Abracos, JM On Jun 8, 2007, at 12:14 PM, M=E1rcio Vinicius dos Santos wrote: > Update of /cvsroot/tail/Tail/src/java/net/sf/tail/analysis/criteria > In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv9490/src/=20 > java/net/sf/tail/analysis/criteria > > Added Files: > AnalysisCriterion.java TotalProfitCriterion.java > MaximumDrawDownCriteria.java RewardRiskRatioCriterion.java > Log Message: > Cria=E7=E3o 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, =20 > List<Trade> trades) { > this.indicator =3D indicator; > this.trades =3D trades; > } > > public TotalProfitCriterion(TimeSeries series, List<Trade> = trades) { > this(new ClosePriceIndicator(series),trades); > } > > public double calculate() { > double value =3D 1d; > for (Trade trade : trades) { > value =3D calculateProfit(trade, value); > } > return value; > } > > private double calculateProfit(Trade trade, double value) { > > return = (indicator.getValue(trade.getExit().getIndex()).doubleValue=20 > () / indicator.getValue( > = trade.getEntry().getIndex()).doubleValue()) > * value; > > } > > } > > --- NEW FILE: AnalysisCriterion.java --- > package net.sf.tail.analysis.criteria; > > > public interface AnalysisCriterion { > =09 > double calculate(); > =09 > } > > --- 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> =20 > indicator, int seriesSize) { > this.indicator =3D indicator; > this.seriesSize =3D seriesSize; > } > > > public double calculate() { > double max =3D 0; > double maxPeak =3D 0; > double drawDown =3D 0; > > for (int i =3D 0; i < seriesSize; i++) { > double value =3D = indicator.getValue(i).doubleValue(); > if (value > maxPeak) { > maxPeak =3D value; > } > =09 > drawDown =3D maxPeak - value; > if (drawDown > max) { > max =3D 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; > > =09 > private MaximumDrawDownCriteria maxDrawnCriteria; > > public RewardRiskRatioCriterion(Indicator<? extends Number> =20 > indicator, List<Trade> trades, int seriesSize) { > this.totalProfit =3D new = TotalProfitCriterion(indicator,trades); > maxDrawnCriteria =3D new MaximumDrawDownCriteria=20 > (indicator,seriesSize); > } > > public RewardRiskRatioCriterion(TimeSeries series, List<Trade> =20= > trades, int seriesSize) { > this(new ClosePriceIndicator(series),trades, = seriesSize); > } > > public double calculate() { > =09 > return = totalProfit.calculate()/maxDrawnCriteria.calculate(); > } > > } > > > ----------------------------------------------------------------------=20= > --- > This SF.net email is sponsored by DB2 Express > Download DB2 Express C - the FREE version of DB2 express and take > control of your XML. No limits. Just data. Click to get it now. > http://sourceforge.net/powerbar/db2/=20 > _______________________________________________ > Tail-cvs mailing list > Tai...@li... > https://lists.sourceforge.net/lists/listinfo/tail-cvs -- Julian Monteiro |