Author: Coded by Don Lawson (don_forex)
Indicators Used
Standard Deviation indicator
Miscellaneous
Implements a curve of type %1It plays sound alerts
0 Views
0 Downloads
0 Favorites
V-T_Bv6
//+------------------------------------------------------------------+
//|                                                        V-T&B.mq4 |
//|                                           Don Lawson (don_forex) |
//+------------------------------------------------------------------+
#property copyright "Coded by Don Lawson (don_forex)"
#property link      "d_n_d_enterprises@sbcglobal.net"
//----
#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 double  WickRatio     =0.5;
extern double  WickPercent   =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;
//+------------------------------------------------------------------+
//| 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[index]=High[index]+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[index]=Low[index]-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();
   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
   if(counted_bars==0) limit-=1+1;

//----
   WickPenetration=WickPercent/100.0;
   DistanceFromCandle=Point*8;
   for(i=1; i<=limit; i++)
     {
      bool  CurrentBull=false,
      CurrentBear    =false,
      Bull           =false,
      Bear           =false,
      HiWick         =false,
      LoWick         =false;
      if(Open[i-1]<Close[i-1])
         CurrentBull=true;
      else
         CurrentBear=true;
      if(Open[i]<Close[i])
         Bull=true;
      else
         Bear=true;
      BullWickHi=High[i]-Close[i];
      BullWickLow=Open[i]-Low[i];
      BullBody=Close[i]-Open[i];
      BearWickHi=High[i]-Open[i];
      BearWickLow=Close[i]-Low[i];
      BearBody=Open[i]-Close[i];
      // Check for VTOP
      if(High[i]>High[i+1])
        {
         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[i]<Low[i+1])
        {
         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[i] + BullWickHi * WickPenetration;
         BearWickPenHi=Open[i] + BearWickHi * WickPenetration;
         switch(State)
           {
            case 1 : // CurrentBear && Bull 
               if(UseNew)
                 {
                  if(Open[i-1]<BullWickPenHi) SetVTop(i);
                 }
               else
                 {
                  SetVTop(i);
                 }
               break;
            case 2 : // CurrentBear && Bear 
               if(UseNew)
                 {
                  if(Open[i-1]<BearWickPenHi) SetVTop(i);
                 }
               else
                 {
                  SetVTop(i);
                 }
               break;
            case  3 : // CurrentBull && Bull
               if(UseNew)
                 {
                  if(Close[i-1]<BullWickPenHi) SetVTop(i);
                 }
               else
                 {
                  SetVTop(i);
                 }
               break;
            case 4 : // CurrentBull && Bear
               if(UseNew)
                 {
                  if(Close[i-1]<BearWickPenHi) SetVTop(i);
                 }
               else
                 {
                  SetVTop(i);
                 }
               break;
           }
        }
      if(LoWick)
        {
         BullWickPenLow=Open[i] - BullWickLow * WickPenetration;
         BearWickPenLow=Close[i] - BearWickLow * WickPenetration;
         switch(State)
           {
            case 1 : // CurrentBear && Bull
               if(UseNew)
                 {
                  if(Close[i-1]>BullWickPenLow) SetVBottom(i);
                 }
               else
                 {
                  SetVBottom(i);
                 }
               break;
            case 2 : // CurrentBear && Bear
               if(UseNew)
                 {
                  if(Close[i-1]>BearWickPenLow) SetVBottom(i);
                 }
               else
                 {
                  SetVBottom(i);
                 }
               break;
            case 3 : // CurrentBull && Bull
               if(UseNew)
                 {
                  if(Open[i-1]>BullWickPenLow) SetVBottom(i);
                 }
               else
                 {
                  SetVBottom(i);
                 }
               break;
            case 4 : //CurrentBull && Bear)
               if(UseNew)
                 {
                  if(Open[i-1]>BearWickPenLow) SetVBottom(i);
                 }
               else
                 {
                  SetVBottom(i);
                 }
               break;
           }
        }
     }
   return(0);
  }
//+------------------------------------------------------------------+

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---