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

 
Roman:

如果已经输入了,那么就有区别了。
读取一个初始化的变量总是比读取一个函数快。

没有任何区别。我现在找不到链接了--但答案是很久以前给出的。

 
Vladimir Karputov:

没有任何区别。我现在找不到链接了--但答案是很久以前给出的。

对于胡安和编译器警告 来说,没有任何区别 ))

 
Vladimir Karputov:

没有任何区别。当你编译所有的东西时,所有的东西都集中在一个单一的调用中。这就是为什么最好是 通过函数来做一切事情。

让我们也单独开个话题,像争论点数一样争论这个问题......。这将使人们有事可做......

你们喜欢把自己的意见强加于人......

 

有一个MA,有一些转变。让MA_shift=5。

为什么只有在向CopyBuffer 传递双负 移位的情况下,才有可能从图表的零条中获得MA的正确值?
CopyBuffer(hMA, 0,-2*5, rates_total, MA_Buf)。

MA_Buf[0]现在有了正确的值。

 
RickD:

有一个MA,有一些转变。让MA_shift=5。

为什么只有当你向CopyBuffer传递双负 移位时,才有可能从图表的零条中获取MA的正确值?
CopyBuffer(hMA, 0,-2*5, rates_total, MA_Buf)。

MA_Buf[0]现在有了正确的值。

先画一张图,用移位参数指定什么是你的指标的 "零条"。

 
Roman:

读取一个变量,比函数更快。

并非如此,我检查了_Symbol和Symbol()https://www.mql5.com/ru/forum/160683/page933#comment_12780905, 哪个更快。

访问时间是一样的,MQL中的代码优化是非常酷的,所以使用任何方便的方法。

根据我的测试,访问时间可能不同,这取决于变量描述的位置和修改器,但有2-5%的速度,原则上可以写成特定构建中的实现,这取决于构建号。

 
你能告诉我获得当前符号的最后一笔交易结果的最简单和最快的方法吗?因为从文件上看,一切都很复杂。要得到结果首先需要找到所需交易的票据,要找到票据需要在历史上按其索引找到该交易,索引应在历史上搜索,更何况你还需要按符号过滤。
 
WinZip:
你能告诉我如何轻松快速地获得当前符号的最后一笔交易的结果吗?因为文件是非常复杂的。为了得到结果,你需要先找到所需交易的票据,为了找到票据,你需要在历史上通过其索引找到交易,索引应该在历史上寻找,更不用说我们应该通过符号来过滤。

为了避免每次都去看交易历史--只需在OnTradeTransaction 中捕捉交易,类型为

TRADE_TRANSACTION_DEAL_ADD - 将交易添加到历史上。


//+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
  {
//--- get transaction type as enumeration value
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in history
   if(type==TRADE_TRANSACTION_DEAL_ADD)
     {
      long     deal_ticket       =0;
      long     deal_order        =0;
      long     deal_time         =0;
      long     deal_time_msc     =0;
      long     deal_type         =-1;
      long     deal_entry        =-1;
      long     deal_magic        =0;
      long     deal_reason       =-1;
      long     deal_position_id  =0;
      double   deal_volume       =0.0;
      double   deal_price        =0.0;
      double   deal_commission   =0.0;
      double   deal_swap         =0.0;
      double   deal_profit       =0.0;
      string   deal_symbol       ="";
      string   deal_comment      ="";
      string   deal_external_id  ="";
      if(HistoryDealSelect(trans.deal))
        {
         deal_ticket       =HistoryDealGetInteger(trans.deal,DEAL_TICKET);
         deal_order        =HistoryDealGetInteger(trans.deal,DEAL_ORDER);
         deal_time         =HistoryDealGetInteger(trans.deal,DEAL_TIME);
         deal_time_msc     =HistoryDealGetInteger(trans.deal,DEAL_TIME_MSC);
         deal_type         =HistoryDealGetInteger(trans.deal,DEAL_TYPE);
         deal_entry        =HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
         deal_magic        =HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
         deal_reason       =HistoryDealGetInteger(trans.deal,DEAL_REASON);
         deal_position_id  =HistoryDealGetInteger(trans.deal,DEAL_POSITION_ID);

         deal_volume       =HistoryDealGetDouble(trans.deal,DEAL_VOLUME);
         deal_price        =HistoryDealGetDouble(trans.deal,DEAL_PRICE);
         deal_commission   =HistoryDealGetDouble(trans.deal,DEAL_COMMISSION);
         deal_swap         =HistoryDealGetDouble(trans.deal,DEAL_SWAP);
         deal_profit       =HistoryDealGetDouble(trans.deal,DEAL_PROFIT);

         deal_symbol       =HistoryDealGetString(trans.deal,DEAL_SYMBOL);
         deal_comment      =HistoryDealGetString(trans.deal,DEAL_COMMENT);
         deal_external_id  =HistoryDealGetString(trans.deal,DEAL_EXTERNAL_ID);
        }
      else
         return;
      ENUM_DEAL_ENTRY enum_deal_entry=(ENUM_DEAL_ENTRY)deal_entry;
      if(deal_symbol==m_symbol.Name() && deal_magic==InpMagic)
        {
         if(deal_type==DEAL_TYPE_BUY || deal_type==DEAL_TYPE_SELL)
           {
            
...
           }
        }
     }
  }

m_symbol.Name() - 当前符号,InpMagic - 专家顾问的唯一标识符。

 
你好,我在网站和facebook上注册了邮件,但无法进入meta trader 5-4,请帮助我补充我的账户。
 
Igor Makanu:

不是事实,我检查过了,与_Symbol和Symbol()相比,哪个更快https://www.mql5.com/ru/forum/160683/page933#comment_12780905

即访问时间是一体的,MQL中的代码优化是非常酷的,所以只要是方便的,就用它。

根据我的测试,访问时间可能不同,这取决于变量描述的位置和修改器,但有2-5%的速度,原则上可以写成特定构建中的实现,这取决于构建号。

我同意优化器工作良好,但总是依赖编译器的优化器是错误的。
你需要提前考虑代码在内存、初始化和值返回层面是如何执行的。
也就是说,计算每个操作的执行动作数,如果动作少,代码就快。并把它作为一种实践,一次写出一个最佳代码。
在简短的代码中,也许没有什么区别,但当有一个有数百个文件的项目时,这时就会出现延迟。
并且只会有一个剖析器和重写代码。每个人都选择自己的耙子))。

同时用谷歌搜索关键词

__inline 
__forceinline
奇怪的是,它们在mql中是没有记录的。