//+------------------------------------------------------------------+ //| 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=140; extern int bolinger_deviation_yellow=2; string b2="Делитель BB"; int yellow_blue_enter=2; // параметр для поиска половины расстояния между желтой и синей линии extern string r1="Фильтр по RSI"; extern int RSIFilter=0; //включаем фильтр по 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=20; extern int stohastic_ur=95; // автоматически вычисляется нижний уровень 100-80. //закрытие по обратному касанию extern string сx="Закрытие между линиями"; extern int close_type=2; // 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=200; extern int InpStopLoss =200; extern int onebuy=1; int okbuy,oksell; int start() { 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_up;} 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(Bid>=enterpriceBuy && !ChPos(1) && RSIFilter==0 && StohasticFilter==0){OpenOrderOnMarket(1,TKP,STP);} if(Ask<=enterpriceSell && !ChPos(0) && RSIFilter==0 && StohasticFilter==0){OpenOrderOnMarket(0,TKP,STP);} if(Bid>=enterpriceBuy && !ChPos(1) && (RSIFilter==1 && rsi>=rsi_ur) && StohasticFilter==0) {OpenOrderOnMarket(1,TKP,STP);} if(Ask<=enterpriceSell && !ChPos(0) && (RSIFilter==1 && rsi<=(100-rsi_ur) ) && StohasticFilter==0){OpenOrderOnMarket(0,TKP,STP);} if(Bid>=enterpriceBuy && !ChPos(1) && RSIFilter==0 && ( StohasticFilter==1 && stohastic>stohastic_ur)) {OpenOrderOnMarket(1,TKP,STP);} if(Ask<=enterpriceSell && !ChPos(0) && RSIFilter==0 && ( StohasticFilter==1 && stohastic<(100-stohastic_ur))){OpenOrderOnMarket(0,TKP,STP);} if(Bid>=enterpriceBuy && !ChPos(1) && (RSIFilter==1 && rsi>=rsi_ur) && (StohasticFilter==1 && stohastic>stohastic_ur) ) {OpenOrderOnMarket(1,TKP,STP);} if(Ask<=enterpriceSell && !ChPos(0) && (RSIFilter==1 && rsi<=(100-rsi_ur)) && (StohasticFilter==1 && stohastic<(100-stohastic_ur) ) ) {OpenOrderOnMarket(0,TKP,STP);} } else{ if(Bid>=ma_line){okbuy=0;} if(Ask<=ma_line){oksell=0;} if(Bid>=enterpriceBuy && oksell==0 && RSIFilter==0 && StohasticFilter==0){oksell=1;OpenOrderOnMarket(1,TKP,STP);} if(Ask<=enterpriceSell && okbuy==0 && RSIFilter==0 && StohasticFilter==0){okbuy=1;OpenOrderOnMarket(0,TKP,STP);} if(Bid>=enterpriceBuy && oksell==0 && (RSIFilter==1 && rsi>=rsi_ur) && StohasticFilter==0) {oksell=1;OpenOrderOnMarket(1,TKP,STP);} if(Ask<=enterpriceSell && okbuy==0 && (RSIFilter==1 && rsi<=(100-rsi_ur) ) && StohasticFilter==0){okbuy=1;OpenOrderOnMarket(0,TKP,STP);} if(Bid>=enterpriceBuy && oksell==0 && RSIFilter==0 && ( StohasticFilter==1 && stohastic>stohastic_ur)) {oksell=1;OpenOrderOnMarket(1,TKP,STP);} if(Ask<=enterpriceSell && okbuy==0 && RSIFilter==0 && ( StohasticFilter==1 && stohastic<(100-stohastic_ur))){okbuy=1;OpenOrderOnMarket(0,TKP,STP);} if(Bid>=enterpriceBuy && oksell==0 && (RSIFilter==1 && rsi>=rsi_ur) && (StohasticFilter==1 && stohastic>stohastic_ur) ) {oksell=1;OpenOrderOnMarket(1,TKP,STP);} if(Ask<=enterpriceSell && okbuy==0 && (RSIFilter==1 && rsi<=(100-rsi_ur)) && (StohasticFilter==1 && stohastic<(100-stohastic_ur) ) ) {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){_OrderClose(0);} if(Ask<=bb_yellow_line_dw){_OrderClose(1);} break; case 4: if(Bid>=bb_blue_line_up){_OrderClose(0);} if(Ask<=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; } //---- введем два условия для включения фильтров по RSI и стохастику //---- 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,NormalizeDouble(sl,Digits),NormalizeDouble(tp,Digits),"72 FORTRADER.RU",EA_Magic,0,Red); 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,NormalizeDouble(sl,Digits),NormalizeDouble(tp,Digits),"72 FORTRADER.RU",EA_Magic,0,Red); if(err<0){Print("OrderSend()- Ошибка OP_SELL. op "+op+" sl "+sl+" tp "+tp+" "+GetLastError());return(-1);} } return(0); } //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+