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);
}
|
Originally posted 2019-08-12 13:28:32.