Navigation´╝ÜHome > Content >

nmt_-_ttm_scalper_with_subswings_amp_alerts_mtf_2.mq4

Time: 2016-09-28 | Download file:nmt_-_ttm_scalper_with_subswings_amp_alerts_mtf_2.mq4

//+------------------------------------------------------------------+
//|                                                  TTM scalper.mq4 |
//+------------------------------------------------------------------+
#property copyright "mladen"
#property link      "mladenfx@gmail.com"

#property indicator_chart_window
#property indicator_buffers  4
#property indicator_color1   DeepSkyBlue
#property indicator_color2   Red
#property indicator_color3   DeepSkyBlue
#property indicator_color4   Red
#property indicator_width1   2
#property indicator_width2   2
#property indicator_style3   STYLE_DOT
#property indicator_style4   STYLE_DOT

//
//
//
//
//

extern ENUM_TIMEFRAMES TimeFrame          = PERIOD_CURRENT;
extern bool            showSubSwings      = false;
extern bool            alertsOn           = false;
extern bool            alertsMessage      = true;
extern bool            alertsSound        = false;
extern bool            alertsEmail        = false;
extern bool            alertsNotification = false;

//
//
//
//
//

double upBuffer[];
double dnBuffer[];
double upsBuffer[];
double dnsBuffer[];
double trendBuffer[];
double swing[];
double subswing[];

string indicatorFileName;
bool   returnBars;

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
//
//
//
//
//

int init()
{
   IndicatorBuffers(7);
   SetIndexBuffer(0,upBuffer);  SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(1,dnBuffer);  SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexBuffer(2,upsBuffer); SetIndexStyle(2,DRAW_HISTOGRAM);
   SetIndexBuffer(3,dnsBuffer); SetIndexStyle(3,DRAW_HISTOGRAM);
   SetIndexBuffer(4,trendBuffer);
   SetIndexBuffer(5,swing);
   SetIndexBuffer(6,subswing);
   
   //
   //
   //
   //
   //
       
   indicatorFileName = WindowExpertName();
   returnBars        = TimeFrame == -99;
   TimeFrame         = MathMax(TimeFrame,_Period);
   return(0);
}
int deinit() { return(0); }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
//
//
//
//
//

#define trendUp    1
#define trendDown -1

//
//
//
//
//

int start()
{
   int counted_bars=IndicatorCounted();
      if(counted_bars<0) return(-1);
      if(counted_bars>0) counted_bars--;
         int limit = MathMin(Bars-counted_bars,Bars-1);
         
            //
            //
            //
            //
            //
            
            for (int k=3,i=limit;i<(Bars-1) && k>0;i++) if (dnBuffer[i]!=EMPTY_VALUE) k--;
                       limit = MathMax(limit,MathMin(Bars-1,i));
            if (returnBars) { upBuffer[0] = limit+1; return(0); }
         
   //
   //
   //
   //
   //
            
   if (TimeFrame == Period())
   {
      int swingBar;
      for(i=limit; i>=0; i--)
      {
         upBuffer[i]  = EMPTY_VALUE;
         dnBuffer[i]  = EMPTY_VALUE;
         upsBuffer[i] = EMPTY_VALUE;
         dnsBuffer[i] = EMPTY_VALUE;
         if (i==Bars-1)
               trendBuffer[i] = 1;
         else  trendBuffer[i] = trendBuffer[i+1];
         swing[i]    = 0;
         subswing[i] = 0;

         //
         //
         //
         //
         //

         if (trendBuffer[i] == trendUp)
         {
            for (k=1; (i+k)-1)
               if (isLess(Close[i],Low[swingBar-1]) && isLess(High[iHighest(NULL,0,MODE_HIGH,swingBar-i,i)],High[swingBar]))
               { 
                  upBuffer[swingBar] = High[swingBar];
                  dnBuffer[swingBar] = Low[swingBar];
                  trendBuffer[i]     = trendDown;
                  swing[swingBar]    = trendDown;
                  continue;
               }
         }

      //
      //
      //
      //
      //
                  
         if (trendBuffer[i] == trendDown)
         {
            for (k=1;(i+k)-1)
               if (isGreater(Close[i],High[swingBar-1]) && isGreater(Low[iLowest(NULL,0,MODE_LOW,swingBar-i,i)],Low[swingBar]))
               {
                  dnBuffer[swingBar] = High[swingBar];
                  upBuffer[swingBar] = Low[swingBar];
                  trendBuffer[i]     = trendUp;
                  swing[swingBar]    = trendUp;
               }                  
         }
         
         //
         //
         //
         //
         //

         if (!showSubSwings) continue;

         swingBar = swingHighBar(i,1,PRICE_HIGH,2,k);
            if (swingBar>-1) { upsBuffer[swingBar] = High[swingBar]; dnsBuffer[swingBar] = Low[swingBar]; subswing[swingBar] = trendDown;}
         swingBar = swingLowBar(i,1,PRICE_LOW,2,k);
            if (swingBar>-1) { dnsBuffer[swingBar] = High[swingBar]; upsBuffer[swingBar] = Low[swingBar]; subswing[swingBar] = trendUp;  }
      }
      manageAlerts();
      return(0);
   }
   
   //
   //
   //
   //
   //
   
   limit = MathMax(limit,MathMin(Bars-1,iCustom(NULL,TimeFrame,indicatorFileName,-99,0,0)*TimeFrame/Period()));
   for (i=limit; i>=0; i--)
   {
      int y = iBarShift(NULL,TimeFrame,Time[i]);               
      int x = iBarShift(NULL,TimeFrame,Time[i+1]);               
      if (x!=y)
      {
         upBuffer[i]  = iCustom(NULL,TimeFrame,indicatorFileName,PERIOD_CURRENT,showSubSwings,alertsOn,alertsMessage,alertsSound,alertsEmail,alertsNotification,0,y);
         dnBuffer[i]  = iCustom(NULL,TimeFrame,indicatorFileName,PERIOD_CURRENT,showSubSwings,alertsOn,alertsMessage,alertsSound,alertsEmail,alertsNotification,1,y);
         upsBuffer[i] = iCustom(NULL,TimeFrame,indicatorFileName,PERIOD_CURRENT,showSubSwings,alertsOn,alertsMessage,alertsSound,alertsEmail,alertsNotification,2,y);
         dnsBuffer[i] = iCustom(NULL,TimeFrame,indicatorFileName,PERIOD_CURRENT,showSubSwings,alertsOn,alertsMessage,alertsSound,alertsEmail,alertsNotification,3,y);
      }
      else
      {
         upBuffer[i]  = EMPTY_VALUE;
         dnBuffer[i]  = EMPTY_VALUE;
         upsBuffer[i] = EMPTY_VALUE;
         dnsBuffer[i] = EMPTY_VALUE;
      }          
   }          
   return(0);
}


//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
//
//
//
//
//

void manageAlerts()
{
   if (alertsOn)
   {
      static datetime previousSwingBarTime    = -1;
      static datetime previousSubSwingBarTime = -1;

      //
      //
      //
      //
      //
               
      for (int i=0; iNormalizeDouble(second,Digits));
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
//
//
//
//
//

int swingHighBar(int shift, int instance, int price, int strength, int length)
{
   double pivotPrice = 0; 
	int    pivotBar   = 0 ;

      pivot(shift, price, length, strength, strength, instance, 1, pivotPrice,  pivotBar);
      
   return(pivotBar);
}   
int swingLowBar(int shift, int instance, int price, int strength, int length)
{
   double pivotPrice = 0; 
	int    pivotBar   = 0 ;

      pivot(shift, price, length, strength, strength, instance, -1, pivotPrice,  pivotBar);
      
   return(pivotBar);
}   

//
//
//
//
//

int pivot(int shift, int price, int length, int leftStrength, int rightStrength, int instance, int hiLo, double& pivotPrice, int& pivotBar)
{
   double testPrice;
   double candidatePrice;
   bool   instanceTest = false;
   int    strengthCntr = 0;
   int    instanceCntr = 0;
   int    lengthCntr   = rightStrength;
   
   //
   //
   //
   //
   //
   
   while (lengthCntr testPrice))
               pivotTest    =  false;
         else  strengthCntr += 1;
      }
      strengthCntr = 1;
      while(pivotTest && (strengthCntr <= rightStrength))
      {
         testPrice = iMA(NULL,0,1,0,MODE_SMA,price,shift+lengthCntr-strengthCntr); 
         if ((hiLo== 1 && candidatePrice <= testPrice) ||
             (hiLo==-1 && candidatePrice >= testPrice))
               pivotTest    =  false;
         else  strengthCntr += 1;
      }
         
      //
      //
      //
      //
      //
         
      if (pivotTest) instanceCntr += 1;
      if (instanceCntr == instance)
            instanceTest = true;
      else  lengthCntr += 1;           
   }
   
   //
   //
   //
   //
   //
   
   if (instanceTest)
   {
      pivotPrice = candidatePrice;
      pivotBar   = shift+lengthCntr;
      return(1);
   }
   else
   {
      pivotPrice = -1;
      pivotBar   = -1;
      return(-1);
   }
}


//-------------------------------------------------------------------
//
//-------------------------------------------------------------------
//
//
//
//
//

string sTfTable[] = {"M1","M5","M15","M30","H1","H4","D1","W1","MN"};
int    iTfTable[] = {1,5,15,30,60,240,1440,10080,43200};

string timeFrameToString(int tf)
{
   for (int i=ArraySize(iTfTable)-1; i>=0; i--) 
         if (tf==iTfTable[i]) return(sTfTable[i]);
                              return("");
}

Recommend