MQL5.comを確認してみよう! |
MQL5を使ってプログラムを作成するにあたって、MQL5.comというコミュニティサイトをご紹介します。特にドキュメントのページにはMQL5の関数ドキュメンテーションは最も頻繁に利用されるページでしょう。
また、下記のようにMQL5を作成するにあたって有効な情報が集約されています。
ドキュメント : https://www.mql5.com/ja/docs |
MQL5言語に関する公式リファレンスです。MQL5の関数、構文と簡単なコーディングの例を確認できます。 |
コードベース : https://www.mql5.com/ja/code |
無料のサンプルEA、インディケーター、スクリプトダウンロードでき、先輩たちが作ったプログラムをサンプルとして参考できます。 |
フォーラム : https://www.mql5.com/ja/forum |
世界中のトレーダーと知識を共有し、情報交換の場です。困った時に、お互いに助け合いの場でもあります。過去の書き込みを調べたら、解決策が出てくるかもしれません。 |
記事 : https://www.mql5.com/ja/articles |
プロのトレーダーによって投稿された研究記事からテクニカル指標やEAを作成する方法まで学ぶことができます。記事はカテゴリ毎に分類されており、様々な有益な情報をすばやく見つけることができます。 |
MQL5で取引操作をしてみよう! |
それでは早速、コーディングで注文してみましょう。
新規注文と決済注文を一回ずつやります。
USDJPY を1 ロット成行買いで新規注文する場合(売 / 買)
MQL4ではOrderSend関数を使って、ロット数や注文タイプなど、色々な引数を入れていましたよね。
MQL5では 、MqlTradeRequest(取引要求)とMqlTradeResult(取引結果)という二つの構造体がOrderSend関数の引数になります。ロット数、注文タイプ、約定したチケット番号などは、全てこの二つの構造体の要素になっています。
※構造体の全ての要素はリンク先で確認して下さい。
MqlTradeRequest
MqlTradeResult
1 2 3 4 |
bool OrderSend( MqlTradeRequest& request, // 問の構造体 MqlTradeResult& result // 答えの構造体 ); |
今回は次のような 内容をMqlTradeRequest(取引要求)に設定します。
- action : 注文実行タイプの設定 : (成行 / 注文 / 変更 / 削除)
- symbol : 銘柄
- volume : 取引ロット
- type : Buy / Sell
- price : 注文価格
- deviation : スリッページ許容幅
実行結果はMqlTradeRequest(取引結果)に格納されるので、確認できます。
- retcode : 取引サーバのリターンコード
- deal : 約定チケット(サーバー約定処理された場合)
- order : 注文チケット (サーバー約定処理された場合)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
//+------------------------------------------------------------------+ //| 買いポジションを持つ | //+------------------------------------------------------------------+ void OnStart(void) { //--- リクエストと結果の宣言と初期化 MqlTradeRequest request={0}; MqlTradeResult result={0}; //--- リクエストのパラメータ request.action =TRADE_ACTION_DEAL; // 取引操作タイプ request.symbol =Symbol(); // シンボル request.volume =0.1; // 0.1ロットのボリューム request.type =ORDER_TYPE_BUY; // 注文タイプ request.price =SymbolInfoDouble(Symbol(),SYMBOL_ASK); // 発注価格 request.deviation=5; // 価格からの許容偏差 request.magic =EXPERT_MAGIC; // 注文のMagicNumber //--- リクエストの送信 if(!OrderSend(request,result)) PrintFormat("OrderSend error %d",GetLastError()); // リクエストの送信が失敗した場合、エラーコードを出力する //--- 操作についての情報 PrintFormat("retcode=%u deal=%I64u order=%I64u",result.retcode,result.deal,result.order); } |
※注文タイプによって使う要素が異なります。詳細、その他の要素はMQL5のページを参照して下さい。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
//+------------------------------------------------------------------+ //| 売りポジションを持つ | //+------------------------------------------------------------------+ void OnStart(void) { //--- リクエストと結果の宣言と初期化 MqlTradeRequest request={0}; MqlTradeResult result={0}; //--- リクエストのパラメータ request.action =TRADE_ACTION_DEAL; // 取引操作タイプ request.symbol =Symbol(); // シンボル request.volume =1; // 1 ロットのボリューム request.type =ORDER_TYPE_SELL; // 注文タイプ request.price =SymbolInfoDouble(Symbol(),SYMBOL_BID); // 発注価格 request.deviation=5; // 価格からの許容偏差 request.magic =EXPERT_MAGIC; // 注文のMagicNumber //--- リクエストの送信 if(!OrderSend(request,result)) PrintFormat("OrderSend error %d",GetLastError()); // リクエストの送信が失敗した場合、エラーコードを出力する //--- 操作についての情報 PrintFormat("retcode=%u deal=%I64u order=%I64u",result.retcode,result.deal,result.order); } |
※どのEAが取引したか判別できるように、ユニークなMagicNumberをセットしましょう。
オープンしたポジションの決済注文を出します
ポジションを決済するには、以下の様にコーディングします。
取得した情報をMqlTradeRequestにセットして、OrderSend決済注文を出します。今回は買注文を実行してオープンしたポジションの決済注文を行います。
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 |
//+------------------------------------------------------------------+ //| ポジションを決済 | //+------------------------------------------------------------------+ void OnStart() { //--- リクエストと結果の宣言と初期化 MqlTradeRequest request={0}; MqlTradeResult result={0}; //--- 決済ポジション情報の設定 request.position =301907; // ポジションチケットID request.action =TRADE_ACTION_DEAL; // 取引操作タイプ request.symbol ="USDJPY"; // シンボル request.volume =0.1; // ポジションボリューム request.deviation=5; // 価格からの許容偏差 //-- 買ポジションの場合(反対売買:売) request.price=SymbolInfoDouble(request.symbol,SYMBOL_BID); // 反対売買:売注文:約定価格:Bid request.type =ORDER_TYPE_SELL; //--- 決済注文リクエストの送信 if(!OrderSend(request,result)) PrintFormat("OrderSend error %d",GetLastError()); // リクエストの送信に失敗した場合、エラーコードを出力 //--- 操作情報 : 処理結果 / 決済取引 Deal ID / 決済ポジションID Order ID PrintFormat("retcode=%u deal=%I64u order=%I64u",result.retcode,result.deal,result.order); } |
MT4 : MQL4とMT5 : MQL5取引に関する関数の違い |
再掲となりますが、MT5ではすべての注文処理が一つの関数に集約されました。 要するに、成行、指値、変更、決済、キャンセルといったリクエストは全てトレーダーから出した「注文」であり、其々「注文」の内容が異なると、MT5で見直した考えです。
MQL5: OrderSend関数に関して
https://www.mql5.com/ja/docs/trading/ordersend
今回使用したサンプルコートは下記のボタンからダウンロードいただけます。
- 投稿タグ
- MQL5