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.IOException;
4
import java.io.Serializable;
5
import java.io.Serializable;
6
import java.util.ArrayList;
7
import java.util.ArrayList;
8
import java.util.List;
9
import java.util.List;
10
 
11
import javax.annotation.PostConstruct;
12
import javax.faces.bean.ViewScoped;
13
import javax.inject.Named;
14
 
15
import br.com.kronus.core.Candle;
16
import br.com.kronus.core.DetectorGatilhos;
17
import br.com.kronus.core.PadraoGatilho;
18
import br.com.kronus.fibo.FibonacciService;
19
import br.com.kronus.strategy.EstrategiaGatilhoTipo3;
20
import br.com.kronus.strategy.ResultadoEstrategiaGatilho3;
21
import br.com.robo.sim.CandleExcelReader;
22
 
23
@Named
24
@ViewScoped
25
public class AnaliseTempoRealBean implements Serializable {
26
 
27
    private static final long serialVersionUID = 1L;
28
 
29
    // Lista completa de candles lidos do Excel (histórico)
30
    private List<Candle> candlesExcel;
31
 
32
    // Lista dos candles já "liberados" na simulação em tempo real
33
    private List<Candle> candlesProcessados;
34
 
35
    // Controle de índice do próximo candle a ser analisado
36
    private int proximoIndice;
37
 
38
    // Detector de padrões de gatilhos (GR, G1, G2, G3, G4)
39
    private DetectorGatilhos detector;
40
 
41
    // Estratégia específica do Gatilho Tipo 3
42
    private EstrategiaGatilhoTipo3 estrategiaGatilhoTipo3;
43
 
44
    // Resultados das operações/ simulações da estratégia
45
    private List<ResultadoEstrategiaGatilho3> resultadosEstrategia;
46
 
47
    // Mensagem de status para exibir no dashboard
48
    private String statusMensagem;
49
 
50
    // Flag para saber se já terminou de analisar todo o arquivo
51
    private boolean analiseConcluida;
52
 
53
    // Caminho ou nome do recurso do Excel
54
    private String caminhoExcel = "/dados.xls";
55
 
56
    @PostConstruct
57
    public void init() {
58
        this.candlesProcessados = new ArrayList<>();
59
        this.resultadosEstrategia = new ArrayList<>();
60
        this.proximoIndice = 0;
61
        this.analiseConcluida = false;
62
 
63
        // Detector com logs ativados (se quiser desligar, use false)
64
        this.detector = new DetectorGatilhos(true);
65
 
66
        // Estratégia do gatilho 3
67
        FibonacciService fiboService = new FibonacciService();
68
        this.estrategiaGatilhoTipo3 = new EstrategiaGatilhoTipo3(fiboService);
69
 
70
        carregarCandlesDoExcel();
71
    }
72
 
73
    /**
74
     * Lê todos os candles do Excel (histórico completo).
75
     * Aqui você ajusta o LeitorExcelCandles conforme sua implementação.
76
     */
77
    private void carregarCandlesDoExcel() {
78
        try {
79
                CandleExcelReader reader = new CandleExcelReader();
80
            try {
81
                List<Candle> candles = reader.lerCandles(caminhoExcel);
82
                System.out.println("Qtd candles lidos: " + candles.size());
83
                this.candlesExcel = candles;
84
            } catch (IOException e) {
85
                e.printStackTrace();
86
            }
87
 
88
            if (candlesExcel == null || candlesExcel.isEmpty()) {
89
                statusMensagem = "Nenhum candle encontrado no Excel.";
90
                analiseConcluida = true;
91
            } else {
92
                statusMensagem = "Arquivo carregado. Total de candles: " + candlesExcel.size();
93
            }
94
        } catch (Exception e) {
95
            e.printStackTrace();
96
            statusMensagem = "Erro ao carregar candles do Excel: " + e.getMessage();
97
            analiseConcluida = true;
98
        }
99
    }
100
 
101
    /**
102
     * Método chamado a cada minuto (via p:poll, scheduler, botão, etc.)
103
     * Simula a chegada de UM novo candle do mercado,
104
     * executa o detector em modo tempo real,
105
     * e, ao encontrar um G3, dispara a EstrategiaGatilhoTipo3.
106
     */
107
    public void analisarEmTempoReal() {
108
        if (analiseConcluida) {
109
            // Já processou tudo
110
            return;
111
        }
112
 
113
        if (candlesExcel == null || candlesExcel.isEmpty()) {
114
            statusMensagem = "Sem candles para analisar.";
115
            analiseConcluida = true;
116
            return;
117
        }
118
 
119
        if (proximoIndice >= candlesExcel.size()) {
120
            statusMensagem = "Todos os candles do arquivo já foram analisados.";
121
            analiseConcluida = true;
122
            return;
123
        }
124
 
125
        // "Chegou" um candle novo
126
        Candle novoCandle = candlesExcel.get(proximoIndice);
127
        candlesProcessados.add(novoCandle);
128
        proximoIndice++;
129
 
130
        statusMensagem = String.format(
131
                "Novo candle lido: %s | Total processado: %d/%d",
132
                novoCandle.getTime(),
133
                proximoIndice,
134
                candlesExcel.size()
135
        );
136
 
137
        // Chama o detector em modo tempo real
138
        PadraoGatilho padrao = detector.processarCandleTempoReal(candlesProcessados);
139
 
140
        if (padrao != null) {
141
            // Só nos interessa quando tiver Gatilho 3 identificado
142
            if (padrao.getGatilho3() != null) {
143
                try {
144
                    ResultadoEstrategiaGatilho3 resultado =
145
                            estrategiaGatilhoTipo3.executarEstrategia(padrao, candlesProcessados);
146
 
147
                    resultadosEstrategia.add(resultado);
148
 
149
                    statusMensagem = String.format(
150
                            "Padrão encontrado! GR: %s | G1: %s | G2: %s | G3: %s | Operação executada.",
151
                            padrao.getReferencia().getTime(),
152
                            padrao.getGatilho1().getTime(),
153
                            padrao.getGatilho2().getTime(),
154
                            padrao.getGatilho3().getTime()
155
                    );
156
                } catch (Exception e) {
157
                    e.printStackTrace();
158
                    statusMensagem = "Erro ao executar EstrategiaGatilhoTipo3: " + e.getMessage();
159
                }
160
            } else {
161
                // Encontrou padrão sem G3 (ex: padrão que morre antes de completar)
162
                statusMensagem = "Padrão identificado sem G3 completo. Aguardando próximo candle.";
163
            }
164
        }
165
    }
166
 
167
    // ============================================================
168
    // GETTERS / SETTERS para o JSF
169
    // ============================================================
170
 
171
    public List<Candle> getCandlesProcessados() {
172
        return candlesProcessados;
173
    }
174
 
175
    public List<ResultadoEstrategiaGatilho3> getResultadosEstrategia() {
176
        return resultadosEstrategia;
177
    }
178
 
179
    public String getStatusMensagem() {
180
        return statusMensagem;
181
    }
182
 
183
    public boolean isAnaliseConcluida() {
184
        return analiseConcluida;
185
    }
186
 
187
    public String getCaminhoExcel() {
188
        return caminhoExcel;
189
    }
190
 
191
    public void setCaminhoExcel(String caminhoExcel) {
192
        this.caminhoExcel = caminhoExcel;
193
    }
194
 
195
}