RSIの値を取得するiRSI()関数の内容(MQL4)

iRSI関数()

書式

double  iRSI(
	string       symbol,  // 通貨ペア
	int          timeframe,  // 時間足
	int          period,     // 平均期間
	int          applied_price, // 適用価格
	int          shift  // シフト(現在から過去まで指定できる)
	);

戻り値(返り値)

//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の値を取得
double currentRSI=iRSI(
	"USDJPY",  //通貨ペア
	PERIOD_M30,  //時間足
	14,  //期間平均の期間の指定,30分足、終値で14ならば、現在から14本分の足の終値の平均値
	PRICE_CLOSE,  //終値
	0		//シフト:0が現在,1が1本前のローソク足の値を取得
);

定数PERIOD_M30,定数PRICE_CLOSE

サンプルコード(コピペで動きます)

//グローバル変数
extern int MagicNumber = 12345;
//売チケット
int sellTicket = 0;
//買チケット
int buyTicket = 0;


void OnTick(){
	//iRSIを定義
	double previewRSI = iRSI(Symbol(),PERIOD_M30,14,PRICE_CLOSE,3);//ローソク足3本前のRSIの値を取得
	double currentRSI = iRSI(Symbol(),PERIOD_M30,14,PRICE_CLOSE,0);//現在のRSIの値を取得
	int slippage = 30;  //スリッページ30point


	//買エントリー
	//3本前のRSIが30以下で現在のRSIが30以上の時
	if( previewRSI<30 && currentRSI>30 &&  buyTicket == 0 ){
		buyTicket = OrderSend(
					Symbol(),OP_BUY,MarketInfo(Symbol(),MODE_MINLOT),
					MarketInfo(Symbol(),MODE_ASK),slippage,0,0,"OP_BUY",MagicNumber,
					0,clrNONE
				);
					
		if( buyTicket == -1 ){
			Print( GetLastError() );  //エラー内容を出力
		}
	}

	//売エントリー
	//3本前のRSIが70以上で現在のRSIが70以下の時
	if( previewRSI>70 && currentRSI<70 &&  sellTicket == 0 ){
		sellTicket = OrderSend(
					Symbol(),OP_SELL,MarketInfo(Symbol(),MODE_MINLOT),
					MarketInfo(Symbol(),MODE_BID),slippage,0,0,"OP_SELL",MagicNumber,
					0,clrNONE
				);
					
		if( sellTicket == -1 ){
			Print( GetLastError() );  //エラー内容を出力
		}
	}

	//買い決済
	//3本前のRSIが70以上で現在のRSIが70以下の時
	if( previewRSI>70 && currentRSI<70 ){
		if(OrderSelect(buyTicket,SELECT_BY_TICKET,MODE_TRADES)){
			bool res = OrderClose(buyTicket,OrderLots(),Bid,slippage,clrNONE);
			if( res == false ){
				Print( GetLastError() );  //エラー内容を出力
			}
		}
		buyTicket=0; //チケット初期化
	}

	//売り決済
	//3本前のRSIが30以下で現在のRSIが30以上の時
	if( previewRSI<30 && currentRSI>30 ){
		if( OrderSelect(sellTicket,SELECT_BY_TICKET,MODE_TRADES) ){
			bool res = OrderClose(sellTicket,OrderLots(),Ask,slippage,clrNONE);
			if( res == false ){
				Print( GetLastError() );  //エラー内容を出力
			}
		}
		sellTicket=0; //チケット初期化
	}

}

変数extern,関数OrderSelect(),関数OrderClose(),関数MarketInfo(),関数Symbol()

シェアする

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

フォローする