为什么不把输入参数放在结构中?

 

我是指EA-in-class方法。在向EA传递输入参数 时有一个问题,该EA的类是在一个单独的.mqh文件中。我使用两种方法

  1. 输入参数被一个或多个初始化函数复制到EA类的字段中。这是最普遍的方法,但在有大量变量的情况下,它是最耗时的。
  2. 该类被定义在输入变量之后,所以它们从EA中是可见的。缺点是--在使用类的多个实例时灵活性较差。加分项是最少的写作量。

input double LotSize = 0.1;
// другие input переменные...

#include <MyLib\MyClassEA.mqh>
CMyClassEA MyEA;

那如果我们做一个MQL扩展,把输入变量放在结构中呢?反正它与C++和C不兼容,因为模仿指针。那么,为什么不走得更远呢?

struct InputVars
{
    input double Lot   = 0.1;
    input int    Magik = 100;
} ivars;

然后你可以将变量ivars传递给算法类,复制等。

把这个想法放在头脑风暴的层面上 ))

 

长期以来,我不得不处理需要处理大量配置参数的工作。只要有可能,我就通过DLL创建一个特殊的对话框 来解决这个问题,在这个对话框中,参数是有标签的。初始化后,该窗口被隐藏,然后程序照常运行。

如果在MQL中也有这样的东西就好了,这样它就不必在一个巨大的参数列表中寻找。如何实现它的想法非常有趣。只是语法上应该略有不同。

input struct VolumeParams                              // Здесь название вкладки
{
    // Содержимое вкладки
    double Lot1 = 0.01;
    double Lot2 = 0.02;
    double LotRatio = 1.5;
};
 
Ihor Herasko:

长期以来,我不得不处理需要处理大量配置参数的工作。只要有可能,我就通过DLL创建一个特殊的对话框来解决这个问题,在这个对话框中,参数是有标签的。初始化后,该窗口被隐藏,然后程序照常运行。

如果在MQL中也有这样的东西就好了,这样它就不必在一个巨大的参数列表中寻找。如何实现它的想法非常有趣。只是语法上应该略有不同。


对,它比较短),而且用dll在市场上是行不通的,唉。

而使用对话框则不能让你在测试器中优化参数

 

那么这样就更好了。

struct VolumeParams                              
{
    double lot;         //название параметра
    double LotRatio;    //название параметра
    int tp;             //название параметра
    int sl;             //название параметра
    int orders;         //название параметра
};
VolumeParams ParamBuf[5];

input ParamBuf[0];         // Здесь название вкладки
input ParamBuf[1];         // Здесь название вкладки
input ParamBuf[2];         // Здесь название вкладки
input ParamBuf[3];         // Здесь название вкладки
input ParamBuf[4];         // Здесь название вкладки
 

我认为,这是个好主意,与OOP的概念一致。到目前为止,我看到了2个选项。

1)FrameInputs 风格。

parameters

[输出] 带有参数名称和值描述的字符串数组

参数_count

[out]参数[]数组中的元素数量

2) 在MqlParams 风格中。

 

我总是采用第一种方法。

当专家顾问被放置在交易中时(无论是在模拟账户还是真实账户上)--参数是固定的--只有一个参数--风险百分比--被传递给专家顾问的类。所有其他参数都写在相同的结构中,并在专家顾问内部定义--要么在构造函数中,要么在一个特殊函数中。

 
Alexey Volchanskiy:

我指的是 "专家顾问类 "的方法。在将输入参数传递 给专家顾问时有一个问题,专家顾问的类位于一个单独的.mqh文件中。

没觉得有什么问题。要在类的构造函数中规定一个模板,就这样了。

 
fxsaber:

没觉得有什么问题。你必须在类的构造函数中规定一个模板,就这样了。


嗯,你还没有和客户谈过)。

...在这里,客户想要10个输入,每个步骤都有自己的tp/sl/lot/trall/信号输入。

而这一切都在测试器中得到了优化)

 
Taras Slobodyanik:

嗯,你还没有和客户谈过)。

...所以客户想要10个输入,每个步骤都有自己的tp/sl/lot/trall/信号来输入。

而这一切都在测试器中得到了优化)

那么,这与本支部的主题有什么关系?

 
fxsaber:

那么,这与这个主题有什么关系呢?


讨论本身确实略微偏离了主题标题。现在更多的是关于TC帖子的第二部分。

阿列克谢-沃尔昌斯基

如果我们做一个MQL语言的扩展,把输入变量放在结构中,会怎么样?反正它与C++和C不兼容,因为有指针的模仿。那么,为什么不走得更远呢?

然后你可以将变量ivars传递给算法类,复制,等等。

 
fxsaber:

那么,这与这个主题有什么关系呢?


所以它是这样的,要写这一大堆的参数,只要定义好结构,把它放在输入参数里就可以了。