【MQL4】注文を出す関数について調べてみた【OrderSend】
今回は、EAで注文を出すMQL4の関数「OrderSend()」について調べてみました。
OrderSend() 関数は、以下の11個の引数をとります。括弧内に引数の「型」を書いています。
- symbol(string)
- cmd(int)
- volume(double)
- price(double)
- slippage(int)
- stoploss(double)
- takeprofit(double)
- comment(string)
- magic(int)
- expiration(datetime)
- arrow_color(color)
各引数について簡単に説明していきます。
Contents
引数
① symbol(string)
symbol には「通貨ペア」を指定します。
例えばドル円の場合「“USDJPY”」とします。
② cmd(int)
cmd には「注文方法」を指定します。
例えば、成行買いの場合は「OP_BUY」、成行売りの場合は「OP_SELL」とします。
③ volume(double)
volume には「ロット数」を指定します。
1ロットが10万通貨なので、例えば、1万通貨注文する場合「0.1」とします。
④ price(double)
price には「値段」を指定します。
例えば、買値の場合「Ask」、売値の場合「Bid」とします。
⑤ slippage(int)
slippage には「許容スリッページ」を設定します。
これは、成行注文時のみ設定する必要があります。
「要求された注文のオープン価格と市場価格との最大許容偏差(ポイント)」などとなっていますが、ようするに、成行注文時に(ネットワークの遅延などにより)どれだけ価格の変動を許容するかを設定する、と解釈しています。(私はなんとなくしか理解していません。。)
⑥ stoploss(double)
stoploss には「損切り価格」を設定します。
※注意しないといけないのは、損切価格なので、価格の下落幅(例えば「-1.0(円)」とか)ではなく、価格そのもの(例えば「110.0(円)」とか)を設定します。
私は、間違って価格幅を設定していたため、「130」エラーが出て、EAの注文がされないということがありました。(だいぶハマってしまいました。。)
ちなみに、「130」エラーコードは「ERR_INVALID_STOPS」で、日本語だと「無効なストップ値」というエラーになります。
また、損切しない場合は「0」を設定します。
⑦ takeprofit(double)
takeprofit には「利確価格」を設定します。
利益確定するときの価格を「円」で指定するので、こちらも stoploss と同様に「価格そのもの」を設定しないと「130」エラーになってしまいます。
⑧ comment(string)
comment には「コメント」を文字列で設定します。
そんなに使う必要ないかと思います。
comment は省略可能で、省略した場合「NULL」が自動的に入ります。
⑨ magic(int)
magic には「マジックナンバー」を設定します。
これは、複数の EA を同時に動かす場合、各プログラムを識別するために必要となってきます。
magic は省略可能で、省略した場合「0」が自動的に入ります。
⑩ expiration(datetime)
expiration には注文の「有効期限」を設定します。
有効期限を設定しない(無期限)場合は、「0」とします。
expiration は省略可能で、省略した場合「0」が自動的に入り「有効期限なし」となります。
⑪ arrow_color(color)
arrow_color には、注文時の「矢印の色」を設定します。
注文時にチャート上に表示される矢印の色です。
青色の場合「clrBlue」、赤色の場合「clrRed」とします。
arrow_color は省略可能で、省略した場合「CLR_NONE」が自動的に入ります。
戻り値
OrderSend 関数は、戻り値として、チケット番号を int 型で返します。
何らかのエラーで注文が正常に行われなかった場合は「-1」が返ってきます。
もし「-1」が返ってきたら、「GetLastError()」関数を使って、エラーコードを抽出し、エラーの原因を探る必要があります。
注文例
では最後に、実際に MQL4 での OrderSend 関数を使った注文コードを作成してみます。
1 2 3 4 5 6 7 8 9 10 11 12 |
extern double TakeProfit = 0.01; // 利確:1.0銭 extern double Lots = 0.1; // 1万通貨 //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- int ticket = OrderSend("USDJPY", OP_BUY, Lots, Ask, 10, 0, (Ask+TakeProfit)); } //+------------------------------------------------------------------+ |
これは、利確とロット数を OnTick() の外で設定してます。
また、省略できる引数については省略しています。
ただし、このままだと価格が更新される(OnTick() が呼ばれる)たびに注文が実行されてしまいますので注意して下さい。
関連記事
-
【MT4】ノートPCを閉じてもEAを実行させ続ける方法【Windows10】
今回は、MT4上でノートPCを閉じてもEAを実行させ続ける方法について紹介します。 通常、ノー
-
【MT4】チャート上に日本時間を表示させる方法【JPN_Time_SubZero】
今回は、MT4(メタトレーダー4)でチャート上に日本時間を表示させる方法について紹介します。
-
【MT4】デモ口座で無効な口座になっているときの対処方法。
FXツールのMetaTrader4(メタトレーダー4)のデモ口座で色々と試そうとしていたら、
-
【MT4】PCが再起動しても自動的に起動させる方法【FX自動売買】
今回は、FX 自動売買用のツールの MT4 で、実行しているPCが再起動しても、MT4 を自動的に起
-
【楽天MT4】ドル円のスワップとスプレッドについて調べてみた。
楽天MT4で、ドル円(USD/JPY)のスワップポイントとスプレッドについて調べてみました。
-
【MT4】複数口座を同時に起動させる方法【FX・CFD】
今回は、MT4(メタトレーダー4)で複数口座を同時にログインし、起動させる方法について紹介します。
-
【MQL4】スプレッドを取得する方法【MT4】
今回は、MQL4 で対象通貨ペアのスプレッドを取得する方法について紹介します。 スプレッドを取
-
【MT4】日付と時間を指定してPCを自動起動させる方法【DELL】
今回は、日付と時間を指定してPCを自動的に起動させる方法について紹介します。 なぜPCの自動起
-
【楽天CFD】取引口座を開設してみた【MT4】
今回は、楽天CFDの取引口座(本番口座)の開設方法について紹介します。 以前、楽天CFDのデモ
-
【楽天CFD】デモ口座を開設してみた【MT4】
CFDとは、Contract For Difference の略で、差金決済取引(さきんけっさいとり