Subversion Repositories Integrator Subversion

Rev

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

package br.com.kronus.web;

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 javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;

@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 final DateTimeFormatter HORA_FORMATTER = DateTimeFormatter.ofPattern("HH:mm");

    public KronusDashboardBean() {
    }

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

    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();
                String hora = t.getDataHora().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;
    }
}