前回は ネッティングシステムにおけるシンプルEAのコード
について解説しました。
前回の第70回で中級編は終了し、今回からはいよいよ発展編に入ります。
発展編では何をしていくかというと、クラスを使ったり、実際に作ったりしながら、記述を簡略化する方法や作れるEAの幅を広げ方を学んでいきます。
これからしばらく、オリジナルのクラスを作っていく事に内容の多くが占められることになります。クラスについての理解が追い付いていない方は、以下の↓記事で復習されることをお勧めします。
- MQL5 EA講座 第48回「クラスについて1-クラスとは?-」
- MQL5 EA講座 第49回「クラスについて2 -クラスの使い方-」
- MQL5 EA講座 第50回「クラスについて3 -アクセス指定子-」
- MQL5 EA講座 第51回「クラスについて4 -派生クラス-」
- MQL5 EA講座 第52回「クラスについて5 -コンストラクタ-」
- MQL5 EA講座 第53回「クラスについて6 -仮想関数-」
また、作ったクラスや関数群をインクルードファイルにしていく工程も発生するので、include命令についても↓の記事を参考にしていただければと思います。
トレード用クラス作成のロードマップ
これまでに、新規成行注文、新規待機注文、待機注文の修正方法、ストップロスとテイクプロフィットの設定、ポジションのクローズなどのやり方について紹介してきました。そして、それらのやり方には全てOrderSend関数を使ってきました。
OrderSend関数や、その引数に使われているMqlTradeRequest構造体や MqlTradeResult構造体を用いた記述を見て、ゲンナリされた方も多いと思います。
実際問題、第68回–69回で紹介したMT5用EAの発注に関する記述は、基本的なものである一方で、メンバ変数の設定が適切でない等の、記述ミスが生じやすいです。
そこで、どのようなMT5用EAを開発する時でも、繰り返し利用できるトレード用のクラスを作っていこうという訳です。
※MQL5には標準で、便利なライブラリーが多数用意されていますが、クラスの仕組みを理解し、ある程度自分でクラスを作れるようにならないとライブラリーを十分に使いこなすことができないでしょう。
※OrderSend関数やMqlTradeRequest構造体については↓の記事をご参照ください。
第60回「OrderSend関数とMqlTradeRequest構造体」
※ MqlTradeResult構造体については↓の記事をご参照ください。
これから作るトレード用クラスの概要
これから作るトレード用のオリジナルクラスには、
- 新規ポジション保有や、待機注文、SLTP修正、決済などの注文を出す際に使うMqlTradeRequest構造体の各メンバ変数に値を設定する。
- 実際にトレードサーバーに注文を出す。
- 注文結果を格納しているMqlTradeResult構造体にアクセスして、注文結果を格納する。
という仕組みを実装していきます。
今回から解説していく一度クラスが完成すれば、今後MT5用EAのメインプログラムで、クラスのインスタンスを宣言しさえすれば、必要な引数を渡すだけで注文関連の処理を行ってくれる関数を呼び出すことができるようになります。
※インスタンスについては↓の記事をご覧ください。
オリジナルのクラスを作るためのインクルードファイルを生成する
まずはオリジナルのクラスを作るためのインクルードファイルを生成します。
includeファイルの作り方 の手順に従ってMQLウィザードを進めていきます。ファイル名は「OriginalTrade」としました。
これで現時点では中身が空の「OriginalTrade.mqh」ファイルが「include」フォルダ内にできました。
これをたたき台にして、クラスや関数を宣言・定義していきます。
※MQLウィザードについては↓の記事をご覧ください。
作成したインクルードファイルにトレードクラスを宣言する
まずは、現時点では中身が空の「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」はクラスの外側からアクセスする必要があるようにクラスを設計していくから、というのが理由なのですが、詳しいことはクラスを作り終えたときにまたお話しします。
MQL5 EA講座 第70回「簡単な仕組みのMT5用EAを作るーネッティングシステムの-場合ー」←
→【超入門】MQL5 EA講座 第72回「ポジションオープン関数を実装する」【MT5用EA】
—————————————————————
コメント