//+------------------------------------------------------------------+ //| _i_EF_distance.mq4 | //| Copyright © 2006, Doji Starr | //| | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, Doji Starr" #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 Aqua // input params extern int Length=10; extern double Power=2; // vars int i, c, startBar; double coef, norm; // buffers double buf_el[], buf_co[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { IndicatorBuffers(2); SetIndexBuffer(0,buf_el); SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(1,buf_co); return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { if (Bars<=Length) return(0); //---- int bar; int counted_bars=IndicatorCounted(); if (counted_bars < 1) { // filling initial values in buffers for(bar=Bars-1; bar>=Bars-Length*2; bar--) { buf_el[bar]=Close[bar]; buf_co[bar]=0.0; } startBar=Bars-Length*2-1; } else startBar=Bars-counted_bars-1; for(bar=startBar; bar>=0; bar--) { buf_co[bar]=0.0; for(i=Length-1; i>=0; i--) buf_co[bar]+=MathAbs(MathPow(Close[bar]-Close[bar+i], Power)); //---- norm=0.0; buf_el[bar]=0.0; for(i=Length-1; i>=0; i--) { norm+=buf_co[bar+i]; buf_el[bar]+=buf_co[bar+i] * Close[bar+i]; } if (norm!=0) buf_el[bar]/=norm; else buf_el[bar]=0.0; //Print(norm); } //---- return(0); } //+------------------------------------------------------------------+