Subversion Repositories Integrator Subversion

Rev

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

package br.com.ec.controller;

import java.io.IOException;
import java.io.Serializable;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.ArrayList;
import java.util.List;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ViewScoped;
import javax.inject.Named;

import br.com.kronus.core.Candle;
import br.com.kronus.core.DetectorGatilhos;
import br.com.kronus.core.PadraoGatilho;
import br.com.kronus.fibo.FibonacciService;
import br.com.kronus.strategy.EstrategiaGatilhoTipo3;
import br.com.kronus.strategy.ResultadoEstrategiaGatilho3;
import br.com.robo.sim.CandleExcelReader;

@Named
@ViewScoped
public class AnaliseTempoRealBean implements Serializable {

    private static final long serialVersionUID = 1L;

    // Lista completa de candles lidos do Excel (histórico)
    private List<Candle> candlesExcel;

    // Lista dos candles já "liberados" na simulação em tempo real
    private List<Candle> candlesProcessados;

    // Controle de índice do próximo candle a ser analisado
    private int proximoIndice;

    // Detector de padrões de gatilhos (GR, G1, G2, G3, G4)
    private DetectorGatilhos detector;

    // Estratégia específica do Gatilho Tipo 3
    private EstrategiaGatilhoTipo3 estrategiaGatilhoTipo3;

    // Resultados das operações/ simulações da estratégia
    private List<ResultadoEstrategiaGatilho3> resultadosEstrategia;

    // Mensagem de status para exibir no dashboard
    private String statusMensagem;

    // Flag para saber se já terminou de analisar todo o arquivo
    private boolean analiseConcluida;

    // Caminho ou nome do recurso do Excel
    private String caminhoExcel = "/dados.xls";

    @PostConstruct
    public void init() {
        this.candlesProcessados = new ArrayList<>();
        this.resultadosEstrategia = new ArrayList<>();
        this.proximoIndice = 0;
        this.analiseConcluida = false;

        // Detector com logs ativados (se quiser desligar, use false)
        this.detector = new DetectorGatilhos(true);

        // Estratégia do gatilho 3
        FibonacciService fiboService = new FibonacciService();
        this.estrategiaGatilhoTipo3 = new EstrategiaGatilhoTipo3(fiboService);

        carregarCandlesDoExcel();
    }

    /**
     * Lê todos os candles do Excel (histórico completo).
     * Aqui você ajusta o LeitorExcelCandles conforme sua implementação.
     */

    private void carregarCandlesDoExcel() {
        try {
                CandleExcelReader reader = new CandleExcelReader();
            try {
                List<Candle> candles = reader.lerCandles(caminhoExcel);
                System.out.println("Qtd candles lidos: " + candles.size());
                this.candlesExcel = candles;
            } catch (IOException e) {
                e.printStackTrace();
            }

            if (candlesExcel == null || candlesExcel.isEmpty()) {
                statusMensagem = "Nenhum candle encontrado no Excel.";
                analiseConcluida = true;
            } else {
                statusMensagem = "Arquivo carregado. Total de candles: " + candlesExcel.size();
            }
        } catch (Exception e) {
            e.printStackTrace();
            statusMensagem = "Erro ao carregar candles do Excel: " + e.getMessage();
            analiseConcluida = true;
        }
    }

    /**
     * Método chamado a cada minuto (via p:poll, scheduler, botão, etc.)
     * Simula a chegada de UM novo candle do mercado,
     * executa o detector em modo tempo real,
     * e, ao encontrar um G3, dispara a EstrategiaGatilhoTipo3.
     */

    public void analisarEmTempoReal() {
        if (analiseConcluida) {
            // Já processou tudo
            return;
        }

        if (candlesExcel == null || candlesExcel.isEmpty()) {
            statusMensagem = "Sem candles para analisar.";
            analiseConcluida = true;
            return;
        }

        if (proximoIndice >= candlesExcel.size()) {
            statusMensagem = "Todos os candles do arquivo já foram analisados.";
            analiseConcluida = true;
            return;
        }

        // "Chegou" um candle novo
        Candle novoCandle = candlesExcel.get(proximoIndice);
        candlesProcessados.add(novoCandle);
        proximoIndice++;

        statusMensagem = String.format(
                "Novo candle lido: %s | Total processado: %d/%d",
                novoCandle.getTime(),
                proximoIndice,
                candlesExcel.size()
        );

        // Chama o detector em modo tempo real
        PadraoGatilho padrao = detector.processarCandleTempoReal(candlesProcessados);

        if (padrao != null) {
            // Só nos interessa quando tiver Gatilho 3 identificado
            if (padrao.getGatilho3() != null) {
                try {
                    ResultadoEstrategiaGatilho3 resultado =
                            estrategiaGatilhoTipo3.executarEstrategia(padrao, candlesProcessados);

                    resultadosEstrategia.add(resultado);

                    statusMensagem = String.format(
                            "Padrão encontrado! GR: %s | G1: %s | G2: %s | G3: %s | Operação executada.",
                            padrao.getReferencia().getTime(),
                            padrao.getGatilho1().getTime(),
                            padrao.getGatilho2().getTime(),
                            padrao.getGatilho3().getTime()
                    );
                } catch (Exception e) {
                    e.printStackTrace();
                    statusMensagem = "Erro ao executar EstrategiaGatilhoTipo3: " + e.getMessage();
                }
            } else {
                // Encontrou padrão sem G3 (ex: padrão que morre antes de completar)
                statusMensagem = "Padrão identificado sem G3 completo. Aguardando próximo candle.";
            }
        }
    }

    // ============================================================
    // GETTERS / SETTERS para o JSF
    // ============================================================

    public List<Candle> getCandlesProcessados() {
        return candlesProcessados;
    }

    public List<ResultadoEstrategiaGatilho3> getResultadosEstrategia() {
        return resultadosEstrategia;
    }

    public String getStatusMensagem() {
        return statusMensagem;
    }

    public boolean isAnaliseConcluida() {
        return analiseConcluida;
    }

    public String getCaminhoExcel() {
        return caminhoExcel;
    }

    public void setCaminhoExcel(String caminhoExcel) {
        this.caminhoExcel = caminhoExcel;
    }
   
}