私のアプローチコアはエンジンです。 - ページ 139

 
Georgiy Merts:

皆さんは、ピーターにOOPの良さを納得させることができますか?

アルチョム・トリシキン

無駄口はやめろ

あなた方の言う通り、私はすべてを知っているし、とてもよく理解している。しかし、どうやらピーターが私のOOP-soulの心の糸に触れて「いらない、やらない」と言っているようで、私はいつもこの終わりのない説明、議論、口論に陥っています。

 
Реter Konow:

そして、エンジンはテキストファイルからカーネルを読み込みます。難しいことではないんです。

ああ、なるほど。うん、その方がいい。つまり、カーネルはテキストファイルであり、本質的にはエンジンの設定グループなのです。

 
Реter Konow:

いや、ワシリー、君は何でも大袈裟に考えすぎるんだ))

ビルダーの中にボタンがあり、それをクリックするとすべてのファイルが印刷されます。

そして、エンジンはテキストファイルからカーネルを読み込みます。難しいことではないんです。

リファクタリングはどのように行うのでしょうか? 例えば、悪い名前を変更したり、要素の構成や位置を変更したりします。

 
Vasiliy Sokolov:

ああ、なるほど。そう、その方がいいんです。つまり、カーネルはテキストファイルであり、本質的にはエンジンの設定グループなのです。

はい、その通りです。エンジンが特定のGUIを再現し、それを使って動作するために必要なすべての情報。今はエンジンに直接インストールしていますが、ビルダーが印刷するファイルからロードできるようにします。

 
Maxim Kuznetsov:

リファクタリングはどのように行われるのでしょうか? 例えば、悪い名前を変更したり、要素の構成や配置を一般的に変更したりします。

これはすべてコンストラクタで行います。KIBのコードが書き込まれ、ファイルが再コンパイルされます。

以下は、コンストラクタの操作方法ですhttps://www.mql5.com/ru/blogs/post/717782

 
Vasiliy Sokolov:

あるいは別の例。最近、あるExpert Advisorを修正して、複数のシンボルで同時に取引できるようにしたい(1つのチャート上で動作)、という依頼を受けました。手続き型のスタイルでは、異なるシンボルで同時に独立した取引をさせるには、長い時間と複雑な努力が必要だったでしょう。それに対して、私は単純に手続き的なコード全体をクラスに入れて、3つの模範解答を作りました。作業用シンボルなど、それぞれ個別の設定を指定したのですが、一発でちゃんと動きました。このコードは、一回目の試行でそのとおりに動作しました。ユーザーには満足していただけたようです。

今週も同じような例で、あるTFのバーのオープニングで買いを、別のTFのバーのオープニングで売りを開くExpert Advisorを作るように言われました(笑)。

しかし、新しいバーを 定義する些細な関数をクラスに書き直し、新しいバーを定義するクラスのインスタンスを2つ作りました。 コンストラクタの初期化時に、TFのタイムフレームをパラメータとして渡しました。

5分の作業ですが、すべてがうまくいくことが保証され、関数NewBar_TF1() , NewBar_TF2() ...の名前に混乱がなくなるでしょう。DeInit()でオブジェクトを削除し、ONInit()でオブジェクトを作成するように、ユーザーによる設定変更後に初期化するのが便利です。

OOPは便利で実用的

 
Реter Konow:

これはすべてコンストラクタで行います。KIBのコードが書き込まれ、ファイルが再コンパイルされます。

以下は、コンストラクタの操作方法ですhttps://www.mql5.com/ru/blogs/post/717782

しかし、それはイベントにあるすべてのカスタムエディットやバインディングを上書きしてしまうのでは?
 
Реter Konow:

はい、その通りです...

だから、あなたのエンジンが他の人と混同されることが多いのです。システム内の要素に非標準の名前を付ける。カーネルではなく、自動生成された設定ファイルです。

 
Maxim Kuznetsov:
しかし、それはイベントにあるすべてのユーザーの編集を上書きするのですか?

さらに説明する。

 
Vasiliy Sokolov:

だから、あなたのエンジンと他の人が混同してしまうのです。システム内の要素に非標準の名前を付ける。カーネルではなく、自動生成された設定ファイルです。

つまり、このファイルは、印刷されたカーネルなのです。1つだけではありません。