サンプルコード付き!OrderSend()関数で新規注文の送信方法(MQL4)

OrderSend()関数

関連記事:決済関数OrderClose()

注文を送信する関数です。

書式

int OrderSend(
	string symbol, //通貨ペア
	int cmd,       //注文方法
	double volume, //ロットサイズ
	double price,  //注文価格
	int slippage,  //許容スリッページ
	double stoploss,   //損切り価格
	double takeprofit, //利益確定価格
	string comment,    //オーダーコメント
	int magic,         //EAの識別番号(マジックナンバー)
	datetime expiration, //待機注文の有効期限
	color arrow_color    //チャート上のオブジェクトの色
);

引数(テンプレート)

※このままコピーすれば動きます。
引数詳細は下記のリンクをご覧ください。
リンク:引数詳細

int magic = 12345;

int Ticket = OrderSend(
	Symbol(), //開いているチャート且つ選択している通貨ペアを取得
	OP_SELL,   //注文方法 成行売り注文,詳しくはOP_SELL
	MarketInfo(Symbol(),MODE_MAXLOT), //業者の最大ロット
	Ask,       //現在の買値で注文
	30,  //30pointの許容スリッページ
	0,   //損切り価格を指定しない
	0,   //利益確定価格を指定しない
	NULL,      //コメントはなし
	magic,     //EAの識別番号
	0,         //有効期限なし
	clrNONE    //オブジェクトを表示しない。省略可能
);

関連記事一覧:関数Symbol(),関数MarketInfo(),関数Print(),変数_Point,定数OP_BUY

戻り値(返り値)

注文が失敗した場合は-1が返されます。

//注文が失敗した場合
if( Ticket == -1 ){
	PrintGetLastError() );  //エラー番号を出力
//注文が成功した場合
}else{
	Print"注文完了" ); //変数Ticketにはチケット番号が格納される。
}

関連記事:関数OrderClose()

サンプルコード

//USDJPY(アメリカドル/円ペア)で30分足の期間14で終わり値のRSI
double previewRSI=iRSI("USDJPY",PERIOD_M30,14,PRICE_CLOSE,1);//ローソク足1本前のRSIの値を取得
double currentRSI=iRSI("USDJPY",PERIOD_M30,14,PRICE_CLOSE,0);//現在のRSIの値を取得

//マジックナンバーを定義
int magic = 12345;

//1本前のRSIが30以下で現在のRSIが30以上の時の動作
if(previewRSI<30 && currentRSI>30){
	
	//買い注文を送信する
	int Ticket = OrderSend(
	   	Symbol(), //開いているチャート且つ選択している通貨ペアを取得
	   	OP_BUY,   //成行買い注文 ,詳しくはOP_BUY
	   	MarketInfo(Symbol(),MODE_MINLOT), //FX業者の最小ロット
	   	Bid,       //現在の売値で注文する
	   	10,  //10pointの許容スリッページ 詳しくは_Point
	   	0,   //損切り価格を指定しない
	   	0,   //利益確定価格を指定しない
	   	NULL,      //コメントはなし
	   	magic,     //EAの識別番号
	   	0,         //有効期限なし
	   	clrNONE    //矢印オブジェクトの色を表示しない。省略可能
	   );
	
	//-1が返ってきたらエラー。注文失敗
	if( Ticket == -1 ){
   		Print( GetLastError() );  //エラー番号を出力する
	}
}

関連記事一覧:関数iRSI(),関数OrderClose()

損切りや利益確定を指定する場合

_Point = 0.001 又は _Point = 0.00001 の場合 500*_Pointは50pipsになる
_Point = 0.01 又は _Point = 0.0001 の場合 500*_Pointは500pipsになる
詳しくは下記の記事を参考にしてください。

関連記事:定義済み変数_Point

成行買注文

_Pointが0.001の場合

//利益確定価格の指定(現在の買値から50pips足した値段)
takeprofit = Ask+500*_Point;
//損失確定価格の指定(現在の買値から50pips引いた値段)
stoploss   = Ask-500*_Point;

_Pointが0.01の場合

//利益確定価格の指定(現在の買値から40pips足した値段)
takeprofit = Ask+40*_Point;
//損失確定価格の指定(現在の買値から40pips引いた値段)
stoploss   = Ask-40*_Point;

成行売注文

_Pointが0.001の場合

//利益確定価格の指定(現在の売値から30pips引いた値段)
takeprofit = Bid - 300 * _Point;  
//損失確定価格の指定(現在の売値から30pips足した値段)
stoploss   = Bid + 300 * _Point;

_Pointが0.01の場合

//利益確定価格の指定(現在の売値から20pips引いた値段)
takeprofit = Bid - 20 * _Point;  
//損失確定価格の指定(現在の売値から20pips足した値段)
stoploss   = Bid + 20 * _Point;

関連記事一覧:↓
関連記事一覧:ストップレベルと比較して返して注文エラーを防ごう!!自作関数(MQ4)
MQL4エラー130を即座に解決するやり方
MQL4エラー4108を防ぐために理解しておきたい注文時のことについて
ORDERMODIFY使用時に出るエラーを防ぐ条件式について

引数詳細

第一引数:string symbol【通貨ペア】

第一引数には通貨ペアを指定します。
通常、指定はSymbol()を使って開いて選択している通貨ペアを取得します。
Symbol()関数を使わない場合は下記のように指定します。

Ordersend("USDJPY",...);

FX業者さんによってはUSDJPYのあとに文字列が付いている場合があります。
例えばFXTFの場合は通貨ペアのあとに-cdと付いています。

"USDJPY-cd"
//関数に記述する際も正確に入力しなくてはいけません。
Ordersend("USDJPY-cd",...);

そのため、通常はSymbol()を使うほうが良いです。

第二引数:int cmd【注文方法】

第二引数には注文タイプを指定します。

注文種類の定数リスト

  • OP_BUY //買いの成行注文
  • OP_SELL //売りの成行注文
  • OP_BUYLIMIT //買いの指値注文
  • OP_SELLLIMIT //売りの指値注文
  • OP_BUYSTOP //買いの逆指値注文
  • OP_SELLSTOP //売りの逆指値注文

詳しくは下記のリンクをご覧ください。
ページリンク:EAの注文方法の種類を指定する定数(指値や逆指値)

第三引数:double volume【ロットサイズ】

第三引数にはロットサイズを指定します。
FX業者さんによって多少違いますが、
1Lotが10万通貨です。

volume = 1;    //10万通貨
volume = 0.1;  //1万通貨
volume = 0.01; //1千通貨

違う例を挙げておくとXMのマイクロロットは
1Lotが1000通貨です。

volume = 1;    //1千通貨
volume = 0.1;  //100通貨
volume = 0.01; //10通貨

※1通貨とはUSDJPYの場合、1ドルが1通貨
業者の最小ロット、最大ロットなどの取得は下記のリンクをご覧ください。
関連記事:いろんな情報を取得できるMARKETINFO()関数の使い方(MQL4)

第四引数:double price【注文価格】

第四引数には注文価格を指定します。
成行き注文には
OP_BUY  ⇒成行き買い注文には定義済み変数Askを指定します。Askは買いの現在価格を表しています。
OP_SELL ⇒成行き買い注文には定義済み変数Bidを指定します。Bidは売りの現在価格を表しています。

下記の関数でも現在価格を取得できます。
関連記事:いろんな情報を取得できるMARKETINFO()関数の使い方(MQL4)

待機注文には
OP_BUYSTOP  ⇒買いの逆指値注文には現在の通貨ペアの価格より上の価格を指定します。
OP_BUYLIMIT  ⇒買いの指値注文には現在の通貨ペアの価格より下の価格を指定します。
OP_SELLSTOP  ⇒売りの逆指値注文には現在の通貨ペアの価格より下の価格を指定します。
OP_SELLLIMIT ⇒売りの指値注文には現在の通貨ペアの価格より上の価格を指定します。

詳しくは下記のリンクをご覧ください。
ページリンク:EAの注文方法の種類を指定する定数(指値や逆指値)

第五引数:int slippage【許容スリッページ】

第五引数には許容スリッページを指定します。
スリッページとは注文価格が不利な方向にずれても良いpipsを指定します。
あまりにスリッページが小さいと注文が約定されないので注意しましょう。
指定はPointですので詳しくは下記のリンクをご覧ください。
最小変動レートを返す 定義済み _POINT変数(MQL4)

第六引数:double stoploss【損失確定価格】

第六引数には損失確定価格を指定します。
買いポジションの場合は約定価格より下に指定
売りポジションの場合は約定価格より上に指定

第七引数:double takeprofit【利益確定価格】

第七引数には利益確定価格を指定します。
買いポジションの場合は約定価格より上に指定
売りポジションの場合は約定価格より下に指定

第八引数:string comment【コメント】

第八引数にはコメントを指定します。
コメントは文字列なら何でも指定できます。
例えば

comment = "コメント";
//""で囲めば数字でも問題ありません。
comment = "1234";

第九引数:int magic【EAの識別番号】

第九引数にはEAの識別番号を指定します。
指定は番号ですので数字に限ります。

magic = 12345678;

型には格納できる範囲があり。マジックナンバーはint型なので
-2147483648~2147483647の範囲に限られます。
つまり指定限界

//この数より下に指定できない
magic = -2147483648;
//この数より上に指定できない
magic = 2147483647;
  • char //1byte(8bit)で表現できる数は-128~127
  • short //2byte(16bit)で表現できる数は-32768~32767
  • int //4byte(32bit)で表現できる数は-2147483648~2147483647
  • long //8byte(64bit)で表現できる数は-9223372036854775808 ~9223372036854775807

第十引数:datetime expiration【有効期限】

第十引数には注文の有効期限を指定します。
こちらの有効期限はサーバー時刻での指定です。パソコンに表示されている時間ではありません。
サーバー時刻とはメタトレーダー4の気配値表示の横に表示されている時刻です。
過去の時刻を指定しても無効になります。
成行き注文に指定しても無効になります。
待機注文のみ有効期限を指定できます。
OP_BUYSTOP(逆指値注文),OP_BUYLIMIT(指値注文),OP_SELLSTOP(逆指値注文),OP_SELLLIMIT(指値注文)のみに有効です。

詳しくは下記のリンクをご覧ください。
関連記事:MQLの時間や日付を取得する関数の一覧【INT?STRING?DATETIME?】【MQL4】

第十一引数:color arrow_color【チャート上のオブジェクトの色】

第十一引数には注文の約定した位置を表す矢印等のオブジェクトの色を指定します。
何も指定しなくても問題ありません。
またはclrNONEを指定します。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする