Discussão do artigo "Desenvolvendo Sistemas de Trading ICT Avançados: Implementando Order Blocks em um Indicador" - página 2
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Com relação ao primeiro problema, acho que pode ser devido ao fato de o indicador não carregar os dados corretamente. Isso geralmente acontece quando se muda de gráfico ou se abre um novo. Entretanto, se for um gráfico que já estava em uso, valeria a pena investigar melhor por que os blocos de ordens não estão sendo obtidos. Nesse caso, seria útil incluir mensagens de depuração (Print) no código para identificar o problema.
Com relação ao segundo problema, em que somente os blocos de ordens de alta são desenhados, pode ser porque o EURUSD no período H4 está atualmente em 600-700 candlestick highs. Nesse contexto, é possível que todos os blocos de ordens de baixa tenham sido atenuados, e é por isso que eles não são desenhados no gráfico.
Com relação à mudança de critérios, reduzi algumas variáveis booleanas no código. Entretanto, não seria um problema reintroduzir essas condições, se necessário.
Com relação às cores, a versão mais recente que publiquei nos comentários aplica transparência às cores dos retângulos do bloco de ordens. Talvez seja por isso que as cores não correspondam visualmente às das versões anteriores. Por fim, com relação à animação, não entendi muito bem a que você estava se referindo. Você poderia explicar com mais detalhes o que quer dizer com animação nesse contexto?
Na conclusão da seção 3.0, você apresentou um vídeo do indicador em ação para o XAUUSD M1. Gostaria de saber se você está usando a função Indicador do Strategy Tester para produzir o vídeo. Quando executo o Strategy Tester, geralmente para um EA com o Visal Mode marcado, ele mostra os indicadores e as negociações, mas geralmente não exibe o texto do EA que está em execução. Gostaria de saber se você sabe a causa ou uma solução.
Além disso, descobri que o redimensionamento de grandes matrizes multidimensionais leva um tempo excessivo para ser redimensionado. Recorri ao uso de 100 elementos adicionais em cada redimensionamento para minimizar o tempo decorrido. Isso funciona muito bem para mim, pois uso matrizes baseadas em zero para séries temporais.
Na conclusão da seção 3.0, você apresentou um vídeo do indicador em ação para o XAUUSD M1. Gostaria de saber se você está usando a função Indicador do Strategy Tester para produzir o vídeo. Quando executo o Strategy Tester, geralmente para um EA com o Visal Mode marcado, ele mostra os indicadores e as negociações, mas geralmente não exibe o texto do EA que está em execução. Gostaria de saber se você sabe a causa ou uma solução.
Além disso, descobri que o redimensionamento de grandes matrizes multidimensionais leva um tempo excessivo para ser redimensionado. Recorri ao uso de 100 elementos adicionais em cada redimensionamento para minimizar o tempo decorrido. Isso funciona muito bem para mim, pois uso matrizes baseadas em zero para séries temporais.
Olá CapeCoddah.
Usei um aplicativo externo para gravar o vídeo, não um recurso interno do Strategy Tester.
Com relação ao texto que você mencionou durante a execução do Expert Advisor, entendo que pode ser algo externo à MQL5 e não objetos gráficos como rótulos. Seria muito útil se você pudesse compartilhar uma captura de tela para que eu possa analisá-la melhor.
Atenciosamente.
OLÁ,
Obrigado pelas informações, eu as agradeço.
Quanto à tradução de seus comentários do espanhol para o inglês, como o Google Translate não traduz o texto após // na linha, ele não atendeu às minhas necessidades de traduzir seus comentários. Tentei o DeepL e ele traduz o texto além de //. Também foi difícil para mim entender. Traduzir o código não foi difícil, mas salvar a tradução foi impossível.No entanto, ele realmente fez um trabalho ruim de tradução. Ele inseriu pontos e "End" onde achava que a frase terminava. Além disso, ele mudou && para &&& e certamente mais problemas. Desisti depois de corrigir esses erros e a compilação ainda produziu mais de 100 erros.
Executei a Parte 2 no testador de estratégias e as linhas e o texto de TP e SL foram exibidos. No entanto, parece que os cálculos dos níveis de TP e SL precisam ser ajustados. Além disso, o teste mostra SLs e TPs sobrepostos . Em um ambiente sem hedge, os SLs e TPs seriam mesclados em um único SL ou TP. Deveria haver apenas uma linha, não duas, e deveria haver um passo para indicar a mudança no valor. Também não é mostrado no gráfico onde começa a operação prevista.
Decidi me concentrar em seu primeiro programa, pois ele parece produzir mais sinais.Estou planejando: incorporar um mecanismo para encerrar o sinal quando a tendência terminar; eliminar sinais duplicados dentro de n barras um do outro; padronizar a altura da caixa centrada em torno da mediana da barra; identificar e modificar os parâmetros do bloco de ordens para permitir o uso racional em períodos H1 e acima; colocar uma média móvel dos volumes no gráfico principal ou abrir um gráfico indicador; e, finalmente, converter para matrizes baseadas em zero para se adequar ao meu uso padrão e, por fim, incorporá-lo ao meu EA.Tentarei usar funções para executar e encapsular a lógica para permitir que você a incorpore, se desejar. Entretanto, meu estilo de organização de programação não é tradicional e não está em conformidade com os recuos automáticos da MetaQuotes.
Continuarei a acompanhá-lo, pois acredito que sua abordagem de negociação é muito boa.
Saúde e cordiais cumprimentos,
CapeCoddah
Olá,
Eu estava testando meu EA no Strategy Tester, EURUSD H4 1/1/2025-2//1/2025, e observei que, no final da execução, havia dois problemas com o indicador Block Order.
Primeiro, ele selecionou uma ordem de bloqueio em 2/3/2025, que está fora da janela de teste, e, segundo, colocou o texto do bloco na área Chart Shift.
Curtir
CapeCoddah
Aqui está uma versão traduzida para o inglês do seu primeiro indicador. Decidi que precisava entender seus vários comentários de código em inglês e reconsiderei o Google Translate, pois o DeepL não me impressionou. Primeiro, alterei todos os comentários // para #/# para permitir que o Google traduzisse os comentários de linha //... e, em seguida, converti o arquivo de texto em um documento do MS Word para inserir no Translate.Após a tradução, abri o novo documento e o salvei como um arquivo de texto, renomeei-o e comecei a sintaxe do novo código-fonte. Calculo que o Translate tenha feito 90% do trabalho, mas adicionou espaços e caracteres que exigiram conversão manual. Depois de um dia de trabalho, ele foi compilado sem erros. Surpreendentemente, funcionou na primeira tentativa! Comparei-o com seu indicador original para 1000 barras e eles eram idênticos.
Aqui está uma versão traduzida para o inglês do seu primeiro indicador. Decidi que precisava entender seus vários comentários de código em inglês e reconsiderei o Google Translate, pois o DeepL não me impressionou. Primeiro, alterei todos os comentários // para #/# para permitir que o Google traduzisse os comentários de linha //... e, em seguida, converti o arquivo de texto em um documento do MS Word para inserir no Translate.Após a tradução, abri o novo documento e o salvei como um arquivo de texto, renomeei-o e comecei a sintaxe do novo código-fonte. Calculo que o Translate tenha feito 90% do trabalho, mas adicionou espaços e caracteres que exigiram conversão manual. Depois de um dia de trabalho, ele foi compilado sem erros. Surpreendentemente, funcionou na primeira tentativa! Comparei-o com seu indicador original para 1000 barras e eles eram idênticos.
Infelizmente, parece que seu indicador é estruturalmente falho e inútil para negociação, pois está realizando seus cálculos em variáveis futuras que são desconhecidas no momento do cálculo, conforme destacado no código abaixo em negrito.
for( int i = Universal_search_range ; i > 5 ; i--) {
//verificação de erros
if( i + 3 > ArraySize(highArray) || i + 3 > ArraySize(atr))
continue ;
if( i < 0) continue;
// Atualizar índices de candlestick
one_candle = i ; //vela central
candle_behind_two = i +2;
candle_behind_one = one_candle +1;
two_candle = one_candle - 1;
three_candle = one_candle - 2;
four_candle = one_candle -3;
// Calcular o volume médio dos candles anteriores
body1 = MathAbs(closeArray[one_candle] - openArray[one_candle]);
body2 = MathAbs(closeArray[two_candle] - openArray[two_candle]);
body3 = MathAbs(closeArray[three_candle] - openArray[three_candle]);
Infelizmente, parece que seu indicador é estruturalmente falho e inútil para negociação, pois está realizando seus cálculos em variáveis futuras que são desconhecidas no momento do cálculo, conforme destacado no código abaixo em negrito.
for( int i = Universal_search_range ; i > 5 ; i--) {
//verificação de erros
if( i + 3 > ArraySize(highArray) || i + 3 > ArraySize(atr))
continue ;
if( i < 0) continue;
// Atualizar índices de candlestick
one_candle = i ; //vela central
candle_behind_two = i +2;
candle_behind_one = one_candle +1;
two_candle = one_candle - 1;
three_candle = one_candle - 2;
four_candle = one_candle -3;
// Calcular o volume médio dos candles anteriores
body1 = MathAbs(closeArray[one_candle] - openArray[one_candle]);
body2 = MathAbs(closeArray[two_candle] - openArray[two_candle]);
body3 = MathAbs(closeArray[three_candle] - openArray[three_candle]);
Olá CapeCoddah, acho que não é esse o caso, pois, por exemplo, o indicador faz todos os cálculos usando matrizes em série (embora isso não seja comum, eles normalmente são feitos sem série) no contexto do primeiro loop mostrado, esse loop é usado para detectar bloqueios de ordem, O que é feito é ir do candle "Universal_search_range" (lembre-se de que, na série, o candle 0 é o mais recente) até o candle 6, de modo que em nenhum momento vejo os candles futuros sendo usados e, se esse fosse o caso, o two_candle ou outro índice resultaria em um valor menor que 0, o que causaria estar fora do intervalo. Assim, o candle four_candle = one_candle - 3 seria o mais próximo de 0 no caso de o loop terminar onde i = 6 e four_candle = 3, portanto, levando em conta que o candle atual é 0, posso dizer que em nenhum momento estou usando candles futuros. O nome pode parecer confuso, eu sei, mas fiz dessa forma porque era mais fácil para mim entender, já que, quando se tratava de obter os blocos de ordem, one_vela era como o candle central. Portanto, se eu estivesse procurando um movimento forte, avaliaria os candles que o seguiram (em série, isso seria subtração).