//+------------------------------------------------------------------+ //| Flat.mq4 | //| Pedro Puado | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Pedro Puado" #property link "http://www.metaquotes.net" //---- #property indicator_separate_window #property indicator_buffers 1 #property indicator_color1 Green //---- input parameters extern int MA=20; extern int HLRef=100; extern int MaxBars=1000; //---- buffers double ExtMapBuffer1[]; double ExtMapBuffer2[]; double ExtMapBuffer3[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators IndicatorBuffers(3); IndicatorShortName("Flat"); SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,ExtMapBuffer3); SetIndexBuffer(1,ExtMapBuffer2); SetIndexBuffer(2,ExtMapBuffer1); //---- return(0); } //+------------------------------------------------------------------+ //| Custor indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(); //---- int i=Bars-1; if(counted_bars>0) i=Bars-counted_bars+0; i=MathMax(i, MaxBars); int p=i; double m1, m2, n; while(i>=0) { ExtMapBuffer1[i]=iStdDev(NULL,0,MA,MODE_SMA,0,PRICE_CLOSE,i); i--; } int x=0; double s, s1, nL, nH; while(p>=0) { s=0; x=0; for(x=0; x < MA+0; x++) { s+=ExtMapBuffer1[p+x]; } s1=s/MA; s=0; x=0; for(x=0; x < MA+0; x++) { s+=MathAbs((ExtMapBuffer1[p+x]-s1)*2); } ExtMapBuffer2[p]=MathSqrt(s/MA); nH=HVal(ExtMapBuffer2, HLRef, p); nL=LVal(ExtMapBuffer2, HLRef, p); ExtMapBuffer3[p]=((ExtMapBuffer2[p] - nL)/ (nH-nL))*100; p--; } //---- return(0); } //+------------------------------------------------------------------+ double HVal( double aA[], int p, int shift) { int i; double rtn=0, pr=0; for(i=0; i < p; i++) { if (aA[i+shift] > pr) { pr=aA[i+shift]; } } return(pr); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double LVal( double aA[], int p, int shift) { int i; double rtn=0, pr=99999; for(i=0; i < p; i++) { if (aA[i+shift] < pr) { pr=aA[i+shift]; } } return(pr); } //+------------------------------------------------------------------+
Sample
Analysis
Market Information Used:
Indicator Curves created:
Implements a curve of type DRAW_LINE
Indicators Used:
Standard Deviation indicator
Custom Indicators Used:
Order Management characteristics:
Other Features: