こんにちは、潤奈です( ゚Д゚)!
MQL5の開発環境が整い、基本となる3大関数の役割を覚えたら、次はいよいよEA開発の醍醐味である「自動で注文(エントリー)を出す処理」を実装していきましょう!
実は、MQL4からMQL5に移行した人が最も驚き、そして挫折しやすいのが「注文処理の難しさ」です。
MQL4では1行でシンプルに書けた注文が、MQL5でまともに書こうとすると「構造体」や「結果の受け取り」など、非常に複雑なコードを何十行も書く必要があります。
しかし、安心してください!
MT5には、この面倒な注文処理を劇的にシンプルにしてくれる公式ツール「標準ライブラリ(CTradeクラス)」が最初から用意されています。
今回は、この CTrade を使って、コピペで今すぐ動かせる超シンプルな注文処理の書き方を分かりやすく解説します!
1. MQL5の注文はなぜ難しい?(MQL4との比較)
まず、なぜ標準ライブラリが必要なのか、背景をサラッと理解しておきましょう。
MQL4では、以下のように OrderSend 関数に引数を並べるだけで買い注文が出せました。
|
1 2 |
// MQL4での成行買い(シンプル!) OrderSend(Symbol(), OP_BUY, 0.1, Ask, 10, 0, 0, "MyEA", 12345, 0, clrGreen); |
一方、MQL5でライブラリを使わずにネイティブなコードで同じ注文を出そうとすると、以下のように MqlTradeRequest という専用の「構造体」に必要なデータを1つずつ代入して送信しなければなりません。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// MQL5ネイティブでの注文(初心者には難解…) MqlTradeRequest request; MqlTradeResult result; ZeroMemory(request); request.action = TRADE_ACTION_DEAL; // 成行注文 request.symbol = Symbol(); request.volume = 0.1; // ロット数 request.type = ORDER_TYPE_BUY; // 買い注文 request.price = SymbolInfoDouble(Symbol(), SYMBOL_ASK); // 買値 request.deviation = 10; // 許容スリッページ request.magic = 12345; // マジックナンバー request.type_filling = ORDER_FILLING_FOK; // 注文の執行ルール(FOK) OrderSend(request, result); |
「注文を出すだけでこんなに書くの…?」と頭が痛くなりますよね。
これを解決してくれる救世主が、今回紹介する CTrade です!
2. 救世主「CTrade」の使い方(3つのステップ)
標準ライブラリの CTrade を使うと、面倒な構造体の設定を裏側で自動的に処理してくれます。
使い方は、以下のたった3ステップです。
ステップ①:ライブラリを読み込む(インクルード)
コードの最上部(プロパティ設定や変数の宣言よりも上)に、以下の1行を記述してライブラリをインクルード(読み込み)します。
|
1 |
#include <Trade\Trade.mqh> // 注文ライブラリの読み込み |
ステップ②:注文用オブジェクト(インスタンス)を作る
グローバル領域(どの関数にも属さない場所)で、CTrade クラスを使えるように宣言します。
|
1 |
CTrade trade; // 注文機能を持つ「trade」というオブジェクトを作る |
ステップ③:注文関数を呼び出す
これで準備完了です!あとは OnTick() 内などで、以下のように呼び出すだけで注文が実行されます。
- 成行買い (0.1ロット):
mql5
trade.Buy(0.1); - 成行売り (0.1ロット):
mql5
trade.Sell(0.1);
MQL4よりもさらにシンプルになりましたね!
3. コピペで動く!サンプルEAコード
それでは、実際に動かして試せるサンプルコードを紹介します。
このコードは、「EAをチャートにセットした瞬間に、0.1ロットの成行買い注文を1回だけ出す」というシンプルなEAテンプレートです。
メタエディタを開き、新規作成したEAテンプレートに以下のコードをそのまま貼り付けてコンパイル(F7)してみてください。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
//+------------------------------------------------------------------+ //| SimpleOrder.mq5| //| 潤奈FX | //+------------------------------------------------------------------+ #property copyright "潤奈FX" #property link "https://zyunafx.com" #property version "1.00" // --- ステップ①:ライブラリのインクルード --- #include <Trade\Trade.mqh> // --- ステップ②:CTradeオブジェクトの宣言 --- CTrade trade; // 入力パラメータ(設定画面で変更可能) input int MagicNumber = 888888; // マジックナンバー input int Slippage = 100; // 許容スリッページ (ポイント換算) // 注文が重複しないための制御フラグ bool isOrdered = false; //+------------------------------------------------------------------+ //| 初期化関数 | //+------------------------------------------------------------------+ int OnInit() { // --- 重要:注文の初期設定を設定する --- trade.SetExpertMagicNumber(MagicNumber); // EA個別の識別番号を設定 trade.SetDeviationInPoints(Slippage); // 許容スリッページを設定 Print("EAが起動しました。"); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| 後片付け関数 | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { Print("EAが停止しました。"); } //+------------------------------------------------------------------+ //| チック毎の処理関数 | //+------------------------------------------------------------------+ void OnTick() { // まだ注文を出していない場合のみ実行 if(isOrdered == false) { Print("成行買い注文を送信します..."); // --- ステップ③:注文の実行 (0.1ロット成行買い) --- if(trade.Buy(0.1)) { Print("注文が成功しました!"); isOrdered = true; // 注文完了フラグを立てる } else { // 注文が何らかの理由で失敗した場合 Print("注文失敗。エラーコード: ", trade.ResultRetcode()); } } } //+------------------------------------------------------------------+ |
4. プロっぽく制御するための超重要設定(マジックナンバーとスリッページ)
サンプルコードの OnInit() 内で登場した以下の記述は、実際のEA運用において非常に重要な初期設定です。
|
1 2 |
trade.SetExpertMagicNumber(MagicNumber); // マジックナンバーの設定 trade.SetDeviationInPoints(Slippage); // スリッページの設定 |
- マジックナンバー (
SetExpertMagicNumber)
他のEAや手動トレードの注文と混ざらないようにするための「EAの識別ID」です。これを設定しておかないと、EAが他の注文を誤って決済してしまうなどのトラブルにつながります。 - スリッページ (
SetDeviationInPoints)
急激な値動きの際に、発注した価格と実際の約定価格がどれくらいズレても許容するかを設定します。MQL5ではポイント単位(1pips=10ポイント)で指定するため、100と指定すると10pipsまでのズレを許容することになります。
これらは、trade.Buy などを実行する前に、必ず OnInit() の中で1度設定しておくのがMQL5のベストプラクティスです。
5. まとめ&次のステップ
今回は、MQL5での注文を劇的に簡単にしてくれる CTrade ライブラリの使い方について解説しました。
- MQL5の生コードでの発注は非常に複雑だが、標準ライブラリ
CTradeを使えば1行で書ける。 #include <Trade\Trade.mqh>を忘れずにインクルードする。OnInit()内で マジックナンバー と スリッページ を必ず設定しておく。
無事に注文を出せるようになったら、次は「注文したポジションを自動で決済(クローズ)する方法」を学んでいきましょう!MQL5では、決済処理もMQL4とは全く異なるアプローチが必要になります。
今回のコードで注文が通らない場合や、エラーコードの意味が分からない場合は、YouTubeのコメント欄やXでお気軽にご連絡くださいね!


コメント