Jump to content

Recommended Posts

Posted

pure MQ4, for further work

 

#property indicator_separate_window

#property indicator_buffers 3

#property indicator_color1 Green

#property indicator_color2 Red

#property indicator_color3 Silver

//---- input parameters

extern int FN=34;

extern double Deviation=3.0;

extern int FastEMA=5;

extern int SlowEMA=13;

//---- buffers

double ExtMapBuffer1[];

double ExtMapBuffer2[];

double ExtMapBuffer3[];

double ExtMapBuffer4[];

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

//| Custom indicator initialization function |

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

int init()

{

//---- indicators

IndicatorBuffers(4);

SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,3);

SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,3);

SetIndexStyle(2,DRAW_LINE,STYLE_DOT);

SetIndexBuffer(1,ExtMapBuffer2);

SetIndexBuffer(0,ExtMapBuffer1);

SetIndexBuffer(2,ExtMapBuffer3);

SetIndexBuffer(3,ExtMapBuffer4);

if(FN<2)

FN=2;

if(Deviation<0)

Deviation=1;

if(FastEMA<1)

FastEMA=1;

if(SlowEMA<1)

SlowEMA=1;

IndicatorShortName("FNCD ("+FN+","+FastEMA+","+SlowEMA+")");

SetIndexDrawBegin(0,FN+SlowEMA);

SetIndexDrawBegin(1,FN+SlowEMA);

SetIndexLabel(0,"FN Up");

SetIndexLabel(1,"FN Down");

SetIndexEmptyValue(0,0);

SetIndexEmptyValue(1,0);

IndicatorDigits(4);

//----

return(0);

}

 

double NormalizedX(int F_period, int i)

{

double result;

double A;

double S;

double C;

if(i<Bars-F_period)

{

C=Close;

A=iMA(NULL,0,F_period,0,MODE_SMA,PRICE_CLOSE,i);

S=iStdDev(NULL,0,F_period,MODE_SMA,0,PRICE_CLOSE,i);

result=(C-A)/S;

}

else

result=0;

return(result);

}

 

double FisherNormalizedX(int F_period, double Dev, int i)

{

double result;

double X;

if(i<Bars-F_period && Dev>0)

{

X=NormalizedX(F_period,i)/Dev;

if(X>0.99)

X=0.99;

if(X<-0.99)

X=-0.99;

result=0.5*MathLog((1+X)/(1-X));

}

else

result=0;

return(result);

}

 

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

//| Custom indicator iteration function |

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

int start()

{

int limit;

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;

for(int i=0; i<limit; i++)

ExtMapBuffer4=FisherNormalizedX(FN,Deviation,i);

for(i=0; i<limit; i++)

ExtMapBuffer3=iMAOnArray(ExtMapBuffer4,Bars,SlowEMA,0,MODE_EMA,i);

for(i=0; i<limit; i++)

{

if(iMAOnArray(ExtMapBuffer4,Bars,FastEMA,0,MODE_EMA,i)>ExtMapBuffer3)

{

ExtMapBuffer1=iMAOnArray(ExtMapBuffer4,Bars,FastEMA,0,MODE_EMA,i);

ExtMapBuffer2=0;

}

else

{

ExtMapBuffer1=0;

ExtMapBuffer2=iMAOnArray(ExtMapBuffer4,Bars,FastEMA,0,MODE_EMA,i);

}

}

//---- done

return(0);

}

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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...