EAで売買注文を出すコード OrderSend()

EA(エキスパートアドバイザー)を作るにあったって、何はなくとも売買注文を出さなければ!そんなわけで、 OrderSend() をコーディング。

MQL5 は、オブジェクト指向プログラミング(OOP)スタイル。MQL4で売買注文を出すコードとお作法が少々異なります。

OrderSend() 成行の買い注文

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);で済んでたことを思うと、エラーチェックのPrint文があるとはいえ明らかにコード量が多いですね。。

取引リクエスト構造体

構造体とは、void型を除いた任意タイプの要素集合のこと。

MqlTradeRequest req で宣言後、各種パラメータを代入。OrderSend() を実行。

取引リザルト構造体

MqlTradeResult は、取引操作結果の詳細を表す。取引サーバーでブローカーが取引リクエストをどのように扱ったかが分かる。「約定したよ。」とか「無効だよ。」「注文チケットは〇〇だよ。」などなど。if 文でチェックしているのは、OrderSend() そのものが MT5 で実行できたかどうか。