初学者的问题 MQL5 MT5 MetaTrader 5 - 页 1489

 
Maksim Burov 注释"(Comment),为什么可视化测试仪的运行速度会变慢? 有什么办法可以解决这个问题? 这是否会影响优化速度?

您不必使用 kanvas。

要使注释不会降低可视化测试仪的速度,必须确保注释的调用频率不超过 30 毫秒。

例如

   static uint lastCalc= 0 ;
   uint cur= GetTickCount();
   if (cur-lastCalc> 30 ) {
      Comment("blablabla");
      lastCalc=cur; 
   }
如果不跳过数值很重要,也可以用打印代替注释。

如果需要对任何值的输出进行更好的可视化,则最好使用 kanvas。

https://www.mql5.com/ru/forum/277867/page8#comment_19186284
 
Maksim Burov 评论 不会影响优化速度。
 
Maksim Burov #:

信息会定期更改。
例如,我想查看开盘价最低的头寸,或者想知道上一个平仓头寸的刻度。或者想知道最后一次平仓的跳动点。
你可以把所有信息都写在打印纸上,但这样不方便查看,容易遗漏。因此,我可以立即看到我的错误所在。

信息不是每个刻度都会改变吗?Nikolay 还建议您可以在某个超时后进行输出,从而降低输出频率。
 


现在我有另一项任务。


订单(头寸)关闭的时间已被添加以进行检查。
由于所有内容都是在 MQL4 中编写的,现在正在用 MQL5 重写,因此出现的问题是如何正确和胜任地进行此检查。

简单地说,就是如何在 MQL5 中重写代码)。

double CalculateProfitHistory() 
{
   double profit = 0;
   int  i, ototal = OrdersHistoryTotal();

   for(i = ototal-1; i >=0; i--)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
      {
         if(OrderSymbol() == Symbol() && OrderCloseTime() > 0)
         {
            if(OrderType() == OP_BUY || OrderType() == OP_SELL)
            {
               if(OrderMagicNumber() == Magic )
               {
                  if (LockTicket !=0)
                  {
                     if (OrderTicket() >= LockTicket)
                     {
                        profit += OrderProfit()+OrderCommission()+OrderSwap();
                     }                  
                  }
               }
            }
         }
      }
   }
   return(profit);
}
 
Maksim Burov #:


现在又有一项挑战。


添加了订单(头寸)关闭的时间,以便进行检查。
由于所有内容都是在 MQL4 中编写的,而现在正在用 MQL5 重写,因此出现了如何正确、有效地进行检查的问题。

简单地说,就是如何在 MQL5 中重写代码)。

// сначала выбираем нужный интервал
HistorySelect(TimeStart,TimeCurrent()+10);

// перебираем ордера в интервале
for(i=HistoryOrdersTotal()-1;i>=0;i--)
         {
          ord=HistoryOrderGetTicket(i);

         // далее получаем (или сразу сравниваем) любые свойства ордера, типа
          o_sym=HistoryOrderGetString(ord, ORDER_SYMBOL);
          o_magic=HistoryOrderGetInteger(ord, ORDER_MAGIC);
          ...
         }

类似这样

 
Maksim Burov #:


现在又有一项挑战。


添加了订单(头寸)关闭的时间,以便进行检查。
由于所有内容都是在 MQL4 中编写的,而现在正在用 MQL5 重写,因此出现了如何正确、有效地进行检查的问题。

简单地说,就是如何在 MQL5 中重写代码)。

由于要搜索的不是订单(上一篇),而是交易,因此使用以下 代码最为方便

HistoryPosition - неопубликованный функционал MQL5-языка.
HistoryPosition - неопубликованный функционал MQL5-языка.
  • 2023.11.22
  • www.mql5.com
HistoryPositionsTotal Возвращает количество всех закрытых позиций в истории. HistorySelect() не влияет на результат данной функции. int HistoryPositionsTotal(); Возвращаемое значение Значение типа
 
JRandomTrader #:

差不多就是这样。

我失败了( 你能根据我的代码再详细说明一下吗?

 
Maksim Burov #:

我失败了( 你能根据我的代码再详细说明一下吗?

也许最好看看 Aleksandr Slavskii 的变体。我没有使用过 MQL4,也没有使用过对冲。

或者注意这里,以防万一,还有这里

 
JRandomTrader #:

也许最好看看 Aleksandr Slavskii 的变体。我没有使用过 MQL4,也没有使用过对冲。

或者关注这里,以防万一,还有这里

没有更好的了。这些是 fxsaber 的常用函数。

您的变体是完全可以接受的,只是您需要将订单替换为交易。利润、佣金和掉期由交易而非订单存储。

 
你好,我的VPS 有问题。当 MT4 关闭时,我的手机收不到通知。有人能给我一些建议吗?谢谢。
原因: