Johnyparwwkh sir plz look in to StepMA

extremist

Well-Known Member
#3
thank u sir !
i would be greatfull if u could Translate tht StepMa V7 given by Mr. Sr114


//+------------------------------------------------------------------+
//| StepMA_v7.mq4 |
//| Copyright 2006, TrendLaboratory |
//| http://finance.groups.yahoo.com/group/TrendLaboratory |
//| E-mail: [email protected] |
//+------------------------------------------------------------------+
#property copyright "Copyright 2006, TrendLaboratory"
#property link "http://finance.groups.yahoo.com/group/TrendLaboratory"
//----
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Aqua
#property indicator_color2 Blue
#property indicator_color3 Red
//---- input parameters
extern int Length =10; // Volty Length
extern double Kv =1.0; // Sensivity Factor
extern int StepSize =0; // Constant Step Size (if need)
extern int MA_Mode =0; // Volty MA Mode : 0-SMA, 1-LWMA
extern int Advance =0; // Offset
extern double Percentage =0; // Percentage of Up/Down Moving
extern bool HighLow =false; // High/Low Mode Switch (more sensitive)
extern int ColorMode =0; // Color Mode Switch
extern int BarsNumber =0;
//---- indicator buffers
double LineBuffer[];
double UpBuffer[];
double DnBuffer[];
double smin[];
double smax[];
double trend[];
double StepMA=0, ATR0=0,ATRmax=-100000,ATRmin=1000000;
int limit;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double StepSizeCalc(int Len, double Km, int Size, int k)
{
double result;
if(Size==0)
{
double AvgRange=0;
for(int i=Len-1;i>=0;i--)
{
if(MA_Mode==0) double alfa= 1.0; else alfa= 1.0+1.0*(Len-i)/Len;
AvgRange+= alfa*(High[k+i]-Low[k+i]);
}
ATR0=AvgRange/Len;
//----
if (ATR0>ATRmax) ATRmax=ATR0;
if (ATR0<ATRmin) ATRmin=ATR0;
//----
result=MathRound(0.5*Km*(ATRmax+ATRmin)/Point);
}
else
result=Km*StepSize;
return(result);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double StepMACalc (bool HL, double Size, int k)
{
int counted_bars=IndicatorCounted();
double result;
//----
if (HL)
{
smax[k]=Low[k]+2.0*Size*Point;
smin[k]=High[k]-2.0*Size*Point;
}
else
{
smax[k]=Close[k]+2.0*Size*Point;
smin[k]=Close[k]-2.0*Size*Point;
}
if (counted_bars==0){smax[limit+1]=smax[limit];smin[limit+1]=smin[limit];trend[limit+1]=0;}
//----
trend[k]=trend[k+1];
if (Close[k]>smax[k+1]) trend[k]=1;
if (Close[k]<smin[k+1]) trend[k]=-1;
if(trend[k]>0)
{
if(smin[k]<smin[k+1]) smin[k]=smin[k+1];
result=smin[k]+Size*Point;
}
else
{
if(smax[k]>smax[k+1]) smax[k]=smax[k+1];
result=smax[k]-Size*Point;
}
//Print (" k=",k," trend=",trend[k], " res=",result," Smax=", smax[k], " Smin=", smin[k]);
return(result);
}
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
string short_name;
//---- indicator line
IndicatorBuffers(6);
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
SetIndexStyle(1,DRAW_LINE);
SetIndexStyle(2,DRAW_LINE);
//
SetIndexArrow(1,159);
SetIndexArrow(2,159);
//
SetIndexBuffer(0,LineBuffer);
SetIndexBuffer(1,UpBuffer);
SetIndexBuffer(2,DnBuffer);
//
SetIndexShift(0,Advance);
SetIndexShift(1,Advance);
SetIndexShift(2,Advance);
//
SetIndexBuffer(3,smin);
SetIndexBuffer(4,smax);
SetIndexBuffer(5,trend);
//---- name for DataWindow and indicator subwindow label
short_name="StepMA("+Length+","+Kv+","+StepSize+")";
IndicatorShortName(short_name);
SetIndexLabel(0,short_name);
SetIndexLabel(1,"UpTrend");
SetIndexLabel(2,"DownTrend");
//----
SetIndexDrawBegin(0,Length);
SetIndexDrawBegin(1,Length);
SetIndexDrawBegin(2,Length);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| StepMA_v7 |
//+------------------------------------------------------------------+
int start()
{
int shift, counted_bars=IndicatorCounted();
//----
if(BarsNumber > 0)int Nbars=BarsNumber; else Nbars=Bars;
if(counted_bars > 0) limit=Nbars-counted_bars;
if(counted_bars < 0) return(0);
if(counted_bars ==0) limit=Nbars-Length-1;
//----
for(shift=limit;shift>=0;shift--)
{
int Step=StepSizeCalc( Length, Kv, StepSize, shift);
Comment (" StepSize= ", Step);
StepMA=StepMACalc(HighLow, Step, shift)+Percentage/100.0*Step*Point;
if(ColorMode==0) LineBuffer[shift]=StepMA;
if(ColorMode==1)
{
if(trend[shift]>0){UpBuffer[shift]=StepMA-Step*Point;DnBuffer[shift]=EMPTY_VALUE;}
else
if(trend[shift]<0){DnBuffer[shift]=StepMA+Step*Point;UpBuffer[shift]=EMPTY_VALUE;}
}
else
if(ColorMode==2)
{
if (trend[shift]>0)
{
UpBuffer[shift]=StepMA;
if(trend[shift+1] < 0)UpBuffer[shift+1]=DnBuffer[shift+1];
DnBuffer[shift]=EMPTY_VALUE;
}
if (trend[shift]<0)
{
DnBuffer[shift]=StepMA;
if(trend[shift+1] > 0)DnBuffer[shift+1]=UpBuffer[shift+1];
UpBuffer[shift]=EMPTY_VALUE;
}
}
else
{
UpBuffer[shift]=EMPTY_VALUE; DnBuffer[shift]=EMPTY_VALUE;
}
}
return(0);
}
//+------------------------------------------------------------------+
 

Bewinner

Well-Known Member
#4
This is created by Karthik marar sir...don't know whether it will help u or not...

HTML:
//Step MA Based on the Popular MetaTrader Indicator
//Version V.1.0 dated 18-07-2012
//Coded by Karthik Marar
//Copyright www.tatechnics.in
//======================== Indicator============================

_SECTION_BEGIN("StepMA");	
Kv			   = Param("Sensitivity", 1.25,0.1,2,0.1); 
PeriodWATR	   = Param("PeriodWATR",14,1,100,1);

AvgRange[0]=0;
	for (i=PeriodWATR-1;i>=0;i--)
	    { 
       dK = 1+1.0*(PeriodWATR-i)/PeriodWATR;
       AvgRange=AvgRange+ dK*abs(High[i]-Low[i]);
       }
	WATR = AvgRange/PeriodWATR;

StepSize=Kv*WATR;
smax  = Low+2*StepSize;
smin  = High-2*StepSize;
	
trend[0] 		= 1;
Linebuffer[0] = C[0];
Linemax[0]  = C[0];
Linemin[0]  = C[0];
Linemid[0]  = C[0];
for(i = PeriodWatr; i < BarCount; i++)	  
{
if(Close[i]>smax[i-1]) trend[i]=1; 
else
{
if(Close[i]<smin[i-1]) trend[i]=-1;
else
trend[i] = trend[i-1];
}
//--------------------
if(trend[i] > 0 AND smin[i]<smin[i-1]) smin[i]=smin[i-1];
if(trend[i] < 0 AND smax[i]>smax[i-1]) smax[i]=smax[i-1];
		
if (trend[i] >0 ) LineBuffer[i]=smin[i]+StepSize[i];
else
{
if (trend[i] <0) LineBuffer[i]=smax[i]-StepSize[i];
else
LineBuffer[i] = LineBuffer[i-1];
}
	
}

Plot (lineBuffer,"",colorYellow,1);
Plot (C,"StepMA V.1.0",IIf(C>Linebuffer,colorLime,colorRed),styleBar);
_SECTION_END();

_SECTION_BEGIN("Name");
GfxSetOverlayMode(1);
GfxSetTextColor( ColorHSB( 82, 82, 82 ) );
GfxSetBkMode(0); 
GfxSelectFont("Tahoma", Status("pxheight")/12 );
GfxTextOut( "StepMA", Status("pxwidth")/2, Status("pxheight")/3 );
GfxSelectFont("Tahoma", Status("pxheight")/36 );
GfxTextOut( "www.Tatechnics.in", Status("pxwidth")/2, Status("pxheight")/2 );
_SECTION_END();_SECTION_END();
Enjoy...
 

extremist

Well-Known Member
#8


I'm Very low in knowledge of MT4.
If i could even read and understand the code i would have easily coded it in AFL.

but if u can use the given code by sr114 (the one i have posted in mt4) in mt4 u can see tht u have choice to enter step size & one more thing Kv.

u can change these value and see the difference in graph.

as far as i have understood it is changing the step size by self but even u can set it by changing it in parameter box.


 
Last edited:

Similar threads