【超入門】MQL5 EA講座 第71回「トレード用のオリジナルクラスを作る」【MT5用EAの作り方】

MQL5でEA作ろう講座

前回は ネッティングシステムにおけるシンプルEAのコード

について解説しました。

前回の第70回中級編は終了し、今回からはいよいよ発展編に入ります。

発展編では何をしていくかというと、クラスを使ったり、実際に作ったりしながら、記述を簡略化する方法や作れるEAの幅を広げ方を学んでいきます。

これからしばらく、オリジナルのクラスを作っていく事に内容の多くが占められることになります。クラスについての理解が追い付いていない方は、以下の↓記事で復習されることをお勧めします。

また、作ったクラス関数群をインクルードファイルにしていく工程も発生するので、include命令についても↓の記事を参考にしていただければと思います。

スポンサーリンク
スポンサーリンク

トレード用クラス作成のロードマップ

これまでに、新規成行注文新規待機注文待機注文の修正方法ストップロスとテイクプロフィットの設定ポジションのクローズなどのやり方について紹介してきました。そして、それらのやり方には全てOrderSend関数を使ってきました。

OrderSend関数や、その引数に使われているMqlTradeRequest構造体MqlTradeResult構造体を用いた記述を見て、ゲンナリされた方も多いと思います。

実際問題、第68回69回で紹介したMT5EAの発注に関する記述は、基本的なものである一方で、メンバ変数の設定が適切でない等の、記述ミスが生じやすいです。

そこで、どのようなMT5EAを開発する時でも、繰り返し利用できるトレード用のクラスを作っていこうという訳です。

MQL5には標準で、便利なライブラリーが多数用意されていますが、クラスの仕組みを理解し、ある程度自分でクラスを作れるようにならないとライブラリーを十分に使いこなすことができないでしょう。

OrderSend関数MqlTradeRequest構造体については↓の記事をご参照ください。

第60回「OrderSend関数とMqlTradeRequest構造体」

MqlTradeResult構造体については↓の記事をご参照ください。

第61回「MqlTradeResult構造体について」

これから作るトレード用クラスの概要

これから作るトレード用のオリジナルクラスには、

という仕組みを実装していきます。

今回から解説していく一度クラスが完成すれば、今後MT5EAのメインプログラムで、クラスインスタンスを宣言しさえすれば、必要な引数を渡すだけで注文関連の処理を行ってくれる関数を呼び出すことができるようになります。

インスタンスについては↓の記事をご覧ください。

MQL5 EA講座 第54回「インスタンスについて」

オリジナルのクラスを作るためのインクルードファイルを生成する

まずはオリジナルのクラスを作るためのインクルードファイルを生成します。

includeファイルの作り方 の手順に従ってMQLウィザードを進めていきます。ファイル名は「OriginalTrade」としました。

これで現時点では中身が空の「OriginalTrade.mqh」ファイルが「include」フォルダ内にできました。

これをたたき台にして、クラス関数を宣言・定義していきます。

MQLウィザードについては↓の記事をご覧ください。

MQL5 EA講座 第2回「メタエディターの使い方」

作成したインクルードファイルにトレードクラスを宣言する

まずは、現時点では中身が空の「OriginalTrade.mqh」ファイルにクラスを宣言します。

//トレード用のクラス「OriginalCTrade」を定義する
class OriginalCTrade
{
	protected:
		MqlTradeRequest request;
		
	public:
		MqlTradeResult result;

}//class OriginalCTrade

クラス名はなんでもいいのですが、「OriginalCTrade」としました。標準ライブラリー内に「CTrade」というクラスが存在するので、それと切り分けるためです。

まずは、{}内に

アクセス指定子protectedにしたMqlTradeRequest構造体インスタンス、「request」

アクセス指定子publicにしたMqlTradeResult構造体インスタンス、「result」

を宣言しました。

protectedキーワードで指定された変数関数は、その利用有効範囲が、宣言したクラスと、派生クラスに制限されます。

一方、publicキーワードで指定された変数関数は、クラスの外からでもアクセスできる、という違いがあります。

なぜ「request」のアクセスレベルprotectedにし、「result」のアクセスレベルprotectedにしているのかは今はピンとこないかと思います。

「request」はクラスの外側からアクセスする必要がなく、「result」はクラスの外側からアクセスする必要があるようにクラスを設計していくから、というのが理由なのですが、詳しいことはクラスを作り終えたときにまたお話しします。

今回は一旦以上とさせていただきます。

次回より、この中にドンドン変数関数を追加していきます。

最後までお読みいただきありがとうございました<m(__)m>

MQL5 EA講座 第70回「簡単な仕組みのMT5用EAを作るーネッティングシステムの-場合ー」

  →【超入門】MQL5 EA講座 第72回「ポジションオープン関数を実装する」【MT5用EA】

—————————————————————



コメント

タイトルとURLをコピーしました