MQL4のMovingAverageEA を MQL5 に移植する。(2)
昨日の続きです。
MQL5 での注文処理は、以前の日記(MQL5超入門(12)/MT5のOrderSend())で書いたように、OrderSend関数と、2つの構造体を使うと可能です。なので、厳密には class を使わなくてもEAは作れるのですが、便利なclass は使った方が楽なので今回は class を使って注文しています。
最新のインストーラからMetaTrader5をインストールすると、注文用のクラスの定義が微妙に変わっているので、それに対応したバージョンをこちらに用意しました。昨日のコードがコンパイルできない人はこちらを試してみてください。
(Vistaの場合、最新版をインストールしても Terminal Data フォルダ内のファイルは更新されないので要注意です。クラスの定義ファイルを最新にするには、手作業でMQL5フォルダごとコピーして更新する必要があります。)
さて、クラスの使い方ですが、
(1)クラスを定義しているファイルをinclude し、クラスの実体を変数として確保する。
// use CTrade class #includeclass CTrade MyTrade;//MyTrade という変数をCTrade型クラスの実体とする。
分かりやすい表現はなんて書けばよいのか分かりませんが、普段、グローバルな変数として、
int a; double b;
と書くのと同じ要領で、
class CTrade MyTrade;
と書いてあると思ってください。
(2) マジックナンバーと、スリッページを設定し、注文をする。
MyTrade.SetExpertMagicNumber(magic); MyTrade.SetDeviationInPoints(slippage); bool ret=MyTrade.PositionOpen(symbol,cmd,volume,price,stoploss,takeprofit,comment);
クラスは、変数と関数の集合体のようなもので、その中の関数(メンバ関数、メソッド)を呼び出す時は、MyTrade(ピリオド)関数名..と書いて使います。
(3) 注文結果を受取る。
msg="ret="+(string)ret +"\nretcode="+MyTrade.ResultRetcodeDescription() +"\ndeal="+(string)MyTrade.ResultDeal() +"\norder="+(string)MyTrade.ResultOrder();
(2),(3)ともに、MyTrade の中にある関数を呼び出しています。
MyTrade に含まれる関数の詳細を知りたい場合は、 CTrade というクラスの宣言部分を調べればよく、Trade.mqh というファイルに全て書かれています。
関数名(メソッド名) | 機能 |
ResultXXXX | 注文結果を取得する |
SetExpertMagicNumber | マジックナンバーを設定する |
SetDeviationInPoints | スリッページを設定する |
PositionOpen | 成行き注文する |
PositionModify | 保有中のポジションのsl/tpを変更する |
PositionClose | 保有中のポジションを決済する |
OrderOpen | 指値注文する |
OrderModify | 指値注文を変更する |
OrderDelete | 指値注文を取り消す |
CTrade というクラスは、今後修正される可能性があるのと、もっと便利な注文用クラスが公開されるかもしれないので、これが絶対お勧め..という訳ではないですが、ちょっとしたサンプルEAを作る時には、十分使えます。
自分で構造体を準備して OrderSend するよりも楽かな...と思うのですが、如何でしょう・・?