新人对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:

在其上设置一个检查


维塔利-波斯托拉什


不过错过了很多,谢谢。
 
trader781:
但我错过了很多,谢谢你。
错过了没关系,不看日志 也没关系,日志 上都说了,哪一行错了都说了。
 
Vitaly Muzichenko:
错过也没关系,不看杂志 也没关系,都在那里。

我不打算读它。它说'在市场上检查'。我的产品将永远不会出现在市场上。

关于除以零的问题。

上面的那个呢?它应该是从那里开始 的。

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

if(orderlots==0) {return; }// if there is nothing, exit
avg_price=NormalizeDouble(price / orderslots,Digits)。

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

 
trader781:
我不打算读它。它说 "要在市场上测试"。我的产品将永远不会出现在市场上。

我说的是测试器中的杂志。

补充:将代码组装到正常状态,修改后,在测试器中运行,并阅读日志中的错误。你在这里给了我一些代码的碎片。

原因: