新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1674

 
законопослушный гражданин #:

制作。与以前的杂志绝对没有区别。

没有错误,或其他任何东西。

应该没有任何错误,显示日志
 
for(int i = 0; i <= OrdersTotal(); i++)
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
            return(false);

你不需要为环形结构设置支架吗?似乎只有在不超过一行的情况下,你才不需要它们。

UPD:
啊,知道了,有一条线。

 
MakarFX #:
应该没有任何错误,显示日志

这里是MT4日志的最后几页。

是否需要这个日志?

附加的文件:
0w11cw.txt  30 kb
 
哦,对不起。把对比和任务搞混了。现在一切都好了。自从我坐下来写作,我就一直在疯狂。我写得很差,并为此感到压力,我的脑子根本不听使唤,当然我知道这一点。
 
законопослушный гражданин #:

这里是MT4日志的最后几页。

是否需要这个日志?

这里是你日志中的答案)

开单后的函数bCheckOrders()给出了没有订单的结论,所以他们继续开单

 
pribludilsa #:
而且我的脑袋根本不听使唤,尽管我知道,当然了。

你的说法很有趣)))。

 
MakarFX #:

你的说法很有趣)))。

我的意思是,知道如何写作业和比较,但还是被搞糊涂了。困惑。
 
pribludilsa #:
我的意思是,知道如何写作业和比较,但仍然感到困惑。搞砸了。

这不是我的意思...

pribludilsa #:
我的脑袋 完全不听使唤,虽然我当然知道

 
MakarFX #:

这里是你日志中的答案)

bCheckOrders()函数在打开一个订单后给出了没有订单的结论,所以它一直在打开

哦,我的天哪,哪有这么说的?

也许我没有正确阅读日志?

开单后函数bCheckOrders() 打印出没有订单,因此继续开单--通过void OnTick()--我明白这不是真的。

直到订单被关闭bCheckOrders() - 不能发出没有订单的声音。

 
законопослушный гражданин #:

哦,该死,哪里说的?

也许我没有正确阅读日志?

开单后函数bCheckOrders() 给出了没有订单的结论,因此继续开单--通过void OnTick()--我明白这不是真的。

直到订单关闭bCheckOrders()不应该显示没有订单。

bCheckOrders( )不能正确工作!

我已经给你写了一个计算订单的函数。

只要像这样做,应该就可以了。

取代bCheckOrders(),把这个函数

//+------------------------------------------------------------------+
//| Подсчет открытых ордеров                                         |
//+------------------------------------------------------------------+
int CountOrders() 
  {
   int cnt=0;
   int i=OrdersTotal()-1;
   for(int pos=i;pos>=0;pos--)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderSymbol()==_Symbol)
           {
            if(OrderMagicNumber()==Magic) cnt++;
           }
        }
     }
   return(cnt);
  }

在OnTick()中,不写bCheckOrders(),而写这个

//+------------------------------------------------------------------+
void OnTick()
  {
// Получим значение индикатора
   dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.

// Если нет открытых ордеров, то входим в условие
   if(CountOrders()==0)
     {
// Если появился сигнал на покупку, то откроем ордер на покупку
      if(bSignalBuy() == true)
         vOrderOpenBuy();

// Если появился сигнал на продажу, то откроем ордер на продажу
      if(bSignalSell() == true)
         vOrderOpenSell();
     }
// Проверяем, вышел ли текущий баланс по открытому ордеру за вилку из внешних переменных CountLoss и CountProfit

  if(GetProfitFromStart()>CountProfit || GetProfitFromStart()<CountLoss*-1)
     {
// Если да, то закроем ордер по текущей цене, не дожидаясь стопа или тейка
      CloseOrder();
     }
DrawLABEL("lab_Take",1,5,0,Color(GetProfitFromStart()>0,Lime,Red),StringConcatenate("Profit: ",DoubleToStr(GetProfitFromStart(),2),AC));
  }
原因: