错误、漏洞、问题 - 页 452

 

谢谢你!

 
alexvd:

是的,在第一点上,我显然感到困惑。解释一下描述中到底有什么问题,应该退回一份副本

关于串联,在你的情况下,你应该写成这样的内容

要澄清的是。它说:"返回一个字符串的副本,其中指定位置的字符的值已经改变。" 该函数的原型是boolStringSetCharacter(...)。很明显,你不能把一个字符串放在一个bool里。如果确实返回了一个布尔值,那么显然这是一个成功/错误的标志。通 常情况下,其他文档页面有一个单独的 返回值部分 ,但这个页面没有应该添加,在文本描述中制定一个关于函数语义的句子,而不是返回值。


关于连接,如果你写的是正确的,那么StringConcatenate函数 的描述也应该被修改。描述中说,string_var 参数 是一个[in][out]字符串,将作为连接的结果生成你说,这个参数只有[出]。

 
新问题。当BarsCalculated 返回0时,是什么意思? 这似乎不是一个错误,但0条怎么能计算?事实上--什么都没有计算。这不是一个错误吗?
 
MoneyJinn:

不幸的是,问题是终端只在 "结果 "选项卡中公布了带有评论的平仓 订单。

相应的订单不会被添加到HistoryDealsTotal()的列表中。

在订单的一般列表中HistoryOrdersTotal(),即使你选择了一个有一定冗余度的时期,订单也会丢失。

我可以向你保证,在'测试结束'之前关闭的情况下,订单和交易都存在于历史中。我的多币种计算每个符号赚取的利润。在 "测试结束 "前在测试器中关闭的交易在去初始化中被纠正,以反映这些交易。所有符号的总利润与测试报告的数据相吻合。这就是代码。

       if(HistorySelect(0,TimeTradeServer()))   // Поправка для 'end of test'
        {
         int DeelsTotal=HistoryDealsTotal();
         for(int i=0;i<SymbolsNumber;i++)
           {
            ulong ticket=HistoryDealGetTicket(DeelsTotal-1-i);
            string comment=HistoryDealGetString(ticket,DEAL_COMMENT);
            if(comment!="end of test"&&StringSubstr(comment,0,3)!="so ")
               break;
            for(int j=0;j<SymbolsNumber;j++)
              {
               if(HistoryDealGetString(ticket,DEAL_SYMBOL)!=m_expert[j].Name())
                continue;
               m_Profit[j]=m_Profit[j]+HistoryDealGetDouble(ticket,DEAL_PROFIT)+  // Добавим профит закрытой позиции для "end of test" и "so"
                           HistoryDealGetDouble(ticket,DEAL_SWAP)+HistoryDealGetDouble(ticket,DEAL_COMMISSION);
              }
           }
        }
 

同事们,有没有办法让SymbolInfoSessionTrade 在策略测试器中发挥作用?

一个微不足道的条目不起作用。

void OnTick() {
  datetime from, to;
  if (SymbolInfoSessionTrade(_Symbol, FRIDAY, 0, from, to)) Print("WOW!");
}
Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote
Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote
  • www.mql5.com
Получение рыночной информации / SymbolInfoSessionQuote - Документация по MQL5
 

如果可能的话,还有一个问题。我想了解新操作员 的含义。它背后的想法是什么?为什么不以通常的方式创建该对象?毕竟,在区块结束后,对通过new声明的对象的访问将失去,所以我们为什么需要它?

P.S. 老实说,我在文件中找不到它 :)

Документация по MQL5: Основы языка / Операторы / Оператор создания объекта new
Документация по MQL5: Основы языка / Операторы / Оператор создания объекта new
  • www.mql5.com
Основы языка / Операторы / Оператор создания объекта new - Документация по MQL5
 
220Volt:

如果可能的话,还有一个问题。我想了解新操作员 的含义。它背后的想法是什么?为什么不以通常的方式创建该对象?毕竟,在区块结束后,对通过new声明的对象的访问将失去,所以我们为什么需要它?

一切都会在某一时刻过去。这是否意味着不需要做什么......?


P.S. 老实说,我在文件中找不到它 :)

我相信你...:))
 
Valmars:

谢谢你!弄明白了。使用TimeTradeServer() 而不是TimeCurrent()是必要和充分的。

在交易周结束时,没有新的报价,这就是为什么TimeCurrent()很长时间不更新的原因。

当解除专家顾问的初始化时,TimeCurrent()显示时间为23:00;TimeTradeServer()显示时间为23:59,这与测试的结束相吻合。

 
MoneyJinn:

谢谢你!弄明白了。使用TimeTradeServer() 而不是TimeCurrent()是必要和充分的。

在交易周结束时,没有新的报价,因此TimeCurrent()在很长一段时间内不会更新。

重点不在于引号,而在于 "测试结束 "的交易是在测试期结束后执行的。所以,无论是'OnTick'还是'OnTimer'都不能从历史中获取它们。至少一年前是这样的,所以我把他们的检查转移到'OnDeinit'。
 
220Volt:

如果可能的话,还有一个问题。我想了解新操作员 的含义。它背后的想法是什么?为什么不以通常的方式创建该对象?毕竟,在区块结束后,对通过new声明的对象的访问将失去,所以我们为什么需要它呢?

P.S 老实说,在文件中找不到它 :)

不要创建动态对象--你将不必使用现在和其他一切与这些对象相关的东西(尽管那时你将无法做很多事情)。

你想了解的不是现在的意义,而是与动态对象一起工作的意义......。

动态放置对象的初始化和非初始化

指向对象的指针一个特殊情况,因为声明一个指针并不要求初始化有关对象动态放置的对象仅在通过new操作符 创建一个类的实例时被初始化。对象的初始化意味着调用相应类的构造函数。如果一个类中没有相应的构造函数,其简单类型 的成员将不会被自动初始化;字符串动态数组复杂对象 类型的成员将被自动初始化。

指针可以被局部或全局地声明,可以用一个空的NULL 值初始化,也可以用一个相同类型的指针或生成的 指针初始化。如果new在本地层声明的指针上调用 的,那么该指针的删除语句也 必须在离开本地层之前执行否则,指针将丢失,并且不能明确地删除该对象。

所有由表达式 pointer_object=new_ClassName创建的对象 必须在事后用delete(pointer_object)操作符销毁如果由于某种原因,这个变量没有被删除操作者 销毁,那么关于它的信息将出现在专家日志中。你可以声明多个变量,并为所有这些变量分配指向同一对象的指针。

如果被动态创建的对象有一个构造函数,这个构造函数将在执行 new操作时被调用 。如果对象有一个析构器,那么 在执行删除 操作时将会调用该析构器

因此,动态放置的对象只有在使用 new操作符创建时才会被创建 并且 保证 它们在程序卸载 时被delete 操作符 或MQL5执行系统自动 删除 动态创建的对象指针的声明顺序不影响其初始化的顺序初始化和非初始化的顺序完全由程序员控制。