記事"ユニバーサルEA:シグナルの標準メタトレーダーモジュールとの統合(その7)"についてのディスカッション

 

新しい記事 ユニバーサルEA:シグナルの標準メタトレーダーモジュールとの統合(その7) はパブリッシュされました:

このパートでは、シグナルモジュールとCStrategyエンジンの統合の可能性が、メタトレーダーの標準ライブラリにあることについて記述します。この記事では、カスタム戦略を作成するメソッドと同様に、シグナルの操作メソッドについて説明します。

標準のMT5パッケージに含まれる様々なクラスのセットは、MQLウィザードを使用して、自動化戦略を生成するために使用されます。 MQL5\Includeサブフォルダにmqhファイルを含めるようにクラスが用意されています。これらのクラス(またはモジュール)は、いくつかのカテ ゴリーに分けることができます。以下がカテゴリーです。

  • データを整理するための基本クラス(CObject, CArrayDouble, CArrayObjなど)。取引のための他のモジュールは、これらのクラスに基づいて構築されています。
  • インジケータバッファ(CDoubleBuffer, CIndicatorBuffer)にアクセスするためのクラス。それぞれ、インジケータを操作するために使用されています。
  • インジケータクラスと共通のCSeriesクラスに基づいた時系列クラス。
  • 基 本的なCBaseExpertとCExpertはそれから派生しました。すべての補助モジュールはCBaseExpertに基づいています。 - 例えば、資産の計算、ストップ制御モジュールのモジュールなど。CExpertは、すべてのカスタムEAの基礎となっています。
  • CErtBaseに基づいたCExpertSignalのシグナルモジュール。シグナルのモジュールは、取引売買シグナルを生成します。シグナルに基づいたインジケータのクラスを使用します。
  • CExpertTradeの取引モジュール。CTradeクラスに基づいて、トレード操作の実行へのアクセスを提供しています。

以下の図は、戦略の自動生成の過程で使用されるクラスの一般的なスキームを示しています。

 

図1。戦略ジェネレーターの標準クラスの継承

作者: Vasiliy Sokolov

 

ヴァシリー、いつもながら興味深い。まず、プログラミングの観点から言うと...。MQLフォーラムで他に何を期待できるというんだ?

ちょっとしたコメント :-))

継承は通常、下から上に描かれます。だいたいこんな感じです:



 
サードパーティのライブラリを使わずに、1つのファイルにmql4で似たようなものを書いて、シグナルを生成するために、ユーザーが10個の任意のカスタムインジケータ用の70個の要素の間の関係の自由なツリーを構築できるように、そのような庭から構築された条件の結果を収集することは非常に楽しいですが、それは本当に普遍的なものになった。
 
Dennis Kirichenko:

ヴァシリー、いつもながら興味深い。まず、プログラミングの観点から言うと...。MQLフォーラムで他に何を期待できるというんだ?

ちょっとしたコメント :-))

継承は通常、下から上に描かれる。なるほど:

知らなかった。僕は左利きだから、逆に理解したんだと思う:)
 
Aleksey Semenov:
シグナルを生成するために、ユーザーが10個のカスタム・インジケータのための70個の要素間の関係の自由なツリーを構築できるように、私は1つのファイルで、サードパーティのライブラリを使用せずに、mql4で似たようなものを書いた、そのような庭から構築された条件の結果を収集することは多くの楽しみですが、それは本当に普遍的なものになった
プロトタイプを見ることができますか?
 
Aleksey Semenov:
シグナルを生成するために、70の要素間の関係を10種類のカスタム・インジケータ用に自由にツリーで構築できる ように、サードパーティのライブラリを使わずに1つのファイルでmql4で似たようなものを書いてみたのだが、そのような庭から構築された条件の結果を収集するのはとても楽しいが、本当に普遍的な何かが判明した。
そう、普遍的なストラテジー・ジェネレーターは、ツリーに基づいて書かれるべきだという事実に私は傾倒しているが、その作業はかなり難しい。
 
MetaTraderのシグナルシステムを使用している人はいますか また、Expert Advisorのプログラミングでシグナルクラスを使用している人はいますか?
 
Vasiliy Sokolov:
MetaTraderのシグナルシステムを使用している人はいますか また、Expert Advisorのプログラミングでシグナルクラスを使用している人はいますか?

Я.私はいつもこうしています:

  • インジケータを書く
  • インジケーターをベースにシグナルモジュールを作る。
  • Expert Advisorを構築する 際に、必要なシグナルモジュールを接続する。
一見、この方法は近くないように見えるかもしれませんが、実際には、インジケーターのシグナルを変更、修正したり、新しいシグナルを考案したりするのに非常に便利です。

 
Karputov Vladimir:

Я.いつもそうしている:

  • インジケーターを作る
  • インジケーターをもとにシグナルモジュールを作る
  • Expert Advisorを構築する際、必要なシグナルモジュールを接続する。
一見、この方法は近くないように見えるかもしれませんが、実際には、インジケーターのシグナルを変更、修正したり、新しいシグナルを考案したりするのに非常に便利です。

実に徹底したアプローチだ。そう、これには利点がある。

一般的に、多くの開発者はすでに独自のシグナルモジュールを書いています。なぜ、そのようなモジュールの集中的なベースを作らないのでしょうか?誰でも自分のモジュールを共有し、データベースに掲載することができる。勿論、グレイルに 水を差すことはできないが、その利点は誰の目にも明らかで、車輪を再発明する必要はないだろう。

 

インジケータ信号を初期化する場合:

//+------------------------------------------------------------------+
//| CSignalMacd シグナル・モジュールの初期化。
//+------------------------------------------------------------------+
COnSignal_RSI_AC::COnSignal_RSI_AC(void)
{
   MqlSignalParams params;
   params.every_tick = false;
   params.magic = 32910;
   params.point = 10.0;
   params.symbol = Symbol();
   params.period = Period();
   params.usage_pattern = 2;
   params.signal_type = SIGNAL_AC;
   CSignalAC* ac = m_adapter_ac.CreateSignal(params);
   params.usage_pattern = 1;
   params.magic = 32911;
   params.signal_type = SIGNAL_RSI;
   CSignalRSI* rsi = m_adapter_rsi.CreateSignal(params);
   rsi.PeriodRSI(RSI_Period);
}
1つのシグナルモジュール(アダプター)は1つのMagik (32910)に送信され、もう1つは2つ目のMagik (32911)に送信されます。つまり、1つのMagikはポジションをオープンする ために使用され、もう1つのMagikはポジションをクローズするために使用されるのでしょうか?それとも何か間違って理解しているのでしょうか?
 
Гога:

インジケータ信号を初期化する場合:

1つのシグナルモジュール(アダプター)は1つのMagik (32910)に送信され、もう1つは2つ目のMagik (32911)に送信されます。つまり、1つのMagikはポジションをオープンする ために使用され、もう1つのMagikはポジションをクローズするために使用されるのでしょうか?それとも何か誤解しているのでしょうか?
この場合、MagiksはCExpertのルードメンバーであり、シグナル自体はそのルードメンバーから継承されます。少なくともCStrategyでは、シグナルは保留注文を出さないので、必要ありません。しかし、念のためにマジックが指定されています。