//+------------------------------------------------------------------+ //| DT-RSI-EXP1.mq4 | //| Copyright © 2005, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "klot" #property link "klot@mail.ru" #define MAGICRSI 54321 //---- input parameters extern int PeriodRSI=47; extern int TimeFrameRSI=15; //------------------------------ extern double TakeProfit = 76; extern double StopLoss = 26; extern double Lots = 0.1; extern double TrailingStop = 0; double BufferRSIUP[500]; double BufferRSIDW[500]; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- Контроль открытых позиций ----- int ticket,cnt; bool sell=false; bool buy=false; if (OrdersTotal()>0) { for(cnt=0;cnt=rsi3) BufferRSIUP[i+2]=rsi2; // Верхушки. RSI поворачивает вниз if (rsi1>rsi2 && rsi2<=rsi3) BufferRSIDW[i+2]=rsi2; // Донышки. RSI поворачивает вверх } //------ Поиск верхушек ------ k=0; for (i=0; i<500; i++) { if (BufferRSIUP[i]>40 && k==0) { vol1=BufferRSIUP[i]; pos1=i; k++;} if (BufferRSIUP[i]>60 && BufferRSIUP[i]>vol1 && k!=0) { vol2=BufferRSIUP[i]; pos2=i; k++;} if (k>1) break; } //----- Поиск минимумов ниже 40 // Если между верхушками есть минимум ниже 40, то линию тренда не строим for (i=0; i1) break; } //----- Поиск максимумов выше 60 // Если между донышками есть максимум больше 60, тогда линию тренда не строим for (i=0; i60) {vol3=0; vol4=0;} } //---------------------------------------------------------------------------------------------------------------+ // ---- Сигналы для входов Buy и Sell double volDW, volDW1, volUP, volUP1; bool sellDW=false,buyUP=false; double rftl0_240, rsi0; rftl0_240=iCustom(NULL,240,"RFTL",0,1); rsi0=iRSI(NULL,TimeFrameRSI,PeriodRSI,PRICE_CLOSE,0); rsi1=iRSI(NULL,TimeFrameRSI,PeriodRSI,PRICE_CLOSE,1); rsi2=iRSI(NULL,TimeFrameRSI,PeriodRSI,PRICE_CLOSE,2); rsi3=iRSI(NULL,TimeFrameRSI,PeriodRSI,PRICE_CLOSE,3); //------------ //------------ рассчет продолжения линии тренда для Sell -------------------- if (vol3!=0 && vol4!=0) { volDW=vol3+(pos3*(vol3-vol4)/(pos4-pos3)); // Значение линии тренда на текущем баре volDW1=vol3+((pos3-1)*(vol3-vol4)/(pos4-pos3)); // Значение линии тренда на прошлом баре } if (volDW!=0 && rsi1volDW1 && rftl0_240>Close[1] && // rsi1rsi3 && /* rsi2<60 && */ rsi2>50 && rsi0>47 && pos2>pos4) sellDW=true; else sellDW=false; // Сигнал Sell //------------ //------------ рассчет продолжения линии тренда для Buy -------------------- if (vol1!=0 && vol2!=0) { volUP=vol1+(pos1*(vol1-vol2)/(pos2-pos1)); // Значение линии тренда на текущем баре volUP1=vol1+((pos1-1)*(vol1-vol2)/(pos2-pos1)); // Значение линии тренда на прошлом баре } if (volUP!=0 && rsi1>volUP && rsi2rsi2 && rsi240 && */ pos4>pos2) buyUP=true; else buyUP=false; // Сигнал Buy //------------ Comment( " vol1 = ",vol1, " pos1 = ",pos1,"\n", " vol2 = ",vol2, " pos2 = ",pos2,"\n", " vol3 = ",vol3, " pos3 = ",pos3,"\n", " vol4 = ",vol4, " pos4 = ",pos4,"\n", " VOLUP = ", volUP, " VOLUP1 = ", volUP1, "\n", " VOLDW = ", volDW, " VOLDW1 = ", volDW1, "\n", " RSI1 = ",rsi1, " RSI2 = ",rsi2, " rftl0_240 = ",rftl0_240); //---- for(i=0;i70) { OrderClose(OrderTicket(),OrderLots(),Bid,3,White); return(0); } // check for trailing stop if(TrailingStop>0) { if(Bid-OrderOpenPrice()>Point*TrailingStop) { if(OrderStopLoss()0) { if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) { if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0)) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red); return(0); } } } } } //---- if (buyUP==true && buy==false) { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point,"DT-RSI",MAGICRSI,0,Aquamarine); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice()); } else Print("Error opening BUY order : ",GetLastError()); return(0); } if (sellDW==true && sell==false) { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+StopLoss*Point,Bid-TakeProfit*Point,"DT-RSI",MAGICRSI,0,Red); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice()); } else Print("Error opening BUY order : ",GetLastError()); return(0); } //---- return(0); } //+------------------------------------------------------------------+