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); |