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

 
Vitaly Muzichenko:
Sim, você está certo, é que o código está escrito em um estilo tal que o orador anterior o interpretou mal.

E para verificar?

//+------------------------------------------------------------------+
//|                                                   TestLogics.mq4 |
//|              Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//|                       https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link      "https://login.mql5.com/ru/users/artmedia70"
#property version   "1.00"
#property strict
#property script_show_inputs
//--- input parameters
input int      Value=0;    // Количество имеющихся ордеров
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   if(Value>0) Alert("1. Количество ордеров=",Value);
   else Alert("2. Это код после else");
      {
      Alert("3. Ордера отсутствуют");
      }
  }
//+------------------------------------------------------------------+
O código em braquetes encaracolados não se refere à condição if-else, e será sempre executado, independentemente do valor em Valor
 
Artyom Trishkin:

E verificar?


O código em braquetes encaracolados não se refere à condição if-else, e será sempre executado, independentemente do valor em Valor

Nossa, realmente, agora eu revisei o código original novamente, e estava errado. O estilo de escrita é meio tortuoso - me confundiu.

 

Voltou a verificar, retirou o "extra".

divisão por zero não foi a lugar algum

Arquivos anexados:
zero.mq4  5 kb
 
trader781:

Voltou a verificar, retirou o "extra".

divisão por zero não foi a lugar algum

 
trader781:

Voltou a verificar, retirou o "extra".

A divisão por zero não desapareceu

Porque não há verificação se o divisor é diferente de 0. Qual é a vantagem de executar mais código quando não há ordens e 0 lotes?

 

Verificar

void ModifyOrders()
  {
   double avg_price=0;
   price=0;
   bool z=true;
   double orderlots=0;

   for(i=OrdersTotal()-1; i>=0; i--)
     {
      if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && (OrderSymbol()==Symbol())
      && (OrderMagicNumber()==Magic) && (OrderType()==FindLastOType()))
        {
         price+=OrderOpenPrice()*OrderLots();
         orderlots+=OrderLots();
        }
     }
    
   if(orderlots==0) { return; } // если ничего нет - выходим
   avg_price=NormalizeDouble(price / orderlots,Digits);
  
   if(FindLastOType()==OP_BUY)     tp=NormalizeDouble(avg_price+TakeProfit*Point(),Digits);
   if(FindLastOType()==OP_SELL)    tp=NormalizeDouble(avg_price-TakeProfit*Point(),Digits);


   for(i=OrdersTotal()-1; i>=0; i--)
     {
      if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && (OrderSymbol()==Symbol())
      && (OrderMagicNumber()==Magic) &&(OrderType()==FindLastOType()))

         z=OrderModify(OrderTicket(),OrderOpenPrice(),0,tp,0);
         if (!z)
         Print("Ошибка функции модифицирования");
     }
  }
 
Vitaly Muzichenko:

Verificar


Vitalie Postolache:


Mas faltaram os lotes, obrigado.
 
trader781:
Mas eu perdi os lotes, obrigado.
Não há problema em faltar, não há problema em não ler o diário de bordo, ele diz tudo, e diz qual linha está errada.
 
Vitaly Muzichenko:
Não há problema em nãoler a revista, ela diz tudo ali.

Eu não ia lê-lo. Diz "para verificar no mercado". Meus produtos nunca estarão no mercado.

sobre a divisão por zero.

o que dizer do acima? É suposto que seja apartir daí.

{
price+=OrderOpenPrice()*OrderLots();
orderlots+=OrderLots();
}
}

if(orderlots==0) {retornar; }// se não houver nada, sair
avg_price=NormalizeDouble(preço / parcelas de pedidos,Dígitos);

if(FindLastOType()==OP_BUY) tp=NormalizeDouble(avg_price+TakeProfit*Point(),Digits);
if(FindLastOType()==OP_SELLL) tp=NormalizeDouble(avg_price-TakeProfit*Point(),Digits);

 
trader781:
Eu não ia lê-lo. Diz "para testar no mercado". Meus produtos nunca estarão no mercado.

Estou falando da revista no testador

Adicionado: Monte o código em seu estado normal, revise-o, depois execute-o no testador e leia os erros no registro. Você está me dando pedaços de código aqui.

Razão: