Subversion Repositories Integrator Subversion

Rev

Rev 776 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
761 blopes 1
package br.com.sl.controller;
2
 
3
import java.io.Serializable;
764 blopes 4
import java.util.ArrayList;
5
import java.util.Collections;
6
import java.util.List;
7
import java.util.stream.Collectors;
761 blopes 8
 
764 blopes 9
import javax.faces.application.FacesMessage;
761 blopes 10
import javax.inject.Inject;
11
import javax.inject.Named;
12
 
764 blopes 13
import org.primefaces.PrimeFaces;
761 blopes 14
import org.springframework.context.annotation.Scope;
15
 
16
import br.com.ec.core.generic.GenericService;
764 blopes 17
import br.com.ec.core.util.VerificadorUtil;
761 blopes 18
import br.com.ec.web.exception.VerificadorLancamentoException;
19
import br.com.ec.web.exception.VerificadorLancamentoException.CommandBean;
20
import br.com.ec.web.generic.AbstractBean;
21
import br.com.ec.web.message.LancadorMensagem;
764 blopes 22
import br.com.kronus.core.PadraoGatilho;
776 blopes 23
import br.com.kronus.core.PadraoGatilho.TipoPadrao;
767 blopes 24
import br.com.kronus.strategy.ResultadoEstrategiaGatilho3;
761 blopes 25
import br.com.sl.domain.dto.RoboDTO;
764 blopes 26
import br.com.sl.domain.dto.robo.AlertaPadraoService;
767 blopes 27
import br.com.sl.domain.dto.robo.SinalTradeGatilho3;
28
import br.com.sl.domain.model.tipos.TipoFonteDadosProfit;
761 blopes 29
import br.com.sl.domain.service.RoboOperadorService;
30
 
31
@Named
32
@Scope("view")
33
public class RoboBean extends AbstractBean<RoboDTO> implements Serializable {
34
 
35
        private RoboOperadorService roboOperadorService;
36
 
771 blopes 37
        private String tipoFonteSelecionada;
776 blopes 38
        private Integer contadorCandleParaVerificar;
39
        private List<String> logs;
771 blopes 40
 
764 blopes 41
        private List<PadraoGatilho> padroesEmAberto;
765 blopes 42
        private Integer contadorUltimoCandle;
764 blopes 43
 
44
        private List<PadraoGatilho> padroes;
45
        private List<PadraoGatilho> padroesComG3;  // completos (G3 != null)
46
    private List<PadraoGatilho> padroesAteG2;  // parciais (G2 != null && G3 == null)
767 blopes 47
 
48
    private List<SinalTradeGatilho3> sinaisTradeGatilho3;
49
    private List<ResultadoEstrategiaGatilho3> resultados;
776 blopes 50
 
764 blopes 51
 
761 blopes 52
        @Inject
53
        public RoboBean(RoboOperadorService roboOperadorService) {
54
                this.roboOperadorService = roboOperadorService;
55
        }
56
 
57
        @Override
58
        public void preCarregamento() {
59
                limparEntidade();
60
                getEntidade().setRodando(roboOperadorService.isRodando());
61
        }
62
 
63
        @Override
64
        public void limparEntidade() {
65
                setEntidade(new RoboDTO());
764 blopes 66
                setPadroes(new ArrayList<PadraoGatilho>());
67
                setPadroesComG3(new ArrayList<PadraoGatilho>());
68
                setPadroesAteG2(new ArrayList<PadraoGatilho>());
767 blopes 69
                setSinaisTradeGatilho3(new ArrayList<SinalTradeGatilho3>());
70
                setResultados(new ArrayList<ResultadoEstrategiaGatilho3>());
783 blopes 71
//              setTipoFonteSelecionada(TipoFonteDadosProfit.TEMPO_REAL.getValor());
776 blopes 72
                setContadorCandleParaVerificar(0);
761 blopes 73
        }
74
 
75
        @Override
76
        public GenericService<RoboDTO> getService() {
77
                return roboOperadorService;
78
        }
79
 
80
        @Override
81
        public RoboDTO getEntidade() {
82
                return entidade;
83
        }
84
 
85
        @Override
86
        public RoboDTO getId() {
87
                return getEntidade();
88
        }
89
 
764 blopes 90
        public List<PadraoGatilho> getPadroes() {
91
                return padroes;
92
        }
93
        public void setPadroes(List<PadraoGatilho> padroes) {
94
                this.padroes = padroes;
95
        }
96
 
767 blopes 97
        public List<SinalTradeGatilho3> getSinaisTradeGatilho3() {
98
                return sinaisTradeGatilho3;
99
        }
100
        public void setSinaisTradeGatilho3(List<SinalTradeGatilho3> sinaisTradeGatilho3) {
101
                this.sinaisTradeGatilho3 = sinaisTradeGatilho3;
102
        }
103
 
104
        public List<ResultadoEstrategiaGatilho3> getResultados() {
105
                return resultados;
106
        }
107
        public void setResultados(List<ResultadoEstrategiaGatilho3> resultados) {
108
                this.resultados = resultados;
109
        }
110
 
764 blopes 111
        public List<PadraoGatilho> getPadroesComG3() {
112
                return padroesComG3;
113
        }
114
        public void setPadroesComG3(List<PadraoGatilho> padroesComG3) {
115
                this.padroesComG3 = padroesComG3;
116
        }
117
 
118
        public List<PadraoGatilho> getPadroesAteG2() {
119
                return padroesAteG2;
120
        }
121
        public void setPadroesAteG2(List<PadraoGatilho> padroesAteG2) {
122
                this.padroesAteG2 = padroesAteG2;
123
        }
124
 
771 blopes 125
        public String getTipoFonteSelecionada() {
126
                return tipoFonteSelecionada;
127
        }
128
        public void setTipoFonteSelecionada(String tipoFonteSelecionada) {
129
                this.tipoFonteSelecionada = tipoFonteSelecionada;
130
        }
131
 
132
        public TipoFonteDadosProfit[] getTiposFonteDadosProfit() {
133
                return TipoFonteDadosProfit.values();
134
        }
135
 
776 blopes 136
        public List<String> getLogs() {
137
                return logs;
138
        }
139
        public void setLogs(List<String> logs) {
140
                this.logs = logs;
141
        }
142
 
143
        public String getLogsBacktestAsText() {
144
            if (logs == null || logs.isEmpty()) return "";
145
            return String.join("\n", logs);
146
        }
147
 
148
        public Integer getContadorCandleParaVerificar() {
149
                return contadorCandleParaVerificar;
150
        }
151
        public void setContadorCandleParaVerificar(Integer contadorCandleParaVerificar) {
152
                this.contadorCandleParaVerificar = contadorCandleParaVerificar;
153
        }
154
 
761 blopes 155
        public void iniciar() {
156
                new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
157
                        public void execute() {
776 blopes 158
                                roboOperadorService.iniciarOperacao(getTipoFonteSelecionada(), getContadorCandleParaVerificar());
761 blopes 159
                                setEntidade(roboOperadorService.statusRobo());
160
                                LancadorMensagem.lancarSucesso("ROBÔ INICIADO COM SUCESSO!");
161
                        }
162
                });
163
    }
164
 
165
    public void parar() {
166
        new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
167
                        public void execute() {
168
                                roboOperadorService.pararOperacao();
169
                                setEntidade(roboOperadorService.statusRobo());
170
                                LancadorMensagem.lancarSucesso("ROBÔ PARADO COM SUCESSO!");
171
                        }
172
                });
173
    }
764 blopes 174
 
175
    public void preencherOutrosPadroes() {
770 blopes 176
        padroesComG3 = padroes.stream()
776 blopes 177
                .filter(p -> p.getTipoPadrao() == TipoPadrao.COMPLETO_G3)
764 blopes 178
                .collect(Collectors.toList());
770 blopes 179
        padroesComG3 = inverterLista(padroesComG3);
761 blopes 180
 
764 blopes 181
        padroesAteG2 = padroes.stream()
776 blopes 182
                        .filter(p -> p.getTipoPadrao() == TipoPadrao.PARCIAL_G2)
764 blopes 183
                .collect(Collectors.toList());
770 blopes 184
        padroesAteG2 = inverterLista(padroesAteG2);
764 blopes 185
        }
186
 
187
    public static List<PadraoGatilho> inverterLista(List<PadraoGatilho> candles) {
188
        List<PadraoGatilho> invertida = new ArrayList<>(candles);
189
        Collections.reverse(invertida);
190
        return invertida;
191
    }
192
 
761 blopes 193
    public void atualizarStatus() {
194
        setEntidade(roboOperadorService.statusRobo());
764 blopes 195
        if (VerificadorUtil.naoEstaNuloOuVazio(getEntidade().getPadroes())) {
196
                if (getEntidade().getPadroes().size() != getPadroes().size()) {
197
                        AlertaPadraoService.novoAlerta("NOVO PADRÃO IDENTIFICADO!");
198
                        PrimeFaces.current().executeScript("playAlertaAgressivo();");
199
                }
200
                setPadroes(getEntidade().getPadroes());
776 blopes 201
                setLogs(getEntidade().getLogs());
764 blopes 202
                preencherOutrosPadroes();
767 blopes 203
                setSinaisTradeGatilho3(getEntidade().getSinaisTradeGatilho3());
204
                setResultados(getEntidade().getResultados());
764 blopes 205
        }
206
        verificarNovosPadroes();
761 blopes 207
    }
764 blopes 208
 
209
    public void verificarNovosPadroes() {
210
        List<String> alertas = AlertaPadraoService.consumirAlertas();
761 blopes 211
 
764 blopes 212
        if (!alertas.isEmpty()) {
213
            for (String msg : alertas) {
214
                FacesMessage facesMessage = new FacesMessage(
215
                        FacesMessage.SEVERITY_INFO,
216
                        "Novo padrão identificado",
217
                        msg
218
                );
219
                javax.faces.context.FacesContext.getCurrentInstance()
220
                        .addMessage(null, facesMessage);
221
            }
222
 
223
            // Toca o som no cliente
224
            PrimeFaces.current().executeScript("playBeepPadrao();");
225
            // Se estiver em PF antigo:
226
            // RequestContext.getCurrentInstance().execute("playBeepPadrao();");
227
        }
228
    }
776 blopes 229
 
230
    public void verificarCandle() {
231
 
232
    }
764 blopes 233
 
761 blopes 234
}