Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 41

 
Vitaly Muzichenko:
Sí, tienes razón, lo que pasa es que el código está escrito con un estilo tal que el orador anterior lo interpretó mal.

¿Y para comprobarlo?

//+------------------------------------------------------------------+
//|                                                   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. Ордера отсутствуют");
      }
  }
//+------------------------------------------------------------------+
El código entre llaves no se refiere a la condición if-else, y siempre se ejecutará, independientemente del valor en Value
 
Artyom Trishkin:

¿Y comprobarlo?


El código entre llaves no se refiere a la condición if-else, y siempre se ejecutará, independientemente del valor en Value

Vaya, ahora he vuelto a revisar el código original y me he equivocado. El estilo de escritura es algo torcido - me confundió.

 

Reverificado, eliminado el "extra".

ladivisión por cero no fue a ninguna parte

Archivos adjuntos:
zero.mq4  5 kb
 
trader781:

Reverificado, eliminado el "extra".

ladivisión por cero no fue a ninguna parte

 
trader781:

Reverificado, eliminado el "extra".

La división por cero no ha desaparecido

Porque no se comprueba si el divisor es diferente de 0. ¿Qué sentido tiene ejecutar más código cuando no hay órdenes y 0 lotes?

 

Poner un control

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:

Poner un control


Vitalie Postolache:


Sin embargo, se han perdido los lotes, gracias.
 
trader781:
Pero me he perdido los lotes, gracias.
No pasa nada por saltárselo, no pasa nada por no leer el cuaderno de bitácora, lo dice todo, y dice qué línea está mal.
 
Vitaly Muzichenko:
No pasa nada por perdérselo, no pasa nada por noleer la revista, ahí lo dice todo.

No iba a leerlo. Dice "para comprobar en el mercado". Mis productos nunca estarán en el mercado.

de dividir por cero.

¿y el de arriba? Se supone que debepartir de ahí.

{
precio+=Precio de apertura del pedido()*Lotes del pedido();
orderlots+=Lotes de pedido();
}
}

if(orderlots==0) {return; }// si no hay nada, exit
avg_price=NormalizeDouble(price / orderslots,Digits);

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

 
trader781:
No iba a leerlo. Dice "para probar en el mercado". Mis productos nunca estarán en el mercado.

Estoy hablando de la revista en el probador

Añadido: Montar el código a su estado normal, revisarlo, luego ejecutarlo en el probador y leer los errores en el registro. Me estás dando retazos de código aquí.