OrderSend() 成行の買い注文
MQL 5 は、オブジェクト指向プログラミング(OOP)スタイルです。MQL4で売買注文を出すコードとお作法が少々異なります。
void OnTick(){
MqlTradeRequest req; // 取引リクエスト
MqlTradeResult res; // 取引結果
req.action=TRADE_ACTION_DEAL; // 成行注文の即時実行
req.magic=12345; // マジックナンバー
req.symbol="USDJPY"; // 銘柄名
req.volume=0.1; // ロット
req.price=SymbolInfoDouble("USDJPY",SYMBOL_ASK); // 取引価格 ASK
req.sl=0; // ストップロス
req.tp=0; // テイクプロフィット
req.deviation=5; // ポイント指定の最大価格偏差
req.type=ORDER_TYPE_BUY; // 成行買い注文
if(!OrderSend(req,res))
Print("OrderSend error ",_LastError);
PrintFormat("retcode=%u deal=%I64u order=%I64u",res.retcode,res.deal,res.order);
}
MQL4 では、OrderSend("USDJPY",OP_BUY,0.1,Ask,3,0,0);
で済んでたことを思うと、明らかにコード量が多いですね。MQL4 ならエラーチェックの Print くらいの文量です。
取引リクエスト構造体
構造体とは、void型を除いた任意タイプの要素集合のことです。
MqlTradeRequest req
で宣言後、各種パラメータを代入します。OrderSend()
を実行します。
取引リザルト構造体
MqlTradeResult
は、取引操作結果の詳細を表します。取引サーバーでブローカーが取引リクエストをどのように扱ったかが分かります。「約定したよ。」とか「無効だよ。」「注文チケットは〇〇だよ。」などなど。if 文でチェックしているのは、OrderSend()
そのものが MT5 で実行できたかどうかです。注文がディーラーに通ったかどうか、ではありません。