VQ bars
Indicators Used
Moving average indicator
Miscellaneous
Implements a curve of type %1
0 Views
0 Downloads
0 Favorites
VQ bars
//+------------------------------------------------------------------+
//|                                                                  |                                                 VQ.mq4 |
//|                                               Volatility Quality |
//|                                                by raff1410@o2.pl |
//+------------------------------------------------------------------+

#property  indicator_chart_window
#property  indicator_buffers 2
#property  indicator_color1  Green
#property  indicator_color2  Red
#property  indicator_width1  2
#property  indicator_width2  2

extern   int      Length = 5;
extern   int      Method = 3;
extern   int      Smoothing = 1;
extern   int      Filter = 5;
extern   bool     Steady  = false;

double   VQ[];
double   SumVQ[];
double   DIR[];
double   UpBuffer[];
double   DnBuffer[];

//+------------------------------------------------------------------+

int init()
{
IndicatorBuffers(5);
SetIndexStyle(0,DRAW_HISTOGRAM);
SetIndexBuffer(0,UpBuffer);
SetIndexStyle(1,DRAW_HISTOGRAM);
SetIndexBuffer(1,DnBuffer);
SetIndexBuffer(2,SumVQ);
SetIndexBuffer(3,VQ);
SetIndexBuffer(4,DIR);

if (Length < 2) Length = 2;
if (Method < 0) Method = 0;
if (Method > 3) Method = 3;
if (Smoothing < 0) Smoothing = 0;
if (Filter < 0) Filter = 0;

string short_name = "VQ | "+ Length + " , " + 
Method + " , " + Smoothing + " , " + Filter + "  | ";
IndicatorShortName(short_name);
SetIndexEmptyValue(0, 0.0);
SetIndexEmptyValue(1, 0.0);
SetIndexEmptyValue(2, 0.0);
SetIndexEmptyValue(3, 0.0);
return(0);
}

//+------------------------------------------------------------------+

int start()
{
 double MH = 0, ML = 0, MO = 0, MC = 0, MC1 = 0;
 int i, j, limit, 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--;
//---- 
 if(counted_bars<1) i=Bars-Length-1;
 else i=Bars-counted_bars;
 if(counted_bars<1)
  {
   j=Bars-Length-1;
   SumVQ[j + 1] = Close[j + 1];
  } 
 while (i >= 0)
   {
    MH = iMA(NULL,0,Length,0,Method,PRICE_HIGH,i);
    ML = iMA(NULL,0,Length,0,Method,PRICE_LOW,i);
    MO = iMA(NULL,0,Length,0,Method,PRICE_OPEN,i);
    MC = iMA(NULL,0,Length,0,Method,PRICE_CLOSE,i);
    MC1 = iMA(NULL,0,Length,0,Method,PRICE_CLOSE,i+Smoothing);
    
    if (Steady==true) 
     {
      MC=iMA(NULL,0,Length,0,Method,PRICE_MEDIAN,i); 
      MC1=iMA(NULL,0,Length,0,Method,PRICE_MEDIAN,i+Smoothing);
     }

    if((MH - ML)>0) VQ[i] = MathAbs(((MC - MC1) / MathMax(MH - ML, MathMax(MH - MC1, MC1 - ML)) + (MC - MO) / (MH - ML)) * 0.5) * ((MC - MC1 + (MC - MO)) * 0.5);
    SumVQ[i] = SumVQ[i + 1] + VQ[i];
    if (Filter > 0) if (MathAbs(SumVQ[i] - SumVQ[i + 1]) < Filter * Point) SumVQ[i] = SumVQ[i + 1];
    i--;
   }
 if(counted_bars<1) limit=Bars-Length-1;
 else limit=Bars-counted_bars;
 for (i = limit-1; i >= 0; i--)
  {
   if (SumVQ[i] > SumVQ[i+1]) DIR[i] = 1;
   if (SumVQ[i] < SumVQ[i+1]) DIR[i] = -1;
   if (SumVQ[i]== SumVQ[i+1]) DIR[i] = DIR[i + 1];
   
   if (DIR[i] > 0)
    {
     UpBuffer[i] = High[i];
         
     DnBuffer[i] = Low[i];
    }
   else
   if (DIR[i] < 0)
    {
     DnBuffer[i] = High[i];
            
     UpBuffer[i] = Low[i];
    }               
  }
         
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 ---