admin 发表于 2018-1-22 14:46:22

ADX_WildersDMI_v1.02 alerts



//+------------------------------------------------------------------+
//|                                                WildersDMI_v1.mq4 |
//|                           Copyright ?2007, TrendLaboratory Ltd. |
//|            http://finance.groups.yahoo.com/group/TrendLaboratory |
//|                                       E-mail: igorad2004@list.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright ?2007, TrendLaboratory Ltd."
#property link      "http://finance.groups.yahoo.com/group/TrendLaboratory"
//----
#property indicator_separate_window
#property indicator_buffers   4
#property indicator_color1    LightBlue
#property indicator_width1    2
#property indicator_color2    Blue
#property indicator_width2    1
#property indicator_style2    2
#property indicator_color3    Black
#property indicator_width3    1
#property indicator_style3    2
#property indicator_color4    Orange
#property indicator_width4    2
#property indicator_levelcolor Yellow
//---- input parameters
extern int       MA_Length=13; // Period of additional smoothing
extern int       DMI_Length=13; // Period of DMI
extern int       ADX_Length=14; // Period of ADX
extern int       ADXR_Length =14; // Period of ADXR
extern int       UseADX   =0; // Use ADX: 0-off,1-on
extern int       UseADXR    =0; // Use ADXR: 0-off,1-on

extern double Level                      = 20.0;
extern string note                     = "turn on Alert = true; turn off = false";
extern bool   alertsOn                   = true;
extern bool   alertsOnCurrent            = true;
extern bool   alertsOnLevelCross         = true;
extern bool   alertsOnDiPlusDiMinusCross = true;
extern bool   alertsMessage            = true;
extern bool   alertsSound                = true;
extern bool   alertsNotify               = true;
extern bool   alertsEmail                = false;
extern string soundFile                  = "alert2.wav";

//---- buffers
double ADX[];
double PDI[];
double MDI[];
double ADXR[];
double sPDI[];
double sMDI[];
double STR[];
double DX[];
double trend[];
double trend1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
   IndicatorBuffers(10);
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ADX);
   SetIndexStyle(1,DRAW_LINE,0,2);
   SetIndexBuffer(1,PDI);
   SetIndexStyle(2,DRAW_LINE,0,2);
   SetIndexBuffer(2,MDI);
   SetIndexStyle(3,DRAW_LINE);
   SetIndexBuffer(3,ADXR);
   SetIndexBuffer(4,sPDI);
   SetIndexBuffer(5,sMDI);
   SetIndexBuffer(6,STR);
   SetIndexBuffer(7,DX);
   SetIndexBuffer(8,trend);
   SetIndexBuffer(9,trend1);
   SetLevelValue(0,Level);
//---- name for DataWindow and indicator subwindow label
   string short_name="WildersDMI("+MA_Length+","+DMI_Length+","+ADX_Length+","+ADXR_Length+")";
   IndicatorShortName(short_name);
   SetIndexLabel(0,"ADX");
   SetIndexLabel(1,"+DI");
   SetIndexLabel(2,"-DI");
   SetIndexLabel(3,"ADXR");
//----
   SetIndexDrawBegin(0,DMI_Length+MA_Length);
   SetIndexDrawBegin(1,DMI_Length+MA_Length);
   SetIndexDrawBegin(2,DMI_Length+MA_Length);
   SetIndexDrawBegin(3,DMI_Length+MA_Length);
   SetIndexShift(3,2);
//----
   return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
   int      shift, counted_bars=IndicatorCounted();
   double alfa1=1.0/DMI_Length;
   double alfa2=1.0/ADX_Length;
//----
   if (counted_bars < 0) return(-1);
   if(counted_bars<1)
      for(shift=1;shift<=MA_Length+DMI_Length;shift++)
      {
         PDI=0.0;MDI=0.0;ADX=0.0;
         sPDI=0.0;sMDI=0.0;DX=0.0;
         STR=0.0;ADXR=0.0;
      }
   shift=Bars-MA_Length-DMI_Length-1;
   if(counted_bars>=DMI_Length+MA_Length) shift=Bars-counted_bars-1;
   while(shift>=0)
   {
      double AvgHigh =iMA(NULL,0,MA_Length,0,1,PRICE_HIGH,shift);
      double AvgHigh1=iMA(NULL,0,MA_Length,0,1,PRICE_HIGH,shift+1);
      double AvgLow=iMA(NULL,0,MA_Length,0,1,PRICE_LOW,shift);
      double AvgLow1 =iMA(NULL,0,MA_Length,0,1,PRICE_LOW,shift+1);
      double AvgClose1= iMA(NULL,0,MA_Length,0,1,PRICE_CLOSE,shift+1);
//----
      double Bulls=0.5*(MathAbs(AvgHigh-AvgHigh1)+(AvgHigh-AvgHigh1));
      double Bears=0.5*(MathAbs(AvgLow1-AvgLow)+(AvgLow1-AvgLow));
      if (Bulls > Bears) Bears=0;
      else
         if (Bulls < Bears) Bulls=0;
         else
            if (Bulls==Bears) {Bulls=0;Bears=0;}
//----            
      sPDI=sPDI + alfa1 * (Bulls - sPDI);
      sMDI=sMDI + alfa1 * (Bears - sMDI);
//----      
      double   TR=MathMax(AvgHigh-AvgLow,AvgHigh-AvgClose1);
      STR =STR + alfa1 * (TR - STR);
      if(STR>0 )
      {
         PDI=100*sPDI/STR;
         MDI=100*sMDI/STR;
      }
      if(UseADX > 0)
      {
         if((PDI + MDI)>0)
            DX=100*MathAbs(PDI - MDI)/(PDI + MDI);
         else DX=0;
//----
         ADX=ADX + alfa2 *(DX - ADX);
         if(UseADXR >0) ADXR=0.5*(ADX + ADX);
      }
      trend = 0;
      trend1 = trend1;
      if (ADX > Level)      trend= 1;
      if (ADX < Level)      trend=-1;
      if (PDI > MDI) trend1 = 1;
      if (PDI < MDI) trend1 =-1;
      shift--;
   }
   
   //
   //
   //
   //
   //
            
   if (alertsOn)
      {
      if (alertsOnCurrent)
             int whichBar = 0;
      else   whichBar = 1;
   
      //
      //
      //
      //
      //
      
      static datetime time1 = 0;
      static string   mess1 = "";
         if (alertsOnLevelCross && trend != trend)
         {
            if (trend == 1) doAlert(time1,mess1,whichBar,"up");
            if (trend ==-1) doAlert(time1,mess1,whichBar,"down");
         }            
      static datetime time2 = 0;
      static string   mess2 = "";
         if (alertsOnDiPlusDiMinusCross && trend1 != trend1)
         {
            if (trend1 == 1) doAlert(time2,mess2,whichBar," DMI UP ");
            if (trend1 ==-1) doAlert(time2,mess2,whichBar," DMI DOWN");
         }                        
}
return(0);
}
//
//
//
//
//

void doAlert(datetime& previousTime, string& previousAlert, int forBar, string doWhat)
{
   string message;
   
      if (previousAlert != doWhat || previousTime != Time) {
          previousAlert= doWhat;
          previousTime   = Time;

          //
          //
          //
          //
          //

          message =StringConcatenate(AccountNumber()," - ",Symbol()," at ",TimeToStr(TimeLocal(),TIME_SECONDS),"   ",doWhat);
             if (alertsMessage) Alert(message);
             if (alertsEmail)   SendMail(StringConcatenate(Symbol(),"   "),message);
             if (alertsNotify)SendNotification(message);
             if (alertsSound)   PlaySound(soundFile);
      }
}
      






怨女 发表于 2020-6-20 14:39:39

我抢、我抢、我抢沙发~

文静 发表于 2020-7-17 16:31:08

帮你顶下哈!!

笑看风云 发表于 2020-8-9 12:50:52

帮你顶下哈!!

srdke 发表于 2020-8-28 14:44:24

学习了,不错

天眼 发表于 2020-11-7 21:45:48

{:1_186:}

tafeg8a 发表于 2020-11-25 21:33:19

谢谢

明注册韩国 发表于 2021-8-9 15:38:33

顶下
页: [1]
查看完整版本: ADX_WildersDMI_v1.02 alerts