Dt-rsi-exp1_v2





//+------------------------------------------------------------------+
//|                                                  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<OrdersTotal();cnt++)
        {
         OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
         if(OrderType()==OP_SELL &&   // check for opened position 
            OrderSymbol()==Symbol())  // check for symbol  
            sell=true;
         if(OrderType()==OP_BUY &&    // check for opened position 
            OrderSymbol()==Symbol())  // check for symbol  
            buy=true;
        }
     }
//----
   double rsi1,rsi2,rsi3,vol1,vol2,vol3,vol4;
   int i,k,pos1,pos2,pos3,pos4;
   for(i=0; i<500; i++)
     {
      rsi1=iRSI(NULL,TimeFrameRSI,PeriodRSI,PRICE_CLOSE,i+1);
      rsi2=iRSI(NULL,TimeFrameRSI,PeriodRSI,PRICE_CLOSE,i+2);
      rsi3=iRSI(NULL,TimeFrameRSI,PeriodRSI,PRICE_CLOSE,i+3);
//----
      if  (rsi1<rsi2 && rsi2>=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; i<pos2; i++)
     {
      if(BufferRSIDW[i]!=0 && BufferRSIDW[i]<40) {vol1=0; vol2=0;}
     }
//----- Ïîèñê äîíûøåê ------
   k=0;
   for(i=0; i<500; i++)
     {
      if (BufferRSIDW[i]<60 && BufferRSIDW[i]!=0 && k==0) { vol3=BufferRSIDW[i]; pos3=i; k++;}
      if (BufferRSIDW[i]!=0 && BufferRSIDW[i]<40 && BufferRSIDW[i]<vol3 && k!=0) { vol4=BufferRSIDW[i]; pos4=i; k++;}
      if (k>1) break;
     }
//----- Ïîèñê ìàêñèìóìîâ âûøå 60
   // Åñëè ìåæäó äîíûøêàìè åñòü ìàêñèìóì áîëüøå 60, òîãäà ëèíèþ òðåíäà íå ñòðîèì
   for(i=0; i<pos4; i++)
     {
      if(BufferRSIUP[i]!=0 && BufferRSIUP[i]>60) {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 && rsi1<volDW && rsi2>volDW1 && rftl0_240>Close[1] && // rsi1<rsi2 && rsi2>rsi3 &&
          /* 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 && rsi2<volUP1 && rftl0_240<Close[1] && // rsi1>rsi2 && rsi2<rsi3 &&
          rsi2<50 && rsi0<55 && /* rsi2>40 && */ 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;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)        break;
      if(OrderMagicNumber()!=MAGICRSI || OrderSymbol()!=Symbol()) continue;
      //---- check order type 
      if(OrderType()==OP_BUY)
        {
         if(rsi0>70)
           {
            OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
            return(0);
           }
         // check for trailing stop
         if(TrailingStop>0)
           {
            if(Bid-OrderOpenPrice()>Point*TrailingStop)
              {
               if(OrderStopLoss()<Bid-Point*TrailingStop)
                 {
                  OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
                  return(0);
                 }
              }
           }
        }
      if(OrderType()==OP_SELL)
        {
         if(rsi0<30)
           {
            OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
            return(0);
           }
         // check for trailing stop
         if(TrailingStop>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);
  }
//+------------------------------------------------------------------+





Sample





Analysis



Market Information Used:

Series array that contains close prices for each bar


Indicator Curves created:


Indicators Used:

Relative strength index



Custom Indicators Used:
RFTL

Order Management characteristics:
Checks for the total of open orders

It Closes Orders by itself
It can change open orders parameters, due to possible stepping strategy
It automatically opens orders when conditions are reached

Other Features:

BackTest : USDCHF on H1

From 2009-12-01 to 2010-01-01 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2009-12-01 to 2010-01-17 Profit Factor:0.65 Total Net Profit:-46.00

BackTest : USDCAD on H1

From 2009-12-01 to 2010-01-01 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2009-08-01 to 2009-10-01 Profit Factor:0.00 Total Net Profit:0.00

BackTest : GBPUSD on H1

From 2010-01-01 to 2010-02-27 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-04-01 to 2010-04-30 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-05-01 to 2010-05-31 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-06-01 to 2010-06-30 Profit Factor:0.00 Total Net Profit:0.00

Request Backtest for Dt-rsi-exp1_v2


From : (yyyy/mm/dd) To: (yyyy/mm/dd)

Pair: Period: