なぜ、構造体に入力パラメータを入れないのか?

 

EA-in-classのアプローチについてです。クラスが別の.mqhファイルにあるEAに入力パラメータを 渡すと、問題が発生することがあります。私は2つの方法を使っています。

  1. 入力パラメータは、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だとMarketでは使えませんね、残念です。

また、ダイアログボックスを使用すると、テスターのパラメータを最適化する ことができません。

 

それなら、こっちのほうがいい。

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

[out] パラメータ名と値の説明を記述した文字列配列。

パラメータ数

[out]parameters[] 配列の要素

2)MqlParamsの スタイルで。

 

私はいつも最初のアプローチを使っています。

Expert Advisorが取引に置かれるとき(デモまたはリアル口座のいずれか) - パラメータは固定されています - と1つのパラメータ - リスク率 - Expert Advisorのクラスに渡されます。その他のパラメータはすべて同じ構造で記述され、Expert Advisor内部で定義されます(コンストラクタ内または特殊関数内)。

 
Alexey Volchanskiy:

クラスでExpert Advisor」というアプローチということです。別の.mqhファイルにあるExpert Advisorのクラスに入力パラメータを渡す 際に問題があります。

問題を感じなかった。クラスのコンストラクタでテンプレートを規定すること、それだけです。

 
fxsaber:

問題を感じなかった。クラスのコンストラクタでテンプレートを規定する必要があり、それだけです。


まあ、お客様とのコミュニケーションが取れていないのでしょうけど...。)

...ここでは、顧客は10個の入力が必要で、各ステップは入力するために独自のtp/sl/lot/tall/signalを持っています。

と、これらすべてがテスターで最適化されていること)

 
Taras Slobodyanik:

まあ、お客さんと話してないですからね(笑)。

...つまり、顧客は10個の入力が必要で、各ステップには入力するためのtp/sl/lot/tall/signalがある。

と、これらすべてがテスターで最適化されていること)

では、枝葉の話題とどう関係するのでしょうか。

 
fxsaber:

では、このスレッドのトピックとどう関係するのでしょうか?


議論自体は、確かにスレッドタイトルから少しずれていますね。今は、TCさんの投稿の後半部分についてです。

Alexey Volchanskiy

MQL言語を拡張して、構造体の中に入力変数を入れたらどうだろう?どうせポインタの真似事でC++やCと互換性がないんだろ。では、なぜもっと踏み込まないのか。

そして、変数ivarsをアルゴリズムクラスに渡す、コピーする、などの方法が考えられます。

 
fxsaber:

では、このスレッドのトピックとどう関係するのでしょうか?


だから、このように山ほどのパラメータを書くには、構造を定義して入力パラメータに入れれば十分なのです。

理由: