axihe 发表于 2020-11-18 16:44:17

V-T&B



//+------------------------------------------------------------------+
//|                                                      V-T&B.mq4 |
//|                                           Don Lawson (don_forex) |
//+------------------------------------------------------------------+
#property copyright ""
#property link      ""
//----
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_width1 2
#property indicator_color2 Green
#property indicator_width2 2
//----
extern doubleWickRatio   =0.5;
extern doubleWickPercent   =50;
extern int   JuicePeriod   =7;
extern int JuiceLevelForAlert=5;
//----
extern bool Notify=false;
extern bool UseNew=true;
//----
double VTop[];
double VBottom[];
double DistanceFromCandle;
int    Level=5;

datetime t=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
   SetIndexStyle(0, DRAW_ARROW, EMPTY);
   SetIndexArrow(0, 234);
   SetIndexBuffer(0, VTop);
   SetIndexStyle(1, DRAW_ARROW, EMPTY);
   SetIndexArrow(1, 233);
   SetIndexBuffer(1, VBottom);
//----
   return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                     |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
   return(0);
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void SetVTop(int index)
{
   double Juice, JuiceLevel;
// Check for Juice
   JuiceLevel=Level*Point;
   if(Period()==5)
      JuiceLevel=JuiceLevel/2;
//----
   Juice=iStdDev(NULL,0,JuicePeriod,MODE_EMA,0,PRICE_CLOSE,index)-JuiceLevel;
   if(Juice > JuiceLevelForAlert*Point)
   {
      VTop=High+ DistanceFromCandle;
      if(Notify)
         PlaySound("V-Top.wav");
   }
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void SetVBottom(int index)
{
   double Juice, JuiceLevel;
// Check for Juice
   JuiceLevel=Level*Point;
   if(Period()==5)
      JuiceLevel=JuiceLevel/2;
//----
   Juice=iStdDev(NULL,0,JuicePeriod,MODE_EMA,0,PRICE_CLOSE,index)-JuiceLevel;
   if(Juice > JuiceLevelForAlert*Point)
   {
      VBottom=Low- DistanceFromCandle;
      if(Notify)
         PlaySound("V-Bottom.wav");
   }
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
   int limit, i,State;
   double WickPenetration;
   double BullWickPenHi,BullWickPenLow;
   double BearWickPenHi,BearWickPenLow;
   double BullWickHi,BullWickLow,BullBody;
   double BearWickHi,BearWickLow,BearBody;
   int counted_bars=IndicatorCounted();
//---- check for possible errors
   if(counted_bars<0)
      return(-1);
//---- last counted bar will be recounted
   if(counted_bars>0)
      counted_bars--;
   limit=Bars-counted_bars;
//----
   WickPenetration=WickPercent/100.0;
   DistanceFromCandle=Point*8;
   for(i=1; i<=limit; i++)
   {
      boolCurrentBull    =false,
            CurrentBear    =false,
            Bull         =false,
            Bear         =false,
            HiWick         =false,
            LoWick         =false;
      //----
      if(Open<Close)
         CurrentBull=true;
      else
         CurrentBear=true;
      if(Open<Close)
         Bull=true;
      else
         Bear=true;
      //----
      BullWickHi=High - Close;
      BullWickLow=Open - Low;
      BullBody=Close - Open;
      BearWickHi=High - Open;
      BearWickLow=Close - Low;
      BearBody=Open - Close;
      // Check for VTOP
      if(High > High)
      {
         if(Bull)
         {
            if((BullWickHi > BullBody * WickRatio)) // && (BullWickHi > BullWickLow)
               HiWick=true;
         }
         if(Bear)
         {
            if((BearWickHi > BearBody * WickRatio)) // && (BearWickHi > BearWickLow)
               HiWick=true;
         }
      }
      // Check for VBottom
      if(Low < Low)
      {
         if(Bull)
         {
            if((BullWickLow > BullBody * WickRatio)) // && (BullWickLow > BullWickHi)
               LoWick=true;
         }
         if(Bear)
         {
            if((BearWickLow > BearBody * WickRatio)) // && (BearWickLow > BearWickHi)
               LoWick=true;
         }
      }
      // Set up State Table
      if(CurrentBear && Bull)
         State=1;
      if(CurrentBear && Bear)
         State=2;
      if(CurrentBull && Bull)
         State=3;
      if(CurrentBull && Bear)
         State=4;
      // Set Arrow
      if(HiWick)
      {
         BullWickPenHi=Close + BullWickHi * WickPenetration;
         BearWickPenHi=Open + BearWickHi * WickPenetration;
         switch(State)
         {
            case 1 : // CurrentBear && Bull
               if(UseNew)
               {
                  if(Open < BullWickPenHi)
                     SetVTop(i);
               }
               else
               {
                  SetVTop(i);
               }

               break;
            case 2 : // CurrentBear && Bear
               if(UseNew)
               {
                  if(Open < BearWickPenHi)
                     SetVTop(i);
               }
               else
               {
                  SetVTop(i);
               }
               break;
            case3 : // CurrentBull && Bull
               if(UseNew)
               {
                  if(Close < BullWickPenHi)
                     SetVTop(i);
               }
               else
               {
                  SetVTop(i);
               }
               break;
            case 4 : // CurrentBull && Bear
               if(UseNew)
               {
                  if(Close < BearWickPenHi)
                     SetVTop(i);
               }
               else
               {
                  SetVTop(i);
               }
               break;
         }
      }
      if(LoWick)
      {
         BullWickPenLow=Open - BullWickLow * WickPenetration;
         BearWickPenLow=Close - BearWickLow * WickPenetration;
         //----
         switch(State)
         {
            case 1 : // CurrentBear && Bull
               if(UseNew)
               {
                  if(Close > BullWickPenLow)
                     SetVBottom(i);
               }
               else
               {
                  SetVBottom(i);
               }
               break;
            case 2 : // CurrentBear && Bear
               if(UseNew)
               {
                  if(Close > BearWickPenLow)
                     SetVBottom(i);
               }
               else
               {
                  SetVBottom(i);
               }
               break;
            case 3 : // CurrentBull && Bull
               if(UseNew)
               {
                  if(Open > BullWickPenLow)
                     SetVBottom(i);
               }
               else
               {
                  SetVBottom(i);
               }
               break;
            case 4 : //CurrentBull && Bear)
               if(UseNew)
               {
                  if(Open > BearWickPenLow)
                     SetVBottom(i);
               }
               else
               {
                  SetVBottom(i);
               }
               break;
         }
      }
   }

   if(t!=Time)
   {
      if(VTop<1111)
      {
         Alert(_Symbol+" Sell!!!");
         SendMail("Signal",_Symbol+" Sell!!!");
      }
      if(VBottom<1111)
      {
         Alert(_Symbol+" Buy!!!");
         SendMail("Signal",_Symbol+" Buy!!!");
      }
      t=Time;
   }

   return(0);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+


wen56926 发表于 2020-12-4 13:46:27

{:1_181:}

lgbszgxj 发表于 2020-12-8 20:52:26

{:1_186:}

比我少奋斗 发表于 2020-12-12 20:42:28

支持下

a2660273 发表于 2020-12-24 17:16:37

{:1_186:}

gzlt02 发表于 2020-12-25 13:10:21

{:1_179:}

fa886f 发表于 2021-1-11 15:33:52

支持下

cpymypte 发表于 2021-1-14 18:32:41

{:1_181:}

knnnxuum 发表于 2021-1-19 12:08:53

支持下

candemo 发表于 2021-1-27 14:57:43

{:1_179:}
页: [1] 2 3 4 5 6
查看完整版本: V-T&B