Olá pessoal.
Estou escrevendo meu primeiro EA e encontrei um problema que não estou conseguindo resolver.
O sinal para disparo de ordens ocorre quando as 12 últimas velas tem máxima <= a vela 13, e mínima >= a vela 13.
A lógica que eu encontrei foi pegar o preço máximo e o preço mínimo das últimas 13 velas e comparar o índice para checar se a máxima e a mínima são da mesma vela.
O problema é que quando uma vela mais recente faz máxima ou mínima igual à anterior, o índice é atualizado. (Exemplo figura anexa: Vela 5 e Vela 13 tem o mesmo preço mínimo)
Alguém sabe como posso resolver este problema?
Obrigado,
Guilherme S
Olá guisantos23,
algumas considerações sobre sua dúvida:
1) se você quer encontrar a máxima/mínima dos últimos 13 candles, incluindo o atual, você deve usar TotalBars=14, e não 13... Logo, a barra atual (no caso, 0, pois você usou ArraySetAsSeries como true) deve ser incluída na contagem, uma vez que você usa a posição inicial 0 dentro de CopyHigh e CopyLow;
2) como você já deve ter percebido, tanto ArrayMaximum quanto ArrayMinimum retornam a máxima/mínima mais recente, logo, no caso de dois preços iguais você sempre terá o índice daquela barra mais recente;
3) ao invés de trabalhar com a posição das máximas e mínimas, porque não trabalhar diretamente com o preço? Um simples for-loop poderia, nesse caso, ser utilizado para checar a máxima/mínima dos últimos "n" preços e comparar essa informação com o preço obtido no candle 13 de sua contagem ...
Abraços,
Malacarne
Olá guisantos23,
algumas considerações sobre sua dúvida:
1) se você quer encontrar a máxima/mínima dos últimos 13 candles, incluindo o atual, você deve usar TotalBars=14, e não 13... Logo, a barra atual (no caso, 0, pois você usou ArraySetAsSeries como true) deve ser incluída na contagem, uma vez que você usa a posição inicial 0 dentro de CopyHigh e CopyLow;
2) como você já deve ter percebido, tanto ArrayMaximum quanto ArrayMinimum retornam a máxima/mínima mais recente, logo, no caso de dois preços iguais você sempre terá o índice daquela barra mais recente;
3) ao invés de trabalhar com a posição das máximas e mínimas, porque não trabalhar diretamente com o preço? Um simples for-loop poderia, nesse caso, ser utilizado para checar a máxima/mínima dos últimos "n" preços e comparar essa informação com o preço obtido no candle 13 de sua contagem ...
Abraços,
Malacarne
Olá Malacarne,
Obrigado pela rápida resposta. Vou tentar escrever novamente da maneira que você sugeriu.
Abraços,
Guilherme S
Olá guisantos23,
algumas considerações sobre sua dúvida:
1) se você quer encontrar a máxima/mínima dos últimos 13 candles, incluindo o atual, você deve usar TotalBars=14, e não 13... Logo, a barra atual (no caso, 0, pois você usou ArraySetAsSeries como true) deve ser incluída na contagem, uma vez que você usa a posição inicial 0 dentro de CopyHigh e CopyLow;
2) como você já deve ter percebido, tanto ArrayMaximum quanto ArrayMinimum retornam a máxima/mínima mais recente, logo, no caso de dois preços iguais você sempre terá o índice daquela barra mais recente;
3) ao invés de trabalhar com a posição das máximas e mínimas, porque não trabalhar diretamente com o preço? Um simples for-loop poderia, nesse caso, ser utilizado para checar a máxima/mínima dos últimos "n" preços e comparar essa informação com o preço obtido no candle 13 de sua contagem ...
Abraços,
Malacarne
Bom dia,
Cheguei a este fórum devido a mesma necessidade que o Gui Santos, pois, Também sou aprendiz iniciante em programação, fiz um código seguindo a 3 sugestão do Malacarne.
este código está correto?
MqlRates mrate[]; //COPIANDO INFORMAÇÕES DAS BARRAS =============================================================== p_cierre = mrate[1].close; p_low = mrate[1].low; p_high = mrate[1].high; p_open = mrate[1].open; for(int i =1; i<totalbarras;i++) { max = mrate[i].high > mrate[i-1].high ? mrate[i].high : mrate[i-1].high; } for(int i =1; i<totalbarras;i++) { min = mrate[i].low < mrate[i-1].low ? mrate[i].low : mrate[i-1].low; }
Bom dia,
Cheguei a este fórum devido a mesma necessidade que o Gui Santos, pois, Também sou aprendiz iniciante em programação, fiz um código seguindo a 3 sugestão do Malacarne.
este código está correto?
Olá Marcos Gabriel,
A princípio me parece que está correto!
Abraços,
Malacarne
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Olá pessoal.
Estou escrevendo meu primeiro EA e encontrei um problema que não estou conseguindo resolver.
O sinal para disparo de ordens ocorre quando as 12 últimas velas tem máxima <= a vela 13, e mínima >= a vela 13.
A lógica que eu encontrei foi pegar o preço máximo e o preço mínimo das últimas 13 velas e comparar o índice para checar se a máxima e a mínima são da mesma vela.
O problema é que quando uma vela mais recente faz máxima ou mínima igual à anterior, o índice é atualizado. (Exemplo figura anexa: Vela 5 e Vela 13 tem o mesmo preço mínimo)
Alguém sabe como posso resolver este problema?
Obrigado,
Guilherme S