Subversion Repositories Integrator Subversion

Rev

Rev 776 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 776 Rev 779
Line 2... Line 2...
2
2
3
import java.math.BigDecimal;
3
import java.math.BigDecimal;
4
import java.util.ArrayList;
4
import java.util.ArrayList;
5
import java.util.List;
5
import java.util.List;
6
6
-
 
7
import br.com.ec.web.util.TipoOperacao;
7
import br.com.kronus.core.ResultadoSinalGatilho3.Status;
8
import br.com.kronus.core.ResultadoSinalGatilho3.Status;
8
import br.com.sl.domain.dto.robo.SinalTradeGatilho3;
9
import br.com.sl.domain.dto.robo.SinalTradeGatilho3;
9
import br.com.sl.domain.dto.robo.SinalTradeGatilho3.TipoOperacao;
-
 
10
import br.com.sl.domain.model.Candle;
10
import br.com.sl.domain.model.Candle;
-
 
11
import br.com.sl.domain.model.tipos.TipoSinal;
11
import br.com.sl.domain.util.BigDecimalUtils;
12
import br.com.sl.domain.util.BigDecimalUtils;
12
13
13
/**
14
/**
14
 * Faz o backtest dos sinais gerados pela EstrategiaGatilhoTipo3Sinais,
15
 * Faz o backtest dos sinais gerados pela EstrategiaGatilhoTipo3Sinais,
15
 * informando para cada sinal se deu alvo/stop/não acionou etc.
16
 * informando para cada sinal se deu alvo/stop/não acionou etc.
Line 94... Line 95...
94
                    null,
95
                    null,
95
                    null
96
                    null
96
            );
97
            );
97
        }
98
        }
98
99
99
        TipoOperacao tipo = sinal.getTipoOperacao();
-
 
-
 
100
        TipoSinal tipo = sinal.getTipoOperacao();
100
        BigDecimal precoEntrada = sinal.getPrecoEntrada1(); // usando a 1ª entrada como referência
101
        BigDecimal precoEntrada = sinal.getPrecoEntrada1(); // usando a 1ª entrada como referência
101
        BigDecimal alvo1 = sinal.getAlvo1();
102
        BigDecimal alvo1 = sinal.getAlvo1();
102
        BigDecimal alvo2 = sinal.getAlvo2();
103
        BigDecimal alvo2 = sinal.getAlvo2();
103
104
104
        // Combinação de stops: stopMenos100 + stopAlternativo
105
        // Combinação de stops: stopMenos100 + stopAlternativo
105
        BigDecimal stopMenos100 = sinal.getStopMenos100();
106
        BigDecimal stopMenos100 = sinal.getStopMenos100();
106
        BigDecimal stopAlternativo = sinal.getStopAlternativo();
107
        BigDecimal stopAlternativo = sinal.getStopAlternativo();
107
        BigDecimal stop;
108
        BigDecimal stop;
108
109
109
        if (tipo == TipoOperacao.COMPRA) {
-
 
-
 
110
        if (tipo == TipoSinal.COMPRA_C) {
110
            // Em compra, ambos devem estar abaixo da entrada.
111
            // Em compra, ambos devem estar abaixo da entrada.
111
            // Stop mais apertado = o MAIOR dos dois (mais próximo da entrada).
112
            // Stop mais apertado = o MAIOR dos dois (mais próximo da entrada).
112
            if (stopMenos100 != null && stopAlternativo != null) {
113
            if (stopMenos100 != null && stopAlternativo != null) {
113
                stop = stopMenos100.max(stopAlternativo);
114
                stop = stopMenos100.max(stopAlternativo);
114
            } else if (stopMenos100 != null) {
115
            } else if (stopMenos100 != null) {
Line 146... Line 147...
146
            // 1) Antes de entrar na operação
147
            // 1) Antes de entrar na operação
147
            // ============================
148
            // ============================
148
            if (!entradaAcionada) {
149
            if (!entradaAcionada) {
149
150
150
                // 1.1) Regra: se o PRIMEIRO ALVO for atingido ANTES da entrada -> DESCARTAR OPERAÇÃO
151
                // 1.1) Regra: se o PRIMEIRO ALVO for atingido ANTES da entrada -> DESCARTAR OPERAÇÃO
151
                if (tipo == TipoOperacao.COMPRA) {
-
 
-
 
152
                if (tipo == TipoSinal.COMPRA_C) {
152
                    // Para compra, alvo1 é para cima; se máxima >= alvo1, consideramos tocado
153
                    // Para compra, alvo1 é para cima; se máxima >= alvo1, consideramos tocado
153
                    if (BigDecimalUtils.ehMaiorOuIgualQue(max, alvo1)) {
154
                    if (BigDecimalUtils.ehMaiorOuIgualQue(max, alvo1)) {
154
                        return new ResultadoSinalGatilho3(
155
                        return new ResultadoSinalGatilho3(
155
                                sinal,
156
                                sinal,
156
                                Status.DESCARTADO,
157
                                Status.DESCARTADO,
Line 192... Line 193...
192
            }
193
            }
193
194
194
            // ============================
195
            // ============================
195
            // 2) Após a entrada ter sido acionada
196
            // 2) Após a entrada ter sido acionada
196
            // ============================
197
            // ============================
197
            if (tipo == TipoOperacao.COMPRA) {
-
 
-
 
198
            if (tipo == TipoSinal.COMPRA_C) {
198
                // COMPRA: stop é para baixo, alvos para cima
199
                // COMPRA: stop é para baixo, alvos para cima
199
200
200
                boolean bateStop = temStop && BigDecimalUtils.ehMenorOuIgualQue(min, stop);
201
                boolean bateStop = temStop && BigDecimalUtils.ehMenorOuIgualQue(min, stop);
201
                boolean bateAlvo2 = BigDecimalUtils.ehMaiorOuIgualQue(max, alvo2);
202
                boolean bateAlvo2 = BigDecimalUtils.ehMaiorOuIgualQue(max, alvo2);
202
                boolean bateAlvo1 = BigDecimalUtils.ehMaiorOuIgualQue(max, alvo1);
203
                boolean bateAlvo1 = BigDecimalUtils.ehMaiorOuIgualQue(max, alvo1);