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

 

请告诉我如何为OrdersTotal()设置按符号选择订单?

   int total=OrdersTotal();

   if(total==0&&Bid>=OrderBuy&&Bid<=OrderBuy+10*Point)
    {
     if(OrderSend(Symbol(),OP_BUY,Lot,Ask,5,0,0,NULL,0,0,clrNONE)){::Alert(" Order Open ");}
    }

现在,如果某一对有一个开放的订单,它就不会在其他地方开放。

 
MakarFX:

请告诉我如何为OrdersTotal()设置按符号选择订单?

现在,如果在一个货币对上有一个开放的订单,它不会在其他货币对上开放。

看看kodobase,每个EA中都有一个例子。

 
Vladimir Pastushak:

在kodobase中查看,每个顾问都有一个例子。

我不是一个程序员(

这对我来说有点复杂。

 
MakarFX:

我不是一个程序员(

这对我来说有点复杂。

这并不复杂。

写一个基本的EA,这里有所有的功能https://www.mql5.com/ru/forum/131859

为了你的目的,OrdersTotal()是终端中未结订单的总数(从0开始编号),然后你必须使用OrderSelect()逐一选择它们(通过循环),并操作必要的订单。

for (i=OrdersTotal()-1; i>=0; i--)
{
  if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
  {
   // проверим символ ордера, проверим магикномер ордера....
  }
}
Только "Полезные функции от KimIV".
Только "Полезные функции от KimIV".
  • 2011.02.18
  • www.mql5.com
Все функции взяты из этой ветки - http://forum.mql4...
 
MakarFX:

请告诉我如何为OrdersTotal()设置按符号选择订单?

现在,如果在一个货币对上有一个开放的订单,它不会在其他货币对上开放。

我需要根据需要定期检查(自己数)我的订单。
我在每个EA中都有一个循环(一个巨大的方法),在重要的行动之前被调用。

for(int pos=OrdersTotal()-1; pos>=0;pos--) {

        if (!OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)) {

                selectFailed=true; /* не удалось "выбрать" ордер - статистика может быть неверной */
                continue;

        }

        if (OrderCloseTime()!=0) { /* ордер закрыт но ещё не удалён из списка*/ continue; }

        if (OrderMagicNumber()==0) { /* ордер выставлен юзером */ } continue;
        else if (OrderMagicNumber()!=_Magic) { /* ордер выставлен другим советником */ continue; }

        if (OrderSymbol()!=_Symbol) { /* ордер с правильным Magic но на другом символе */ continue; }

       /// обработка рабочих ордеров, с правильным Magic на символе советника (то есть наш ордер)

       /// проверяются несработки, считается кол-во, статистика, позиции и прочее 

}

符号上的订单检查被强调

 
Maxim Kuznetsov:

根据需要,定期检查(自我检查)他们的订单。
我在每个EA中都有一个循环(一个巨大的方法),在重要的行动之前被调用。

for(int pos=OrdersTotal()-1; pos>=0;pos--) {

        if (!OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)) {

                selectFailed=true; /* не удалось "выбрать" ордер - статистика может быть неверной */
                continue;

        }

        if (OrderCloseTime()!=0) { /* ордер закрыт но ещё не удалён из списка*/ continue; }

        if (OrderMagicNumber()==0) { /* ордер выставлен юзером */ } continue;
        else if (OrderMagicNumber()!=_Magic) { /* ордер выставлен другим советником */ continue; }

        if (OrderSymbol()!=_Symbol) { /* ордер с правильным Magic но на другом символе */ continue; }

       /// обработка рабочих ордеров, с правильным Magic на символе советника (то есть наш ордер)

       /// проверяются несработки, считается кол-во, статистика, позиции и прочее 

}

按符号高亮显示 的顺序检查

顺便说一下,我理解历史订单的 代码可能会丢失。问题是,MT4中的订单代号(SELECT_BY_TICKET)和MT5中的交易和头寸代号是否会发生变化。

还有,在票据上的OrderSelect之后,是否可以改变顺序。比如说第二天。该EA没有被禁用。

如果挂单已成为市场订单,您可以按其类型查看。如果市场订单已经关闭,那么我们看订单关闭的时间,不等于零 OrderCloseTime()!=0

如果待定订单在其有效期内已经关闭,那么我们如何通过订单票据来跟踪它。

还有一个问题,在市场订单(MT4)中也是有寿命的,它是否有效?

 
MakarFX:

请告诉我如何为OrdersTotal()设置按符号选择订单?

现在,如果在一个货币对上有一个开放的订单,它不会在其他货币对上开放。

这个问题已经解决了。谢谢大家。

 
亲爱的先生们,你们好!我不明白哪里出了问题,为什么Alert: time3-time1 = wrong datetime?
datetime time1 = iTime(NULL,0,1);
datetime time3 = iTime(NULL,0,3);
datetime delta3 = (time3-time1);  Alert("time3-time1 = ",delta3); 


 
novichok2018:
亲爱的先生们,你们好!我不明白哪里出了问题,为什么它说Alert: time3-time1 = wrong datetime?


因为这个数字是负数 :-)

根据这个逻辑,时间1永远比时间3多。

 
Maxim Kuznetsov:

因为这个数字是负数 :-)

根据给定的逻辑,时间1永远比时间3多。

谢谢你!有时大脑会失灵。

原因: