//+------------------------------------------------------------------+ //| FT_3BB_RSI_Stohastic_MA.mq4.mq4 //| Copyright 2012, FORTRADER.RU, ftyuriy: http://forexsystems.ru/member.php?u=4 //| http://fortrader.ru //+------------------------------------------------------------------+ #property copyright "Copyright 2012, FORTRADER.RU, ftyuriy: http://forexsystems.ru/member.php?u=4" #property link "http://fortrader.ru, 72 выпуск" //параметры для оптимизации extern string b="тип входа"; extern int enter=0; // 0 - между желтой и голубой, 1 - между голубой и красной extern string b1="Параметры BB"; extern int bolinger_per=50; extern int bolinger_deviation_yellow=2; string b2="Делитель BB"; int yellow_blue_enter=2; // параметр для поиска половины расстояния между желтой и синей линии extern string r1="Фильтр по RSI"; extern int RSIFilter=1; //включаем фильтр по RSI extern int rsi_period=8; extern int rsi_ur=70; // автоматически вычисляется нижний уровень 100-80. extern string r2="Фильтр по Stohastic"; extern int StohasticFilter=1; // включаем фильтр по Stohastic-у extern int stohastic_period=14; extern int stohastic_ur=80; // автоматически вычисляется нижний уровень 100-80. //закрытие по обратному касанию extern string сx="Закрытие между линиями"; extern int close_type=0; // 0 - закрываем по средней линии, 1 - закрыть между желтой и голубой, 2 - между голубой и красной , 3 - закрываем по yellow_line, 4 - закрываем по blue_line, 5 - закрываем по red_line. //сдвиг для теста по тикам, для тиков = 0; extern string sf="Для теста по тикам"; extern int shift=1; extern string з2="Стандартные параметры"; extern int EA_Magic=12354; extern double InpLots =0.1; extern int InpTakeProfit=0; extern int InpStopLoss =0; extern int bbenter=1; extern int buy=1; extern int sell=1; extern int onebuy=1; int okbuy,oksell,bars; int start() { Comment("Журнал ForTrader.Ru 72 выпуск"); if( (shift==1 && bars!=Bars) || (shift==0) ){ bars=Bars; double STP = InpTakeProfit; double TKP = InpStopLoss; if(Digits==5 || Digits==3) { STP = STP*10; TKP = TKP*10; } int bolinger_deviation_blue=bolinger_deviation_yellow+(bolinger_deviation_yellow/bolinger_deviation_yellow); int bolinger_deviation_red=bolinger_deviation_yellow*2; //---- получим данные индикаторов double bb_yellow_line_up=iBands(NULL,0,bolinger_per,bolinger_deviation_yellow,0,PRICE_CLOSE,MODE_UPPER,shift); double bb_yellow_line_dw=iBands(NULL,0,bolinger_per,bolinger_deviation_yellow,0,PRICE_CLOSE,MODE_LOWER,shift); double bb_blue_line_up=iBands(NULL,0,bolinger_per,bolinger_deviation_blue,0,PRICE_CLOSE,MODE_UPPER,shift); double bb_blue_line_dw=iBands(NULL,0,bolinger_per,bolinger_deviation_blue,0,PRICE_CLOSE,MODE_LOWER,shift); double bb_red_line_up=iBands(NULL,0,bolinger_per,bolinger_deviation_red,0,PRICE_CLOSE,MODE_UPPER,shift); double bb_red_line_dw=iBands(NULL,0,bolinger_per,bolinger_deviation_red,0,PRICE_CLOSE,MODE_LOWER,shift); double ma_line=iMA(NULL,0,bolinger_per,0,MODE_SMA,PRICE_CLOSE,shift+1); if(RSIFilter) double rsi=iRSI(NULL,0,rsi_period,PRICE_CLOSE,shift); if(StohasticFilter) double stohastic=iStochastic(NULL,0,stohastic_period,3,3,MODE_SMA,0,MODE_MAIN,shift); //---- рассчитаем ценовое значение половины расстояния между желтой и синими линиями входа double enterpriceBuy,enterpriceSell, priceclosebuy,proceclosesell; if(enter==0){//вход между желтой и голубой enterpriceBuy = bb_yellow_line_up+((bb_blue_line_up-bb_yellow_line_up)/2); enterpriceSell = bb_yellow_line_dw-((bb_yellow_line_dw-bb_blue_line_dw)/2);} if(enter==1){//вход между голубой и красной enterpriceBuy = bb_blue_line_up+((bb_red_line_up-bb_blue_line_up)/2); enterpriceSell = bb_blue_line_dw-((bb_blue_line_dw-bb_red_line_dw)/2);} if(enter==2){//вход по желтой линии enterpriceBuy = bb_yellow_line_up; enterpriceSell = bb_yellow_line_dw;} if(enter==3){//вход по голубой линии enterpriceBuy = bb_blue_line_up; enterpriceSell = bb_blue_line_dw;} if(enter==4){//вход по голубой линии enterpriceBuy = bb_red_line_up; enterpriceSell = bb_red_line_dw;} //рассчитаем цены для закрытия между линиями if((close_type==1 && enter==0) || (enter==1 && close_type==2) ){ //уровни закрытия между желтой и синей priceclosebuy=enterpriceSell; proceclosesell=enterpriceBuy; } else{ priceclosebuy= bb_blue_line_dw-((bb_blue_line_dw-bb_red_line_dw)/2); proceclosesell=bb_blue_line_up+((bb_red_line_up-bb_blue_line_up)/2); } if(onebuy){ if(bbenter==0 && !ChPos(1) && RSIFilter==0 && StohasticFilter==0 && sell==1 && timecontrol()==1){OpenOrderOnMarket(1,TKP,STP);} if(bbenter==0 && !ChPos(0) && RSIFilter==0 && StohasticFilter==0 && buy==1 && timecontrol()==1){OpenOrderOnMarket(0,TKP,STP);} if(bbenter==0 && !ChPos(1) && (RSIFilter==1 && rsi>=rsi_ur) && StohasticFilter==0 && sell==1 && timecontrol()==1) {OpenOrderOnMarket(1,TKP,STP);} if(bbenter==0 && !ChPos(0) && (RSIFilter==1 && rsi<=(100-rsi_ur) ) && StohasticFilter==0 && buy==1 && timecontrol()==1){OpenOrderOnMarket(0,TKP,STP);} if(bbenter==0 && !ChPos(1) && RSIFilter==0 && ( StohasticFilter==1 && stohastic>stohastic_ur) && sell==1 && timecontrol()==1) {OpenOrderOnMarket(1,TKP,STP);} if(bbenter==0 && !ChPos(0) && RSIFilter==0 && ( StohasticFilter==1 && stohastic<(100-stohastic_ur)) && buy==1 && timecontrol()==1){OpenOrderOnMarket(0,TKP,STP);} if(bbenter==0 && !ChPos(1) && (RSIFilter==1 && rsi>=rsi_ur) && (StohasticFilter==1 && stohastic>stohastic_ur) && sell==1 && timecontrol()==1) {OpenOrderOnMarket(1,TKP,STP);} if(bbenter==0 && !ChPos(0) && (RSIFilter==1 && rsi<=(100-rsi_ur)) && (StohasticFilter==1 && stohastic<(100-stohastic_ur) ) && buy==1 && timecontrol()==1) {OpenOrderOnMarket(0,TKP,STP);} /*вход с бб*/ if((Bid>=enterpriceBuy && bbenter==1) && !ChPos(1) && RSIFilter==0 && StohasticFilter==0 && sell==1 && timecontrol()==1){OpenOrderOnMarket(1,TKP,STP);} if((Ask<=enterpriceSell && bbenter==1) && !ChPos(0) && RSIFilter==0 && StohasticFilter==0 && buy==1 && timecontrol()==1){OpenOrderOnMarket(0,TKP,STP);} if((Bid>=enterpriceBuy && bbenter==1) && !ChPos(1) && (RSIFilter==1 && rsi>=rsi_ur) && StohasticFilter==0 && sell==1 && timecontrol()==1) {OpenOrderOnMarket(1,TKP,STP);} if((Ask<=enterpriceSell && bbenter==1) && !ChPos(0) && (RSIFilter==1 && rsi<=(100-rsi_ur) ) && StohasticFilter==0 && buy==1 && timecontrol()==1){OpenOrderOnMarket(0,TKP,STP);} if((Bid>=enterpriceBuy && bbenter==1) && !ChPos(1) && RSIFilter==0 && ( StohasticFilter==1 && stohastic>stohastic_ur) && sell==1 && timecontrol()==1) {OpenOrderOnMarket(1,TKP,STP);} if((Ask<=enterpriceSell && bbenter==1) && !ChPos(0) && RSIFilter==0 && ( StohasticFilter==1 && stohastic<(100-stohastic_ur)) && buy==1 && timecontrol()==1){OpenOrderOnMarket(0,TKP,STP);} if((Bid>=enterpriceBuy && bbenter==1) && !ChPos(1) && (RSIFilter==1 && rsi>=rsi_ur) && (StohasticFilter==1 && stohastic>stohastic_ur) && sell==1 && timecontrol()==1) {OpenOrderOnMarket(1,TKP,STP);} if((Ask<=enterpriceSell && bbenter==1) && !ChPos(0) && (RSIFilter==1 && rsi<=(100-rsi_ur)) && (StohasticFilter==1 && stohastic<(100-stohastic_ur) ) && buy==1 && timecontrol()==1) {OpenOrderOnMarket(0,TKP,STP);} } else{ if(Bid>=ma_line){okbuy=0;} if(Ask<=ma_line){oksell=0;} if((Bid>=enterpriceBuy && bbenter==1) && oksell==0 && RSIFilter==0 && StohasticFilter==0 && sell==1 && timecontrol()==1){oksell=1;OpenOrderOnMarket(1,TKP,STP);} if((Ask<=enterpriceSell && bbenter==1) && okbuy==0 && RSIFilter==0 && StohasticFilter==0 && timecontrol()==1){okbuy=1;OpenOrderOnMarket(0,TKP,STP);} if((Bid>=enterpriceBuy && bbenter==1) && oksell==0 && (RSIFilter==1 && rsi>=rsi_ur) && StohasticFilter==0 && sell==1 && timecontrol()==1) {oksell=1;OpenOrderOnMarket(1,TKP,STP);} if((Ask<=enterpriceSell && bbenter==1) && okbuy==0 && (RSIFilter==1 && rsi<=(100-rsi_ur) ) && StohasticFilter==0 && timecontrol()==1){okbuy=1;OpenOrderOnMarket(0,TKP,STP);} if((Bid>=enterpriceBuy && bbenter==1) && oksell==0 && RSIFilter==0 && ( StohasticFilter==1 && stohastic>stohastic_ur) && sell==1 && timecontrol()==1) {oksell=1;OpenOrderOnMarket(1,TKP,STP);} if((Ask<=enterpriceSell && bbenter==1) && okbuy==0 && RSIFilter==0 && ( StohasticFilter==1 && stohastic<(100-stohastic_ur)) && buy==1 && timecontrol()==1){okbuy=1;OpenOrderOnMarket(0,TKP,STP);} if((Bid>=enterpriceBuy && bbenter==1) && oksell==0 && (RSIFilter==1 && rsi>=rsi_ur) && (StohasticFilter==1 && stohastic>stohastic_ur) && sell==1 && timecontrol()==1) {oksell=1;OpenOrderOnMarket(1,TKP,STP);} if((Ask<=enterpriceSell && bbenter==1) && okbuy==0 && (RSIFilter==1 && rsi<=(100-rsi_ur)) && (StohasticFilter==1 && stohastic<(100-stohastic_ur) && timecontrol()==1) && buy==1) {okbuy=1;OpenOrderOnMarket(0,TKP,STP);} /*аа*/ if(bbenter==0 && oksell==0 && RSIFilter==0 && StohasticFilter==0 && timecontrol()==1){oksell=1;OpenOrderOnMarket(1,TKP,STP);} if(bbenter==0 && okbuy==0 && RSIFilter==0 && StohasticFilter==0 && timecontrol()==1){okbuy=1;OpenOrderOnMarket(0,TKP,STP);} if(bbenter==0 && oksell==0 && (RSIFilter==1 && rsi>=rsi_ur) && StohasticFilter==0 && timecontrol()==1) {oksell=1;OpenOrderOnMarket(1,TKP,STP);} if(bbenter==0 && okbuy==0 && (RSIFilter==1 && rsi<=(100-rsi_ur) ) && StohasticFilter==0 && timecontrol()==1){okbuy=1;OpenOrderOnMarket(0,TKP,STP);} if(bbenter==0 && oksell==0 && RSIFilter==0 && ( StohasticFilter==1 && stohastic>stohastic_ur)) {oksell=1;OpenOrderOnMarket(1,TKP,STP);} if(bbenter==0 && okbuy==0 && RSIFilter==0 && ( StohasticFilter==1 && stohastic<(100-stohastic_ur)) && timecontrol()==1){okbuy=1;OpenOrderOnMarket(0,TKP,STP);} if(bbenter==0 && oksell==0 && (RSIFilter==1 && rsi>=rsi_ur) && (StohasticFilter==1 && stohastic>stohastic_ur) && timecontrol()==1) {oksell=1;OpenOrderOnMarket(1,TKP,STP);} if(bbenter==0 && okbuy==0 && (RSIFilter==1 && rsi<=(100-rsi_ur)) && (StohasticFilter==1 && stohastic<(100-stohastic_ur) ) && timecontrol()==1) {okbuy=1;OpenOrderOnMarket(0,TKP,STP);} } //---- введем три услоя для закрытия, или по красной или по желтой или по синей линии switch(close_type) { case 0: if(Bid>=ma_line){_OrderClose(0);} if(Ask<=ma_line){_OrderClose(1);} break; case 1: if(Bid>=proceclosesell){_OrderClose(0);} if(Ask<=priceclosebuy){_OrderClose(1);} break; case 2: if(Bid>=proceclosesell){_OrderClose(0);} if(Ask<=priceclosebuy){_OrderClose(1);} break; case 3: if(Bid>=bb_yellow_line_up-MathAbs(Ask-Bid)){_OrderClose(0);} if(Ask<=bb_yellow_line_dw+MathAbs(Ask-Bid)){_OrderClose(1);} break; case 4: if(High[1]>=bb_blue_line_up){_OrderClose(0);} if(Low[1]<=bb_blue_line_dw){_OrderClose(1);} break; case 5: if(Bid>=bb_red_line_up){_OrderClose(0);} if(Ask<=bb_red_line_dw){_OrderClose(1);} break; case 6: if(RSIFilter==1 && rsi>=rsi_ur) {_OrderClose(0);} if(RSIFilter==1 && rsi<=(100-rsi_ur)){_OrderClose(1);} break; case 7: if(StohasticFilter==1 && stohastic>stohastic_ur){_OrderClose(0);} if(StohasticFilter==1 && stohastic<(100-stohastic_ur)){_OrderClose(1);} break; default: break; } } //---- return(0); } extern int time=0; //1 - включено, 0 - выключено. extern int starttime = 4; extern int stoptime = 9; //Ограничение по времени int timecontrol() {// Подробное описание http://fxnow.ru/blog.php?user=Yuriy&blogentry_id=1 if ( ( (Hour()>=0 && Hour()<=stoptime-1) || (Hour()>=starttime && Hour()<=23)) && starttime>stoptime) { return(1); } if ( (Hour()>=starttime && Hour()<=stoptime-1) && starttime0 }//if(OrderSelect(i }// for( i=1; return(0); } //Закрываем все позиции по типу int CloseAllPos(int type) {//Описание функции: http://fxnow.ru/blog.php?user=Yuriy&blogentry_id=72 int buy=1; int sell=1; int i,b=0;int ordertiket; if(type==1) { while(buy==1) { buy=0; for( i=0;i0){sl=op-slpips*Point;}if(tppips>0){tp=op+tppips*Point;} err=OrderSend(Symbol(),OP_BUY,InpLots,NormalizeDouble(op,Digits),3,0,0,"72 FORTRADER.RU",EA_Magic,0,Red); err=OrderModifyAfterOpen(err,sl,tp); if(err<0){Print("OrderSend()- Ошибка OP_BUY. op "+op+" sl "+sl+" tp "+tp+" "+GetLastError());return(-1);} } if(type==1) { op=Bid;if(slpips>0){sl=op+slpips*Point;}if(tppips>0){tp=op-tppips*Point;} err=OrderSend(Symbol(),OP_SELL,InpLots,NormalizeDouble(op,Digits),3,0,0,"72 FORTRADER.RU",EA_Magic,0,Red); err=OrderModifyAfterOpen(err,sl,tp); if(err<0){Print("OrderSend()- Ошибка OP_SELL. op "+op+" sl "+sl+" tp "+tp+" "+GetLastError());return(-1);} } return(err); } //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+