Subversion Repositories Integrator Subversion

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
778 blopes 1
package br.com.ec.controller;
2
 
3
import java.io.Serializable;
4
import java.time.LocalDateTime;
5
import java.time.format.DateTimeFormatter;
6
import java.util.ArrayList;
7
import java.util.List;
8
 
9
import javax.annotation.PostConstruct;
10
import javax.faces.bean.ManagedBean;
11
import javax.faces.bean.ViewScoped;
12
 
13
import org.primefaces.model.chart.Axis;
14
import org.primefaces.model.chart.AxisType;
15
import org.primefaces.model.chart.LineChartModel;
16
import org.primefaces.model.chart.LineChartSeries;
17
 
18
import br.com.ec.domain.dto.AtivoAnaliseDTO;
19
import br.com.ec.domain.dto.TradeDTO;
20
 
21
@ManagedBean(name = "kronusDashboardBean")
22
@ViewScoped
23
public class KronusDashboardBean implements Serializable {
24
 
25
    private double plDia;
26
    private int numeroTrades;
27
    private double taxaAcerto;
28
 
29
    private List<TradeDTO> tradesDoDia;
30
 
31
    private LineChartModel plDiaChart;
32
 
33
    private List<AtivoAnaliseDTO> ativosAnalise;
34
 
35
    private final DateTimeFormatter HORA_FORMATTER = DateTimeFormatter.ofPattern("HH:mm");
36
 
37
    public KronusDashboardBean() {
38
    }
39
 
40
    public List<AtivoAnaliseDTO> getAtivosAnalise() {
41
        return ativosAnalise;
42
    }
43
 
44
    @PostConstruct
45
    public void init() {
46
        atualizarDashboard();
47
    }
48
 
49
    public void atualizarDashboard() {
50
        tradesDoDia = new ArrayList<>();
51
 
52
        tradesDoDia.add(new TradeDTO(
53
                LocalDateTime.now().minusMinutes(25),
54
                "WINZ25",
55
                "COMPRA",
56
                1,
57
                125000.0,
58
                125150.0,
59
                150.0
60
        ));
61
 
62
        tradesDoDia.add(new TradeDTO(
63
                LocalDateTime.now().minusMinutes(10),
64
                "WINZ25",
65
                "VENDA",
66
                1,
67
                125180.0,
68
                125130.0,
69
                -50.0
70
        ));
71
 
72
        calcularResumo();
73
        montarGraficoPL();
74
 
75
        // 🔥 MOCK dos ativos monitorados – depois você puxa do motor do robô
76
        ativosAnalise = new ArrayList<>();
77
        ativosAnalise.add(new AtivoAnaliseDTO(
78
                "WINZ25", "M5", "ALTA", "Aguardando gatilho", 125150.0, 100.0, "NEUTRO"
79
        ));
80
        ativosAnalise.add(new AtivoAnaliseDTO(
81
                "WDOZ25", "M5", "BAIXA", "Em trade", 5.1200, 250.0, "VENDA"
82
        ));
83
        ativosAnalise.add(new AtivoAnaliseDTO(
84
                "VALE3", "M15", "LATERAL", "Sem setup", 72.35, 0.0, "NEUTRO"
85
        ));
86
    }
87
 
88
 
89
    private void calcularResumo() {
90
        if (tradesDoDia == null || tradesDoDia.isEmpty()) {
91
            plDia = 0.0;
92
            numeroTrades = 0;
93
            taxaAcerto = 0.0;
94
            return;
95
        }
96
 
97
        numeroTrades = tradesDoDia.size();
98
        double somaPL = 0.0;
99
        int vencedores = 0;
100
 
101
        for (TradeDTO t : tradesDoDia) {
102
            somaPL += t.getPl();
103
            if (t.getPl() > 0) {
104
                vencedores++;
105
            }
106
        }
107
 
108
        plDia = somaPL;
109
        taxaAcerto = (vencedores * 100.0) / numeroTrades;
110
    }
111
 
112
    private void montarGraficoPL() {
113
        plDiaChart = new LineChartModel();
114
 
115
        LineChartSeries serie = new LineChartSeries();
116
        serie.setLabel("P/L acumulado");
117
 
118
        double acumulado = 0.0;
119
 
120
        if (tradesDoDia != null) {
121
            for (TradeDTO t : tradesDoDia) {
122
                acumulado += t.getPl();
123
                LocalDateTime ldt = t.getDataHora().toInstant()
124
                        .atZone(java.time.ZoneId.systemDefault())
125
                        .toLocalDateTime();
126
 
127
                String hora = ldt.format(HORA_FORMATTER);
128
                serie.set(hora, acumulado);
129
            }
130
        }
131
 
132
        plDiaChart.addSeries(serie);
133
 
134
        plDiaChart.setTitle("P/L Acumulado no Dia");
135
        plDiaChart.setLegendPosition("e");
136
        plDiaChart.setAnimate(true);
137
 
138
        Axis xAxis = plDiaChart.getAxis(AxisType.X);
139
        xAxis.setLabel("Hora");
140
 
141
        Axis yAxis = plDiaChart.getAxis(AxisType.Y);
142
        yAxis.setLabel("P/L");
143
    }
144
 
145
    public double getPlDia() {
146
        return plDia;
147
    }
148
 
149
    public int getNumeroTrades() {
150
        return numeroTrades;
151
    }
152
 
153
    public double getTaxaAcerto() {
154
        return taxaAcerto;
155
    }
156
 
157
    public List<TradeDTO> getTradesDoDia() {
158
        return tradesDoDia;
159
    }
160
 
161
    public LineChartModel getPlDiaChart() {
162
        return plDiaChart;
163
    }
164
}