can anyone translate this mt4 code to eld
//+------------------------------------------------------------------+
//| 3x Stochastic.mq4 |
//+------------------------------------------------------------------+
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 Silver
#property indicator_style1 STYLE_DOT
#property indicator_color2 Yellow //Neutral
#property indicator_color3 Lime //UPPER
#property indicator_color4 Red //LOWER
#property indicator_width2 2
#property indicator_width3 2
#property indicator_width4 2
#property indicator_minimum 0
#property indicator_maximum 100
#property indicator_level1 20
#property indicator_level2 80
//---- indicator parameters
extern int Sto_Period = 21;
extern int Smooth = 9;
extern int Signal = 9;
//---- indicator buffers
double Sto[];
double Sig[];
double Upper[];
double Lower[];
//----
double tmp[][12];
int draw_begin, pBars, mcnt_bars;
string TF, fast_name;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- drawing settings
SetIndexStyle(0,DRAW_LINE);
SetIndexStyle(1,DRAW_LINE);
SetIndexStyle(2,DRAW_LINE);
SetIndexStyle(3,DRAW_LINE);
draw_begin=Sto_Period+Smooth+Signal;
//---- indicator name
IndicatorShortName("3x Stochastic ("+Sto_Period+","+Smooth+","+Signal+")");
SetIndexLabel(0,"Sto");
SetIndexLabel(1,"Sig");
SetIndexLabel(2,NULL);
SetIndexLabel(3,NULL);
//---- indicator buffers mapping
SetIndexBuffer(0,Sto);
SetIndexBuffer(1,Sig);
SetIndexBuffer(2,Upper);
SetIndexBuffer(3,Lower);
SetIndexDrawBegin(0,draw_begin);
SetIndexDrawBegin(1,draw_begin);
SetIndexDrawBegin(2,draw_begin);
SetIndexDrawBegin(3,draw_begin);
//---- initialization done
return(0);
}
int start()
{
int limit, y, i, shift, cnt_bars=IndicatorCounted();
double K[], mSto[], mSig[];
int mBars = iBars(NULL,0);
if(mBars != pBars)
{
ArrayResize(K,mBars);
ArrayResize(mSto,mBars);
ArrayResize(mSig,mBars);
ArrayResize(tmp,mBars);
pBars = mBars;
}
if(cnt_bars<1)
{
for(i=1;i<=draw_begin;i++) {Sto[bars-i]=0; Sig[bars-i]=0;}
mcnt_bars = 1;
}
if(mcnt_bars > 1) mcnt_bars--;
for(y=mcnt_bars-1;y<mBars;y++)
{
shift = mBars-y-1;
double aPrice = iMA(NULL,0,1,0,0,0,shift);
double up = 0;
double dn = 10000000000;
for(i=0;i<Sto_Period;i++)
{
up = MathMax(up,iHigh(NULL,0,shift+i));
dn = MathMin(dn,iLow(NULL,0,shift+i));
}
if(up-dn > 0) K[y] = 100*(aPrice - dn)/(up - dn); else K[y] = 0;
mSto[y] = Ensign(K[y],mSto,Smooth,y);
mSig[y] = Ensign(mSto[y],mSig,Signal,y);
Sto[shift] = mSto[y];
Sig[shift] = mSig[y];
// Colors
if (Sig[shift] > Sig[shift+1]) { Upper[shift] = Sig[shift]; Upper[shift+1] = Sig[shift+1]; }
else { Upper[shift] = EMPTY_VALUE;
if (Upper[shift+2] == EMPTY_VALUE)
Upper[shift+1] = EMPTY_VALUE; }
if (Sig[shift] < Sig[shift+1]) { Lower[shift] = Sig[shift]; Lower[shift+1] = Sig[shift+1]; }
else { Lower[shift] = EMPTY_VALUE;
if (Lower[shift+2] == EMPTY_VALUE)
Lower[shift+1] = EMPTY_VALUE; }
}
mcnt_bars = mBars-1;
return(0);
}
// Ensign smooth !
double Ensign(double price,double array[],int per,int bar)
{
if(bar == 2) double ema = price;
else
if(bar > 2) ema = array[bar-1] + 1.0/(per)*(price - array[bar-1]);
//if(bar > 2) ema = array[bar-1] + 2.0/(1+per)*(price - array[bar-1]); EMA - classic formula
return(ema);
}