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

 
Zvezdochet:

是。这正是谢尔盖-科瓦廖夫的教科书的全部内容。这是目前缺失很多的一个。

在这个网站上没有关于mql5这样的教科书,我不知道其他网站的情况。但有很多文章,阅读它们,你可能会成功。

Статьи по MQL5
Статьи по MQL5
  • www.mql5.com
Статьи по программированию на языке MQL5
 

各位程序员!

请帮助我解决一个纠结了一个月的问题。

我的TS有时会 因为某些原因而无法关闭订单。

它看起来像这样。

前三笔订单 - 44329646,44330563和44337351完美地打开和关闭。

而在第四个订单上,悲剧发生了。

以此类推,无穷无尽......

也就是说,专家顾问打开订单44339156,并试图关闭它自己(!!!!)在几小时前成功关闭的订单44337351。

你必须手动关闭它;如果你没有这样做,你有时会遭受最深的缩减。真是一场灾难!

这怎么可能呢?

专家顾问的代码可以说是非常简单。

здесь - условие открытия сделки
{
         RefreshRates();
         total_orders_NZDUSD=TotalOrders("NZDUSD.I");
         if(total_orders_NZDUSD==0)
         {
         Balance=AccountBalance();
         Lots=NormalizeDouble((Balance/(Ask*10.0))*0.01,2);
         double AskNorm=NormalizeDouble(Ask,Digits);
         ticket_buy_NZDUSD=OrderSend("NZDUSD.I",OP_BUY,0.01,AskNorm,0,0,0);
         }
      }
здесь - условие закрытия сделки
      {
         RefreshRates();
         if(OrderSelect(ticket_buy_NZDUSD, SELECT_BY_TICKET)==true)
         {
         total_orders_NZDUSD=TotalOrders("NZDUSD.I");
         ctm_ticket_buy_NZDUSD=OrderCloseTime();
         order_type_NZDUSD=OrderType();
            if(total_orders_NZDUSD>0)
            {
               if(ctm_ticket_buy_NZDUSD==0)
               {
                  if(order_type_NZDUSD==OP_BUY)
                  {
                  double BidNorm=NormalizeDouble(Bid,Digits);
                  OrderClose(ticket_buy_NZDUSD,0.01,BidNorm,0);
                  }
               }
            }
         }

一个相同的方案怎么可能 "一次又一次 "地发挥作用?我不明白...

 
Alexander_K2:

各位程序员!

请帮助我解决一个纠结了一个月的问题。

我的TS有时会 因为某些原因而无法关闭订单。

它看起来像这样。

前三笔订单--44329646、44330563和44337351开仓和平仓都很好。

而在第四个订单上,悲剧发生了。

以此类推,无穷无尽......

也就是说,专家顾问打开订单44339156,并试图关闭它自己(!!!!)在几小时前成功关闭的订单44337351。

你必须手动关闭它;如果你没有这样做,你有时会遭受最深的缩减。真是一场灾难!

这怎么可能呢?

专家顾问的代码可以说是非常简单。

一个相同的方案怎么可能 "一次又一次 "地发挥作用?我不明白...

请阅读OrderSelect() 的帮助。特别是,请阅读关于按票选的参考资料。即使是已关闭的订单也是通过票据选择的。它已经关闭了,而你正试图再次关闭它。

如果是0,说明它还在市场中,请关闭它,如果>0,说明它已经关闭,没有必要再踢它,它不会复活,也不会关闭。

 
Artyom Trishkin:

请阅读OrderSelect()的帮助。特别是关于按票选的问题。即使是已关闭的订单,也是由票据选择的。它已经关闭了,而你正试图再次关闭它。

如果它被选中,检查关闭时间--如果是0,意味着它还在市场中--关闭它,如果>0,意味着它已经被关闭,你不必再踢它--它不会复活,也不会关闭。

非常感谢你--我会努力的。

 
Alexander_K2:

非常感谢 - 我将试一试。

不客气。你不必去尝试,你必须去做......

 
Artyom Trishkin:

请。你不必去尝试,你必须去做......

Artem,我读了帮助 - 一切似乎都是正确的。

ctm_ticket_buy_NZDUSD=OrderCloseTime();
         ...
               if(ctm_ticket_buy_NZDUSD==0)
            ...

我正在检查关闭时间。

我在《MQL4参考》中读到过。

建议在调用最新的订单数据之前立即调用OrderSelect()函数

这也是事实。

那么什么是错的呢?

 
Alexander_K2:

Artem,我读了帮助 - 一切似乎都是正确的。

我正在检查关闭时间。

我在《MQL4参考》中读到过。

建议在调用最新的订单数据之前立即调用OrderSelect()函数

这也是事实。

那么有什么问题呢?

这是一个什么样的功能?

total_orders_NZDUSD=TotalOrders("NZDUSD.I");
而在工作之后,是按哪种顺序分配?
 
Alexander_K2:

各位程序员!

请帮助我解决一个纠结了一个月的问题。

我的TS有时会 因为某些原因而无法关闭订单。

它看起来像这样。

前三笔订单--44329646、44330563和44337351开仓和平仓都很好。

而在第四个订单上,悲剧发生了。

以此类推,无穷无尽......

也就是说,专家顾问打开订单44339156,并试图关闭它自己(!!!!)在几小时前成功关闭的订单44337351。

你必须手动关闭它;如果你没有这样做,你有时会遭受最深的缩减。真是一场灾难!

这怎么可能呢?

专家顾问的代码可以说是非常简单。

一个相同的方案怎么可能 "一次又一次 "地发挥作用?我不明白...

你在看什么方向的订单阵列?

如果在 "修订 "过程中可能出现关闭/删除,最好向相反方向看。从OrdersTotal()-1到0(含)。

否则,你可能会踩到它 :-)


 
Artyom Trishkin:

这个功能是什么?

这个专题是由Goldtrader友好地提供给我的,我对此表示衷心的感谢。

//+------------------------------------------------------------------+
//| Calculate Market Orders function                                 |
//+------------------------------------------------------------------+
int TotalOrders(string sy) {    // sy - Currency Pair
int orders=0;
   for (int i=0; i<OrdersTotal(); i++) {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
        if (OrderSymbol()==sy) {
           if (OrderType()==OP_SELL || OrderType()==OP_BUY) {
             orders++;
           }
         }
       }
     }
return(orders);
}

它允许你同时为不同的货币对开立订单。

:)))在我看来,它是这一切的开始,因为我大约在一个月前启用了它......没有它,我就无法看到圣杯

有什么问题吗?

 

但有些事情真的不对劲......

我的意思是,我做一次OrderSelect,然后再从函数中做一次...这没有任何意义...

原因: