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));
}
}
}
|