Details | Last modification | View Log | RSS feed
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 778 | blopes | 1 | package br.com.kronus.core; |
| 2 | |||
| 3 | import java.util.ArrayList; |
||
| 4 | import java.util.List; |
||
| 5 | |||
| 6 | public class BacktestSummary { |
||
| 7 | |||
| 8 | private List<BacktestTradeResult> trades = new ArrayList<>(); |
||
| 9 | |||
| 10 | private double totalPnl; |
||
| 11 | private int numTradesExecutados; |
||
| 12 | private int numTradesVencedores; |
||
| 13 | private int numTradesPerdedores; |
||
| 14 | private double winRate; |
||
| 15 | private double maxDrawdown; |
||
| 16 | |||
| 17 | public void addTrade(BacktestTradeResult tradeResult) { |
||
| 18 | trades.add(tradeResult); |
||
| 19 | } |
||
| 20 | |||
| 21 | public void calcularResumo() { |
||
| 22 | totalPnl = 0.0; |
||
| 23 | numTradesExecutados = 0; |
||
| 24 | numTradesVencedores = 0; |
||
| 25 | numTradesPerdedores = 0; |
||
| 26 | maxDrawdown = 0.0; |
||
| 27 | |||
| 28 | double equity = 0.0; |
||
| 29 | double picoEquity = 0.0; |
||
| 30 | |||
| 31 | for (BacktestTradeResult tr : trades) { |
||
| 32 | if (!tr.isExecutado()) { |
||
| 33 | continue; |
||
| 34 | } |
||
| 35 | |||
| 36 | numTradesExecutados++; |
||
| 37 | totalPnl += tr.getPnl(); |
||
| 38 | |||
| 39 | if (tr.getPnl() > 0) { |
||
| 40 | numTradesVencedores++; |
||
| 41 | } else if (tr.getPnl() < 0) { |
||
| 42 | numTradesPerdedores++; |
||
| 43 | } |
||
| 44 | |||
| 45 | equity += tr.getPnl(); |
||
| 46 | if (equity > picoEquity) { |
||
| 47 | picoEquity = equity; |
||
| 48 | } |
||
| 49 | double drawdownAtual = picoEquity - equity; |
||
| 50 | if (drawdownAtual > maxDrawdown) { |
||
| 51 | maxDrawdown = drawdownAtual; |
||
| 52 | } |
||
| 53 | } |
||
| 54 | |||
| 55 | if (numTradesExecutados > 0) { |
||
| 56 | winRate = (numTradesVencedores * 100.0) / numTradesExecutados; |
||
| 57 | } else { |
||
| 58 | winRate = 0.0; |
||
| 59 | } |
||
| 60 | } |
||
| 61 | |||
| 62 | public List<BacktestTradeResult> getTrades() { |
||
| 63 | return trades; |
||
| 64 | } |
||
| 65 | |||
| 66 | public double getTotalPnl() { |
||
| 67 | return totalPnl; |
||
| 68 | } |
||
| 69 | |||
| 70 | public int getNumTradesExecutados() { |
||
| 71 | return numTradesExecutados; |
||
| 72 | } |
||
| 73 | |||
| 74 | public int getNumTradesVencedores() { |
||
| 75 | return numTradesVencedores; |
||
| 76 | } |
||
| 77 | |||
| 78 | public int getNumTradesPerdedores() { |
||
| 79 | return numTradesPerdedores; |
||
| 80 | } |
||
| 81 | |||
| 82 | public double getWinRate() { |
||
| 83 | return winRate; |
||
| 84 | } |
||
| 85 | |||
| 86 | public double getMaxDrawdown() { |
||
| 87 | return maxDrawdown; |
||
| 88 | } |
||
| 89 | |||
| 90 | } |