MQL で注文を出すときは、クラスベースの CTrade
や、関数ベースの OrderSend
を使用します。
ここでは、CTrade
クラスを使って注文を出す方法を説明します。
OrderSend
関数と違い、CTrade
クラスは注文の種類ごとにメソッド名が Buy
、Sell
、BuyLimit
のように分かれている ので、わかりやすいコードを記述することができます。
CTrade クラスのインクルード
トレード用クラス のひとつである CTrade クラス を使用すると、取引のための注文を出したり、注文をキャンセルしたりできます。
Ctrade
クラスを使用するには、次のように Trade/Trade.mql
ヘッダファイルをインクルードする必要があります。
成行注文を出す (CTrade.Buy, Sell)
カレントシンボルの成行注文
CTrade.Buy メソッド で 成行の買い 注文を出すことができます。
第 1 引数 (volume
) だけが必須で、ここで取引のロット数(0.1 なら 1万通貨)を指定します。
許容するスリッページ(ポイント数)は、CTrade.SetDeviationInPoints メソッド で指定できます。
次のスクリプトを実行すると、現在のシンボルを 0.1 ロット購入します。
成行の売り 注文を出したいときは、CTrade.Buy
メソッドの代わりに CTrade.Sell メソッド を使用します。
パラメータは買い注文と同様です。
いろいろな条件の成行注文
CTrade.Buy
メソッドのシグネチャは次のようになっており、第 2 引数以降で条件を指定して注文を出すことができます。
第 1 引数だけ指定した場合は、カレントチャートの通貨を、指定したロット数だけ成行買いすることになります。
次のサンプルスクリプトでは、成行の買い注文を入れると同時に、損切り (stop loss) を 100 ポイント下(USDJPY ならおそらく 0.1 円)、利確 (take profit) を 200 ポイント上に設定します。
指値注文、逆指値注文を出す (CTrade.BuyLimit, BuyStop, SellLimit, SellStop)
CTrade.Buy
や CTrade.Sell
メソッドの代わりに、次のようなメソッドを使用することで、指値注文や逆指値注文を出すことができます。
パラメータは成行注文とほぼ同様ですが、待機注文になるため、有効期限などを指定できるようになっています。
- CTrade.BuyLimit メソッド … 買い指値注文(現在 Ask 値より低い値段に買い予約)
- CTrade.BuyStop メソッド … 買い逆指値注文(現在 Ask 値より高い値段に買い予約)
- CTrade.SellLimit メソッド … 売り指値注文(現在 Bid 値より高い値段に売り予約)
- CTrade.SellStop メソッド … 売り逆指値注文(現在 Bid 値より低い値段に売り予約)
マジックナンバーを指定する (Ctrade.SetExpertMagicNumber)
EA で注文を出す場合は、あらかじめ CTrade.SetExpertMagicNumber メソッド を使ってマジックナンバーを設定しておく必要があります。
次のサンプルコードは、初回の NewTick イベントで買い注文を入れる EA の実装例です。
グローバル変数が増えるとコードが読みにくくなるので、取引まわりの処理は MyAlgo
クラスにまとめています。
関連記事
- MetaTrader/MQL: OrderSend の引数を理解する - MqlTradeRequest/MqlTradeResult 構造体 (MT5)
- MetaTrader/MQL: 通貨(シンボル)のポイントサイズ、Digit 数を調べる (Point, Digits, SymbolInfoDouble)
- MQL で Hello World
- MetaTrader/MQL: MQL4 と MQL5 のどちらでコンパイルされているか調べる
- MetaTrader/MQL: チャートのサイズ(幅・高さ)を取得する (ChartGetInteger)
- MetaTrader/MQL: インジケーターの実装例 - アカウント(口座)情報を表示する
- MetaTrader/MQL: チャートのタイムフレーム(H1 や M15)を取得する (Period, PeriodSeconds)