成行注文・指値注文・逆指値注文
ここでは、MQL5におけるCTradeクラスを活用した注文処理を中心に解説します。CTradeクラスは、従来のOrderSend関数よりも簡潔で直感的なコード記述を可能にし、Hedgeモード対応の取引戦略を効率的に実装するための強力なクラスです。
CTradeクラスの概要
CTradeクラスとは、MQL5標準ライブラリに含まれる取引操作用のクラスです。成行注文、指値注文、逆指値注文、ポジションの決済や変更などを簡単に実行可能です。`OrderSend`関数との違いは、簡潔なメソッド構造で、より直感的なコード記述が可能です。
OrderSend関数では複数のパラメータを個別に設定する必要がありましたが、CTradeクラスではメソッドを使うことで、より直感的かつ簡潔に注文を出すことができます
CTradeクラスの準備
- ヘッダファイルのインクルード
#include <Trade\Trade.mqh>
CTradeクラスを使っためにはTrade.mqhヘッダのインクルードが必要です。
- CTradeオブジェクトの作成
CTrade g_trade;
注文や決済を簡単に行うためのCTradeクラスのオブジェクトを作成しています。このオブジェクトを使うことで、プログラム全体でトレード操作を実行できます。
成行注文 (Market Order)
成行注文は、現在の市場価格で即座に約定させる注文です。CTradeクラスでは、`trade.Buy()`と`trade.Sell()`メソッドを使用します。
成行買い注文 (Buy)
- 必須パラメータ: ロット数(`dVolume`)
- 任意パラメータ: ストップロス(SL)、テイクプロフィット(TP)、コメントなど
- コード例
double dVolume = 0.1;
double dSl = SymbolInfoDouble(_Symbol, SYMBOL_ASK) - 100 * _Point;
double dTp = SymbolInfoDouble(_Symbol, SYMBOL_ASK) + 200 * _Point;
g_trade.Buy(dVolume , _Symbol, 0, dSl, dTp, "Buy order");
買い注文の場合はAskで約定するため、ストップロス、テイクプロフィットはAsk価格を基準に設定します。
成行売り注文 (Sell)
- コード例
double dVolume = 0.1;
double dSl = SymbolInfoDouble(_Symbol, SYMBOL_BID) + 100 * _Point;
double dTp = SymbolInfoDouble(_Symbol, SYMBOL_BID) - 200 * _Point;
g_trade.Sell(dVolume, _Symbol, 0, dSl, dTp, "Sell order");
売り注文の場合は、Bidで約定するため、ストップロス、テイクプロフィットはBid価格を基準に設定します。
指値注文と逆指値注文
指値注文は、指定した価格以下(買い)または以上(売り)になったら約定させる注文です。逆指値注文は、指定した価格以上(買い)または以下(売り)になったら約定させる注文です。
指値注文 (Limit Orders)
- 買い指値: `trade.BuyLimit()`
- 売り指値: `trade.SellLimit()`
- コード例(買い指値)
double dPrice = SymbolInfoDouble(_Symbol, SYMBOL_BID) - 50 * _Point;
g_trade.BuyLimit(0.1, dPrice, _Symbol, dPrice - 100 * _Point, dPrice + 200 * _Point);
逆指値注文 (Stop Orders)
- 買い逆指値: `trade.BuyStop()`
- 売り逆指値: `trade.SellStop()`
- コード例(売り逆指値)
double dPrice = SymbolInfoDouble(_Symbol, SYMBOL_ASK) + 50 * _Point;
g_trade.SellStop(0.1, dPrice, _Symbol, dPrice + 100 * _Point, dPrice- 200 * _Point);
マジックナンバーとスリッページ
マジックナンバー設定
- マジックナンバーとは
EAがポジションとオーダーを管理する上で、ポジションとオーダーに関連付けする値です。
マジックナンバーの詳細
特徴 | 説明 |
---|---|
定義 | EA(エキスパートアドバイザ)固有の識別番号 |
目的 | 複数のEAや手動取引を区別するために使用 |
データ型 | uint型(符号なし整数) |
推奨範囲 | 9桁以下(MQL4との互換性のための推奨であり制限ではない) |
設定方法 | MqlTradeRequestのmagicフィールドやCTradeのSetExpertMagicNumberメソッドで設定 |
重要性 | EAごとに一意の値を設定し、重複を避ける必要がある |
用途 | ポジションやオーダーの管理、損益計算、注文の一括決済など |
推奨事項 | 外部パラメータとして設定し、ユーザーが変更可能にする |
デフォルト値 | 0(手動取引を示す) |
- コード例
g_trade.SetExpertMagicNumber(123456);
スリッページ設定
- 許容スリッページ(ポイント単位)の指定
- 設定方法
g_trade.SetDeviationInPoints(10); // スリッページを10ポイントに設定
エラー処理
注文実行後の結果確認は非常に重要です。CTradeクラスでは、以下のようにエラーを確認できます。
if(g_trade.ResultRetcode() == TRADE_RETCODE_DONE)
{
Print("Order placed successfully");
}
else
{
Print("Order failed. Error code: ", trade.ResultRetcode());
}
Hedgeモードでの注意点
Hedgeモードでは、同一通貨ペアで複数のポジションを持つことが可能です。その際、以下の点に注意が必要です。
- 同一通貨ペアで複数ポジションを持つ際の管理方法
- マジックナンバーを活用したポジション識別
- 指値・逆指値注文時の有効期限設定(`ORDER_TIME_GTC`など)
実践課題
成行買い/売り注文、指値/逆指値注文をそれぞれ実装する練習問題を通じて、実際にコードを書いてみてください。マジックナンバーとスリッページ設定を含めたコード例を作成し、CTradeクラスの使い方をより深く理解しましょう。
用語集
用語 | 説明 |
---|---|
CTradeクラス | MQL5標準ライブラリに含まれる、取引操作を簡単にするためのクラス。注文の発注、変更、決済などをメソッドを通じて行います。 |
EA(エキスパートアドバイザ) | MetaTrader 5 (MT5) プラットフォーム上で動作し、自動的に取引を行うプログラム。MQL5言語で記述されます。 |
Hedgeモード | MT5で、同一通貨ペアにおいて買いポジションと売りポジションを同時に持つことができるモード。両建てが可能です。 |
マジックナンバー | EAが発注した注文を識別するための固有の番号。複数のEAを同時に使用する際に、それぞれのEAが管理するポジションを区別するために使用されます。 |
MQL5 | MetaTrader 5 (MT5) で使用される高水準プログラミング言語。EAやカスタムインジケータの開発に用いられます。 |
ポイント | 価格の最小変動単位。通貨ペアによって異なり、通常は0.00001または0.001です。 |
指値注文 | 指定した価格以下(買い指値)または以上(売り指値)になったら約定させる注文。現在の価格よりも有利な価格で約定させたい場合に使用します。 |
ストップロス (SL) | ポジションの損失を限定するために設定する注文。指定した価格に達すると自動的に決済されます。 |
スリッページ | 注文価格と実際に約定した価格の差。市場の変動や流動性の不足により発生することがあります。 |
成行注文 | 現在の市場価格で即座に約定させる注文。迅速な取引を希望する場合に使用します。 |
テイクプロフィット (TP) | ポジションの利益を確定するために設定する注文。指定した価格に達すると自動的に決済されます。 |
逆指値注文 | 指定した価格以上(買い逆指値)または以下(売り逆指値)になったら約定させる注文。ブレイクアウトを狙う場合や、損失を限定するために使用します。 |
uint型 | 符号なし整数データ型。0以上の整数を表します。マジックナンバーなどに使用されます。 |
CTrade.Buy | 成行買い注文を出すメソッド。 |
CTrade.Sell | 成行売り注文を出すメソッド。 |
CTrade.BuyLimit | 買い指値注文を出すメソッド。 |
CTrade.SellLimit | 売り指値注文を出すメソッド。 |
CTrade.BuyStop | 買い逆指値注文を出すメソッド。 |
CTrade.SellStop | 売り逆指値注文を出すメソッド。 |
CTrade.SetExpertMagicNumber | EAが発注する注文にマジックナンバーを設定するメソッド。 |
CTrade.SetDeviationInPoints | 注文価格からの許容スリッページ幅をポイント単位で設定するメソッド。 |
CTrade.OrderOpen | 未決注文(指値注文、逆指値注文)を発注するメソッド。 |
CTrade.PositionOpen | ポジションをオープンする(成行注文を発注する)メソッド。 |
CTrade.PositionClose | ポジションを決済するメソッド。 |
コメント