Subversion Repositories Integrator Subversion

Rev

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

package br.com.ec.controller;

import java.io.Serializable;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import org.primefaces.model.chart.Axis;
import org.primefaces.model.chart.AxisType;
import org.primefaces.model.chart.LineChartModel;
import org.primefaces.model.chart.LineChartSeries;

import br.com.ec.domain.dto.AtivoAnaliseDTO;
import br.com.ec.domain.dto.TradeDTO;

@ManagedBean(name = "kronusDashboardBean")
@ViewScoped
public class KronusDashboardBean implements Serializable {

    private double plDia;
    private int numeroTrades;
    private double taxaAcerto;

    private List<TradeDTO> tradesDoDia;

    private LineChartModel plDiaChart;
   
    private List<AtivoAnaliseDTO> ativosAnalise;

    private final DateTimeFormatter HORA_FORMATTER = DateTimeFormatter.ofPattern("HH:mm");

    public KronusDashboardBean() {
    }
   
    public List<AtivoAnaliseDTO> getAtivosAnalise() {
        return ativosAnalise;
    }

    @PostConstruct
    public void init() {
        atualizarDashboard();
    }

    public void atualizarDashboard() {
        tradesDoDia = new ArrayList<>();

        tradesDoDia.add(new TradeDTO(
                LocalDateTime.now().minusMinutes(25),
                "WINZ25",
                "COMPRA",
                1,
                125000.0,
                125150.0,
                150.0
        ));

        tradesDoDia.add(new TradeDTO(
                LocalDateTime.now().minusMinutes(10),
                "WINZ25",
                "VENDA",
                1,
                125180.0,
                125130.0,
                -50.0
        ));

        calcularResumo();
        montarGraficoPL();

        // 🔥 MOCK dos ativos monitorados – depois você puxa do motor do robô
        ativosAnalise = new ArrayList<>();
        ativosAnalise.add(new AtivoAnaliseDTO(
                "WINZ25", "M5", "ALTA", "Aguardando gatilho", 125150.0, 100.0, "NEUTRO"
        ));
        ativosAnalise.add(new AtivoAnaliseDTO(
                "WDOZ25", "M5", "BAIXA", "Em trade", 5.1200, 250.0, "VENDA"
        ));
        ativosAnalise.add(new AtivoAnaliseDTO(
                "VALE3", "M15", "LATERAL", "Sem setup", 72.35, 0.0, "NEUTRO"
        ));
    }


    private void calcularResumo() {
        if (tradesDoDia == null || tradesDoDia.isEmpty()) {
            plDia = 0.0;
            numeroTrades = 0;
            taxaAcerto = 0.0;
            return;
        }

        numeroTrades = tradesDoDia.size();
        double somaPL = 0.0;
        int vencedores = 0;

        for (TradeDTO t : tradesDoDia) {
            somaPL += t.getPl();
            if (t.getPl() > 0) {
                vencedores++;
            }
        }

        plDia = somaPL;
        taxaAcerto = (vencedores * 100.0) / numeroTrades;
    }

    private void montarGraficoPL() {
        plDiaChart = new LineChartModel();

        LineChartSeries serie = new LineChartSeries();
        serie.setLabel("P/L acumulado");

        double acumulado = 0.0;

        if (tradesDoDia != null) {
            for (TradeDTO t : tradesDoDia) {
                acumulado += t.getPl();
                LocalDateTime ldt = t.getDataHora().toInstant()
                        .atZone(java.time.ZoneId.systemDefault())
                        .toLocalDateTime();

                String hora = ldt.format(HORA_FORMATTER);
                serie.set(hora, acumulado);
            }
        }

        plDiaChart.addSeries(serie);

        plDiaChart.setTitle("P/L Acumulado no Dia");
        plDiaChart.setLegendPosition("e");
        plDiaChart.setAnimate(true);

        Axis xAxis = plDiaChart.getAxis(AxisType.X);
        xAxis.setLabel("Hora");

        Axis yAxis = plDiaChart.getAxis(AxisType.Y);
        yAxis.setLabel("P/L");
    }

    public double getPlDia() {
        return plDia;
    }

    public int getNumeroTrades() {
        return numeroTrades;
    }

    public double getTaxaAcerto() {
        return taxaAcerto;
    }

    public List<TradeDTO> getTradesDoDia() {
        return tradesDoDia;
    }

    public LineChartModel getPlDiaChart() {
        return plDiaChart;
    }
}