Subversion Repositories Integrator Subversion

Rev

Blame | Last modification | View Log | Download | RSS feed

package br.com.kronus.core;

import java.util.ArrayList;
import java.util.List;

public class BacktestSummary {

    private List<BacktestTradeResult> trades = new ArrayList<>();

    private double totalPnl;
    private int numTradesExecutados;
    private int numTradesVencedores;
    private int numTradesPerdedores;
    private double winRate;
    private double maxDrawdown;

    public void addTrade(BacktestTradeResult tradeResult) {
        trades.add(tradeResult);
    }

    public void calcularResumo() {
        totalPnl = 0.0;
        numTradesExecutados = 0;
        numTradesVencedores = 0;
        numTradesPerdedores = 0;
        maxDrawdown = 0.0;

        double equity = 0.0;
        double picoEquity = 0.0;

        for (BacktestTradeResult tr : trades) {
            if (!tr.isExecutado()) {
                continue;
            }

            numTradesExecutados++;
            totalPnl += tr.getPnl();

            if (tr.getPnl() > 0) {
                numTradesVencedores++;
            } else if (tr.getPnl() < 0) {
                numTradesPerdedores++;
            }

            equity += tr.getPnl();
            if (equity > picoEquity) {
                picoEquity = equity;
            }
            double drawdownAtual = picoEquity - equity;
            if (drawdownAtual > maxDrawdown) {
                maxDrawdown = drawdownAtual;
            }
        }

        if (numTradesExecutados > 0) {
            winRate = (numTradesVencedores * 100.0) / numTradesExecutados;
        } else {
            winRate = 0.0;
        }
    }

    public List<BacktestTradeResult> getTrades() {
        return trades;
    }

    public double getTotalPnl() {
        return totalPnl;
    }

    public int getNumTradesExecutados() {
        return numTradesExecutados;
    }

    public int getNumTradesVencedores() {
        return numTradesVencedores;
    }

    public int getNumTradesPerdedores() {
        return numTradesPerdedores;
    }

    public double getWinRate() {
        return winRate;
    }

    public double getMaxDrawdown() {
        return maxDrawdown;
    }
   
}