EA: 交易者的MQL5编程(MQL5 Programming for Traders) - 源代码第七部分 - 页 5

 
thelux9 #:

这正是我所需要的。

请确保您获得的是最新更新,因为您引用的不是本主题上发布的最新版本。

 
请修好它。
//+------------------------------------------------------------------+
// 读取选项文件并将其导出为 CSV 的主类
//+------------------------------------------------------------------+
class OptReader
{
   TesterOptCacheHeader header;
   TestCacheInputExtended inputs[];
   uchar bufferOfInputs[];
   int shapshot[];
   AutoPtr<RecordBase> records;
   
   bool read(const int handle)
   {
      SAFE(FileReadStruct(handle, header));
      if(header.parameters_total)
      {
         TestCacheInput temp[];
         SAFE(FileReadArray(handle, temp, 0, header.parameters_total));
         const int n = ArrayResize(inputs, header.parameters_total);
         for(int i = 0; i < n; ++i)
         {
            inputs[i] = temp[i]; // 无法将参数 "TestCacheInput "转换为 "const TestCacheInputExtended&
            inputs[i].extend();
         }
      }


//+------------------------------------------------------------------+
//| 包含字符串化字段的输入结构
//+------------------------------------------------------------------+
struct TestCacheInputExtended: public TestCacheInput
{
   using TestCacheInput::operator=;
 
fxsaber #:
请修好它。


谢谢。我的修正方法有点不同。

struct TestCacheInputExtended: public TestCacheInput
{
   ...   
   void operator=(const TestCacheInput &other)
   {
      TestCacheInput::operator=(other);
      extend();
   }
};

这样更方便、更合理,因为extend() 不需要明确调用。

注:附件中还包含其他有用的修改。

附加的文件:
OptReader.mqh  24 kb
 
Stanislav Korotky #:

谢谢。改得有点不一样了。

这样更方便、更合理,因为extend() 不需要明确调用。

注:附件中还包含其他有用的修改。

谢谢,现在更实用了。
 

转自另一个主题:

关于交易、自动交易系统和交易策略测试的论坛

CalendarRecordById.mq5 - 错误

Ryan L Johnson, 2025.12.19 17:44

@MetaQuotes 支持,在 MQL5 Book 内容中发布的上述日历指标似乎包含过时的代码。

该文件的引用地址为:Reading event records by ID - Advanced language tools - MQL5 Programming for Traders

文件本身位于:https://www.mql5.com/zh/code/download/45596/CalendarRecordById.mq5。

当然,您需要下载包含的库文件来重现这些问题。

误差

就我个人而言,我使用了一种变通方法来获得我代码中所需的内容。我在这里的目的是确保文档的时效性。


 
Ryan L Johnson #:

转自另一主题:

当然,MQL5 在不断变化,不幸的是,MQ 这样做常常会破坏反向兼容性。我认为这不是改进平台的正确方式,但无论如何--我们唯一能做的就是根据新语法通过补丁修复问题。例如,在这种情况下,只需添加一行即可:

struct MqlCalendarRecord: public MqlCalendarValue
{
   using MqlCalendarValue::operator=;
   ...
};
请关注有关 MQL5 语法变化的官方新闻。