BBR2_Expert.mq4

#include "../Libraries/LibEA4.mqh"
extern int bb_period = 38; //ボリンジャーバンドの周期
extern double bb_deviation = 2.0; //ボリンジャーバンドの偏差
extern int rsi_period = 22; //RSIの周期
extern int StartHour = 14; //開始時刻(時)
extern int StartMin = 30; //開始時刻(分)
extern int TradeMin = 360; //フィルタ期間(分)
extern double Lots = 0.1; //売買ロット数
//ティック時実行関数
void OnTick()
{
int sig_entry = EntrySignal(); //仕掛けシグナル
int sig_filter = FilterSignal(sig_entry); //タイムフィルタ
//成行売買
MyOrderSendMarket(sig_filter, sig_entry, Lots);
}
//仕掛けシグナル関数
int EntrySignal()
{
//1本前のBBとRSI
double bbU_value = iBands(_Symbol,0,bb_period,bb_deviation,0,PRICE_CLOSE,MODE_UPPER,1);
double bbL_value = iBands(_Symbol,0,bb_period,bb_deviation,0,PRICE_CLOSE,MODE_LOWER,1);
double rsi_value = iRSI(_Symbol,0,rsi_period,PRICE_CLOSE,1);
int ret = 0; //シグナルの初期化
//買いシグナル
if(bbU_value > Low[0] && rsi_value < 30) ret = 1;
//売りシグナル
if(bbL_value < High[0] && rsi_value > 70) ret = -1;
return ret; //シグナルの出力
}
//フィルタ関数
int FilterSignal(int signal)
{
//開始時刻の作成
MqlDateTime dt;
TimeToStruct(TimeCurrent(), dt);
dt.hour = StartHour;
dt.min = StartMin;
dt.sec = 0;
datetime StartTime = StructToTime(dt);
int ret = 0; //シグナルの初期化
//売買シグナルのフィルタ
if(TimeCurrent() >= StartTime && TimeCurrent() < StartTime+TradeMin*60) ret = signal;
return ret; //シグナルの出力
}