vol adx and t3 rsi





/*-----------------------------+
|			       |
| Shared by www.Aptrafx.com    |
|			       |
+------------------------------*/

//+------------------------------------------------------------------+
//|                                           vol adx and t3 rsi.mq4 |
//|                 Copyright © 2005, tageiger aka fxid10t@yahoo.com |
//|                MetaTrader_Experts_and_Indicators@yahoogroups.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, tageiger aka fxid10t@yahoo.com"
#property link      "MetaTrader_Experts_and_Indicators@yahoogroups.com"

extern int        ChartPeriod       =60;
//extern int        TimeBegin         =8;//
//extern int        TimeEnd           =16;//
extern int        ADXPeriod         =14;
extern int        ADXShift          =1;
extern int        ADXTrigger        =20;
extern int        T3_Period         =8;
extern double     T3_Curvature      =0.618;
extern int        CatastrophicSL    =500;
extern int        WishfulTP         =200;
extern int        TSLPeriod         =15;
extern int        TSLBarsBack       =13;
extern int        TSLBarShift       =0;
extern int        slippage          =0;   
extern double     Lots              =0.1;
extern double     MaximumRisk       =0.02;
extern double     DecreaseFactor    =3;
extern int        MagicNumber       =357;

double            Spread;           Spread=Ask-Bid;
string            comment;          comment="m vol adx & t3.rsi v.1";
string            TradeSymbol;      TradeSymbol=Symbol();
double            t3,rsi;
double            e1,e2,e3,e4,e5,e6;
double            c1,c2,c3,c4;
double            n,w1,w2,b2,b3;
int               cnt,ticket;

int init(){
   if(Period()!=ChartPeriod) {Alert("Period() does not equal Chart Period!"); return(0);}
   e1=0; e2=0; e3=0; e4=0; e5=0; e6=0;
   c1=0; c2=0; c3=0; c4=0;
   n=0;
   w1=0; w2=0;
   b2=0; b3=0;

   b2=T3_Curvature*T3_Curvature;
   b3=b2*T3_Curvature;
   c1=-b3;
   c2=(3*(b2+b3));
   c3=-3*(2*b2+T3_Curvature+b3);
   c4=(1+3*T3_Curvature+b3+3*b2);
   n=T3_Period;

   if (n<1) n=1;
   n = 1 + 0.5*(n-1);
   w1 = 2 / (n + 1);
   w2 = 1 - w1;
return(0);}
int deinit(){return(0);}
int start(){
   if(TotalTradesThisSymbol(TradeSymbol)==0)  {
      if(T3.RSI()=="Long" &&
      ADXTrend()=="Long" &&
      VolumeTrend()=="Long" /*&&
      Hour()>=TimeBegin && Hour()<TimeEnd*/)  {
         ticket=OrderSend(Symbol(),
                          OP_BUY,
                          LotsOptimized(),
                          Ask,
                          slippage,
                          Bid-(CatastrophicSL*Point),
                          Ask+(WishfulTP*Point),
                          Period()+comment,
                          MagicNumber,
                          0,//datetime expiration
                          MediumSpringGreen);
                          if(ticket>0)   {
                                 if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))  {Print(ticket);}
                                 else Print("Error Opening Buy Order: ",GetLastError());
                                 return(0);  }  }
      if(T3.RSI()=="Short" &&
      ADXTrend()=="Short" &&
      VolumeTrend()=="Short" /*&&
      Hour()>=TimeBegin && Hour()<TimeEnd*/) {
         ticket=OrderSend(Symbol(),
                          OP_SELL,
                          LotsOptimized(),
                          Bid,
                          slippage,
                          Ask+(CatastrophicSL*Point),
                          Bid-(WishfulTP*Point),
                          Period()+comment,
                          MagicNumber,
                          0,//datetime expiration
                          Crimson);
                          if(ticket>0)   {
                                 if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))  {Print(ticket);}
                                 else Print("Error Opening Sell Order: ",GetLastError());
                                 return(0);  }  }  }

   for(cnt=0;cnt<OrdersTotal();cnt++) {
   OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderMagicNumber()==MagicNumber &&  OrderSymbol()==Symbol())   {
         if(OrderType()==OP_BUY)    {
            if(T3.RSI()!="Long" &&
            ADXTrend()!="Long" &&
            VolumeTrend()!="Long" /*||
            Minute()==59*/)  {
               OrderClose(OrderTicket(),
                          OrderLots(),
                          Bid,
                          slippage,
                          MediumVioletRed);  }
            if(Bid>OrderOpenPrice() && btsl()>OrderOpenPrice() && btsl()>OrderStopLoss()) {
               OrderModify(OrderTicket(),
                           OrderOpenPrice(),
                           btsl(),
                           OrderTakeProfit(),
                           0,
                           LightSeaGreen);   }  }
         if(OrderType()==OP_SELL)   {
            if(T3.RSI()!="Short" &&
            ADXTrend()!="Short" &&
            VolumeTrend()!="Short" /*||
            Minute()==59*/)  {
               OrderClose(OrderTicket(),
                          OrderLots(),
                          Ask,
                          slippage,
                          MediumTurquoise);  }
            if(Ask<OrderOpenPrice() && stsl()<OrderOpenPrice() && stsl()<OrderStopLoss()) {
               OrderModify(OrderTicket(),
                           OrderOpenPrice(),
                           stsl(),
                           OrderTakeProfit(),
                           0,
                           FireBrick); }  }  }  }
if(!IsTesting()){PrintComments();}
return(0);
}

//Functions

double btsl()  { return (MathMax((Low[Lowest(Symbol(),TSLPeriod,MODE_LOW,TSLBarsBack,TSLBarShift)]-Spread),
                                 iSAR(Symbol(),Period(),0.02,0.2,0))); }

double stsl()  { return (MathMin((High[Highest(Symbol(),TSLPeriod,MODE_HIGH,TSLBarsBack,TSLBarShift)]+Spread),
                                 iSAR(Symbol(),Period(),0.02,0.2,0))); }

void PrintComments() {  Comment("Current Time:",TimeToStr(CurTime(),TIME_MINUTES),"\n",
                                "VolumeTrend:",VolumeTrend(),"\n",
                                "ADXTrend:",ADXTrend(),"\n",
                                "T3.RSI:",T3.RSI(),"\n",
                                "BTSL:",btsl(),"\n",
                                "STSL:",stsl(),"\n");  }

string T3.RSI(){
   int limit=Bars; string t3rsi;
   for(int i=limit; i>=0; i--)   {
      rsi/*Array[i]*/ = iRSI(Symbol(),0,T3_Period,PRICE_CLOSE,i);
      e1 = w1*rsi/*Array[i]*/ + w2*e1;
      e2 = w1*e1 + w2*e2;
      e3 = w1*e2 + w2*e3;
      e4 = w1*e3 + w2*e4;
      e5 = w1*e4 + w2*e5;
      e6 = w1*e5 + w2*e6;
      t3/*Array[i]*/=c1*e6 + c2*e5 + c3*e4 + c4*e3; }
   //Print("RSI:",rsi," T3:",t3);
   if(rsi>t3) t3rsi="Long";
   if(rsi<t3) t3rsi="Short";
   if(rsi==t3) t3rsi="Flat";
return(t3rsi);
}//end T3.RSI

string ADXTrend(){
   double plus,minus;string adxtrend="Flat";
   plus=iADX(Symbol(),ChartPeriod,ADXPeriod,PRICE_CLOSE,MODE_PLUSDI,ADXShift);
   minus=iADX(Symbol(),ChartPeriod,ADXPeriod,PRICE_CLOSE,MODE_MINUSDI,ADXShift);
   if(plus>minus && plus>ADXTrigger)  {adxtrend="Long";}
   if(minus>plus && minus>ADXTrigger) {adxtrend="Short";}
   //Print("PlusDI:",plus," MinusDI:",minus," adxtrend:",adxtrend);
return(adxtrend);
}//end ADXTrend

string VolumeTrend(){
   int vol.1=Volume[1],vol.2=Volume[2];string voltrend="Flat";
   if(vol.1<vol.2) voltrend="Long";
   if(vol.1>vol.2) voltrend="Short";
   if(vol.1==vol.2) voltrend="Flat";
return(voltrend);
}//end void VolumeTrend

double LotsOptimized()  {
   double lot=Lots;
   int    orders=HistoryTotal();
   int    losses=0;
   lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);
   if(DecreaseFactor>0) {
      for(int i=orders-1;i>=0;i--)  {
         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error in history!"); break; }
         if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) continue;
         if(OrderProfit()>0) break;
         if(OrderProfit()<0) losses++; }
      if(losses>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);   }
   if(lot<0.1) lot=0.1;
return(lot);   }//end LotsOptimized

int TotalTradesThisSymbol(string TradeSymbol) {
   int i, TradesThisSymbol=0;
   for(i=0;i<OrdersTotal();i++)  {
      OrderSelect(i,SELECT_BY_POS);
      if(OrderSymbol()==TradeSymbol &&
         OrderMagicNumber()==MagicNumber )   {  TradesThisSymbol++;  }   }
return(TradesThisSymbol);  }//end TotalTradesThisSymbol



Sample





Analysis



Market Information Used:

Series array that contains the lowest prices of each bar
Series array that contains the highest prices of each bar
Series array that contains tick volumes of each bar


Indicator Curves created:


Indicators Used:

Parabolic Stop and Reverse system
Relative strength index
Movement directional index


Custom Indicators Used:

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

Other Features:

It issuies visual alerts to the screen