Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 41

 
Vitaly Muzichenko:
Да, вы правы, просто код написан в таком стиле, что предыдущий оратор его не верно интерпретировал.

А проверить?

//+------------------------------------------------------------------+
//|                                                   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. Ордера отсутствуют");
      }
  }
//+------------------------------------------------------------------+
Код в фигурных скобках не относится к условию if-else, и будет выполняться всегда, независимо от значения в Value
 
Artyom Trishkin:

А проверить?


Код в фигурных скобках не относится к условию if-else, и будет выполняться всегда, независимо от значения в Value

блин, действительно, сейчас снова пересмотрел оригинал кода, и был не прав. Стиль написания какой-то кривой - сбил меня с толку.

 

 

Перепроверил, поубирал "лишнее"

деление на ноль никуда не исчезло 

Файлы:
zero.mq4  5 kb
 
trader781:

Перепроверил, поубирал "лишнее"

деление на ноль никуда не исчезло 

 
trader781:

Перепроверил, поубирал "лишнее"

деление на ноль никуда не исчезло 

Потому что проверки нет, на то, чтобы делитель отличался от 0. Какоё смысл исполнять дальнейший код, когда ордеров нет и лоты 0?

 

Поставьте проверку

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:

Поставьте проверку


Vitalie Postolache:


А вот лоты упустил, спасибо.
 
trader781:
А вот лоты упустил, спасибо.
Да то что упустили - это нормально, не нормально не читать журнал, там это всё написано, и написано в какой строке ошибка.
 
Vitaly Muzichenko:
Да то что упустили - это нормально, не нормально не читать журнал, там это всё написано.

Я его и не собирался читать. Там написано "для проверки в маркете". Моих продуктов в маркете не будет никогда.

по поводу деления на ноль.

а как же то что выше? Он должен брать orderlots оттуда

  {
         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);

 
trader781:
Я его и не собирался читать. Там написано "для проверки в маркете". Моих продуктов в маркете не будет никогда.

Я о журнале в тестере

 

 

Добавлено: Соберите код до нормального состояния, пересмотрите его, потом запустите в тестере и почитайте в журнале ошибки. Вы сюда даёте огрызки кода

Причина обращения: