MT4 で指定したシンボル(USDJPY などの通貨ペア)に対して、成行注文や指値注文を出すには OrderSend 関数 を使用します。
MT4 バージョンと、MT5 バージョンでは関数のパラメータや戻り値が異なるので注意してください。
多くの環境では、まだ MT4 が使われているので、ここでは MT4 バージョンの OrderSend 関数の使い方を説明します。
OrderSend 関数 (MT4) の使い方
int OrderSend(
string symbol, // symbol
int cmd, // operation
double volume, // volume
double price, // price
int slippage, // slippage
double stoploss, // stop loss
double takeprofit, // take profit
string comment=NULL, // comment
int magic=0, // magic number
datetime expiration=0, // pending order expiration
color arrow_color=clrNONE // color
)OrderSend のパラメーター
symbol… 注文する通貨ペアのシンボル名。例えば、"USDJPY"などを指定します。選択中のチャートのシンボルを使いたい場合は、Symbol()を指定すれば OK です。cmd… 注文の種類 (Order Properties) を指定します。OP_BUY… 成行買いOP_SELL… 成行売りOP_BUYLIMIT… 指値買い(今より安くなったら買う)OP_SELLLIMIT… 指値売り(今より高くなったら売る)OP_BUYSTOP… 逆指値買い(今より高くなったら買う)OP_SELLSTOP… 逆指値売り(今より安くなったら売る)
volume… ロット数。多くの場合0.1で 1 万通貨です。price… 価格。例えば、1 ドル 110.5 円で売買するなら110.5と指定します。スリッページを考慮するため、成行注文の場合でも指定する必要があります。slippage… 最大許容スリッページ(ポイント)。priceで指定した価格から、どれだけずれて約定してもいいかをポイントで指定します。例えば、USDJPY が小数点以下 3 桁の価格まで表示される FX 会社の場合、1ポイント=0.001円 になります。プログラムで 1 ポイントがいくらかを調べる こともできます。stoploss… 損切り価格(決済逆指値)。設定しない場合は 0。takeprofit… 利食い価格(決済指値)。設定しない場合は 0。comment=NULL… 注文のコメント。magic=0… 注文のマジックナンバー。expiration=0… 注文の有効期限。待機注文(指値/逆指値)のときのみ有効です。arrow_color=clrNONE… 矢印の色。指定すると、ポジションをオープンしたときにチャート上に矢印が表示されます。
OrderSend 戻り値
OrderSend 関数は、注文に成功するとチケット番号を返します。注文に失敗すると、-1 を返します。
-1 が返された場合は、GetLastError() を使ってエラーの原因を調べることができます。
OrderSend による注文の例
下記のサンプルスクリプトを実行すると、カレントチャートの通貨ペアを 0.01 ロット(USDJPY であれば通常 1000 通貨)成行注文で購入します。
#property strict
#property show_confirm // 実行前に確認ダイアログを表示
#include <stdlib.mqh> // ErrorDescription 関数のため
#define MShowLastError() \
MessageBox(StringFormat("ERROR in %s: %s", \
__FUNCTION__, ErrorDescription(GetLastError())));
// スクリプトのエントリーポイント
void OnStart() {
int ticket = OrderSend(
Symbol(), // 現在の通貨
OP_BUY, // 成行買い
0.01, // ロット数は 0.01 ロット
Ask, // 現在の提示価格で買う
1, // 最大許容スリッページは 1 ポイント
0, // 損切りレベルは設定しない (stoploss=0)
0 // 利食いレベルは設定しない (takeprofit=0)
);
if (ticket == -1) {
MShowLastError();
} else {
PrintFormat("Ticket = %d", ticket);
}
}関連記事
- MetaTrader/MQL: アカウント情報(口座情報)を取得する (AccountInfo*) (MT5)
- MetaTrader/MQL: GitHub で MetaTrader 用のプログラムを管理する
- MetaTrader/MQL: 基本データ型一覧
- MetaTrader/MQL: EA のマジックナンバーについて理解する
- MetaTrader/MQL5: シンボル名を取得する (Symbol, ChartSymbol, SymbolsTotal, SymbolName)
- MetaTrader/MQL: 表示しているチャートを列挙する (ChartFirst, ChartNext)
- MetaTrader/MQL: CTrade クラスで注文を出す (MT5)