Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 26

 
trader781:

Uma vez que você tenha limpo seu código, ele será mais legível para você, para não mencionar outros que precisam entender sua lógica. É lá que todos os insetos serão vistos.

OK, isso é melhor?
Agora, apague os parênteses de encaracolamento desnecessários e organize o resto normalmente em blocos, e você verá onde você tem falhas na lógica.
 
Artyom Trishkin:
Agora, remova os parênteses extra pareados e organize o resto normalmente em blocos, e você verá onde sua lógica está com falhas.
Quais são os extras?
 
trader781:
Quais deles são redundantes?
Você tem muitos parênteses desnecessários em seu código - use uma ferramenta de estilo e você verá imediatamente os parênteses vazios e desnecessários.
 
Artyom Trishkin:
Você tem muitos suportes desnecessários em seu código - processe o código com um estilizador, e você verá imediatamente os parênteses extra vazios.
Feito
Arquivos anexados:
 
trader781:
Feito
Vou ver mais tarde - levará pelo menos quatro horas...
 
trader781:
Feito por
1.contar++; // contar carrapatos desde o início do programa

Melhor maneira: if(count<==20) count++; - por que contar mais se você só precisa contar 21?

2.
   if(count>20) //  если количество тиков больше начинаем работу ... и дальше код эксперта
     {
      if(Bars<801 || (IsTradeAllowed()==false)) //--- Проверим достаточна ли в истории баров для анализа и разрешение торговли
         Print("Нет достаточного количества баров или торговля на текущем инструменте запрещена");
      return;
     }

E aqui está o wigwam. Isto só verificará o número de barras e imprimirá quandocontar >20, o resto do código funcionará quandocontar <=20.

3.

if(OrderSymbol()==Symbol() && OrderType()<2)
            continue;

Se você só precisa considerar os do mercado (e isto é o que você espera de mais código), você não precisacontinuar de forma alguma.

4.

         if(y==true && (OrderType()==0)) //+-----покупка
           {
            dummy=(OrderClose(OrderTicket(),OrderLots(),Bid,0,White));

              {
               if((dummy==true) && ((OrderSelect(i,SELECT_BY_POS,MODE_TRADES))==false))

                  PlaySound("music");
               Sleep(20000);
               PlaySound("music");
               Sleep(20000);
               PlaySound("music");
               Sleep(20000);
               dummy=false;
               ExpertRemove();
              }
           }

Ela fecha um pedido e se elimina? E se houver mais deles? E dorme por um minuto inteiro.

Ainda não olhei para o código acima, não há lugar para testá-lo.

 

1 ok, eu vou consertar isso

2 não está bem, os seguintes blocos não devem funcionar nacontagem<20

3 OK, vou corrigi-lo

4 Sim, é um minuto, mas só deve ser iniciado se não houver mais ordens do mercado para o símbolo atual. Eu tentei implementá-lo através de um resultado negativo da seleção de pedidos, por isso devemos colocar o retorno em algum lugar, mas o retorno no vazio OnTick() não parece tão bom assim. E mais uma vez, OrdersTotal() dará o resultado errado se tivermos muitos pedidos para todos os símbolos.

 
trader781:

2 não está OK, os seguintes blocos não devem funcionar quandocontar<20

Em seguida, precisamos acrescentar outros retornos após o bloco;

4 Sim, é um minuto, mas só deve ser iniciado se não houver mais ordens do mercado para o símbolo atual. Eu tentei implementá-lo através de um resultado negativo da seleção de pedidos, é por isso que devemos definir o retorno em algum lugar, enquanto o retorno no vazio OnTick() não parece muito bom. E mais uma vez, OrdersTotal() dará o resultado errado se tivermos muitas ordens sobre todos os símbolos.

Por que precisamos de três sons?

Bem, podemos fazer tudo em duas etapas: na primeira etapa, você fecha as ordens e na seguinte você recalcula todas as ordens do mercado para verificar se sobrou alguma, e se não sobrou nenhuma, as fanfarras tocam.

Mas ainda não entendo qual é o truque da música depois que os pedidos são fechados. Bem, você pode fazer uma impressão para o diário ou enviar uma mensagem para o correio ou notificação para os inteligentes, mas de que adianta transformar a EA em uma caixa de música?
 
Vitalie Postolache:

Então você deve acrescentar um retorno após o outro bloco de retorno;

Por que precisamos do triplo do som?

Mas você pode fazer tudo em duas etapas: na primeira etapa você fecha as ordens, e na seguinte você recalcula todas as ordens do mercado para verificar se há alguma que não está fechada, e se não há nenhuma, a fanfarra toca.

Eu ainda não entendo qual é o truque com a música quando as encomendas foram fechadas. Bem, podemos imprimi-lo para a revista, enviar uma mensagem para o correio ou notificar o smartphone, mas por que devemos transformar nosso EA em uma caixa de música?

Como se separam os ciclos?

Como ligar o som à última ordem fechada? Porque se não houver ordens, o Expert Advisor não acionaria um som.

E uma última coisa: estou feliz com a música, por enquanto.

 
trader781:

Como separar os ciclos?

Como ligar o som ao último fechado? porque se não houver ordens, o Expert Advisor não trabalhará

E por fim, estou feliz com a música por enquanto.

O que você quer dizer com "separar"? Não temos que separar nada. Só precisamos de dois loops (são quase os mesmos), mas um tem OrderClose() e o outro tem um contador de pedidos. O critério de seleção do pedido é o mesmo. Se o contador for=0, todos os pedidos foram fechados e podemos tocar música.

Também notei que a condição

         if(Uslovie1==true) //Bid+ma6
           {
            if((Bid>=ma1-X*Point && Bid<ma1) || (Bid<=ma1+X*Point && Bid>ma1))
              {
                 {y=true;}
              }
           }

Não parece estar relacionado a uma determinada ordem, então para que serve no laço?

Eu o verificaria antes do ciclo de fechamento.

Razão: