|
From: Thies <tg...@us...> - 2007-06-16 18:20:48
|
Update of /cvsroot/tail/Tail/src/java/net/sf/tail/flow In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv14050/src/java/net/sf/tail/flow Added Files: CashFlow.java Log Message: Interface AnalysisCriterion mudada para o pacote certo, criado o CashFlow, e ajustado o MaximumDrawDown para utilizar o CashFlow --- NEW FILE: CashFlow.java --- package net.sf.tail.flow; import java.util.ArrayList; import java.util.Collections; import java.util.List; import net.sf.tail.TimeSeries; import net.sf.tail.Trade; public class CashFlow { private final TimeSeries timeSeries; private final List<Trade> trades; private List<Double> values; public CashFlow(TimeSeries timeSeries, List<Trade> trades) { this.timeSeries = timeSeries; this.trades = trades; values = new ArrayList<Double>(); } public double getValue(int index) { increaseLength(index); if(values.get(index) != null) return values.get(index); if(index == 0) { values.add(0, 1d); return 1d; } Trade trade = respectiveTrade(index); if(trade == null) { values.add(index, getValue(index - 1)); return values.get(index); } else { Double profit = timeSeries.getTick(index).getClosePrice() / timeSeries.getTick(trade.getEntry().getIndex()).getClosePrice(); Double value = getValue(trade.getEntry().getIndex()) * profit; values.add(index, value); return value; } } public int getSize() { return timeSeries.getSize(); } private Trade respectiveTrade(int index) { for(int i=0; i < trades.size(); i++) { if(trades.get(i).getExit().getIndex() == index) return trades.get(i); if(trades.get(i).getExit().getIndex() > index) { if(trades.get(i).getEntry().getIndex() < index) return trades.get(i); else return null; } } return null; } //TODO: Mesmo método do CachedIndicator, deixar duplicado o código? private void increaseLength(int index) { if (values.size() <= index) { values.addAll(Collections.<Double> nCopies(index - values.size() + 1, null)); } } } |