Coding help - page 253

 

Indicator modification help

Hello Guys

This MA cross indicator is producing alerts with every tick. Would anyone be so kind to rectify the problem or at least teach me how to do it.

#property indicator_chart_window

#property indicator_buffers 2

#property indicator_color1 Lime

#property indicator_color2 Red

double g_ibuf_76[];

double g_ibuf_80[];

int g_period_84 = 5;

int g_period_88 = 34;

extern bool Alerts = TRUE;

extern bool PopAlerts = TRUE;

extern bool PushAlerts = TRUE;

extern bool EmailAlerts = TRUE;

extern bool SoundAlerts = TRUE;

extern string SoundFileUp = "UP.wav";

extern string SoundFileDn = "DN.wav";

int gi_96 = 0;

int gi_100 = 0;

int init() {

SetIndexStyle(0, DRAW_ARROW, EMPTY);

SetIndexArrow(0, 233);

SetIndexBuffer(0, g_ibuf_76);

SetIndexStyle(1, DRAW_ARROW, EMPTY);

SetIndexArrow(1, 234);

SetIndexBuffer(1, g_ibuf_80);

return (0);

}

int deinit() {

return (0);

}

int start() {

int li_20;

double l_ima_24;

double l_ima_32;

double l_ima_40;

double l_ima_48;

double l_ima_56;

double l_ima_64;

double ld_72;

double ld_80;

int li_88 = IndicatorCounted();

if (li_88 < 0) return (-1);

if (li_88 > 0) li_88--;

int li_12 = Bars - li_88;

for (int li_16 = 0; li_16 <= li_12; li_16++) {

li_20 = li_16;

ld_72 = 0;

ld_80 = 0;

for (li_20 = li_16; li_20 <= li_16 + 9; li_20++) ld_80 += MathAbs(High[li_20] - Low[li_20]);

ld_72 = ld_80 / 10.0;

l_ima_24 = iMA(NULL, 0, g_period_84, 0, MODE_EMA, PRICE_CLOSE, li_16);

l_ima_40 = iMA(NULL, 0, g_period_84, 0, MODE_EMA, PRICE_CLOSE, li_16 + 1);

l_ima_56 = iMA(NULL, 0, g_period_84, 0, MODE_EMA, PRICE_CLOSE, li_16 - 1);

l_ima_32 = iMA(NULL, 0, g_period_88, 0, MODE_EMA, PRICE_CLOSE, li_16);

l_ima_48 = iMA(NULL, 0, g_period_88, 0, MODE_EMA, PRICE_CLOSE, li_16 + 1);

l_ima_64 = iMA(NULL, 0, g_period_88, 0, MODE_EMA, PRICE_CLOSE, li_16 - 1);

if (l_ima_24 > l_ima_32 && l_ima_40 l_ima_64) {

g_ibuf_76[li_16] = Low[li_16] - ld_72 / 2.0;

if (li_16 <= 2 && Alerts && !gi_100) {

if (PopAlerts) Alert(Symbol(), " ", Period(), " PRE-BUY ");

if (PushAlerts) SendNotification(Symbol() + " PRE-BUY ");

if (SoundAlerts) PlaySound(SoundFileUp);

if (EmailAlerts) SendMail(Symbol() , " PRE-BUY ");

gi_96 = TRUE;

gi_100 = FALSE;

}

} else {

if (l_ima_24 l_ima_48 && l_ima_56 < l_ima_64) {

g_ibuf_80[li_16] = High[li_16] + ld_72 / 2.0;

if (li_16 <= 2 && Alerts && !gi_100) {

if (PopAlerts) Alert(Symbol(), " ", Period(), " PRE-SELL ");

if (PushAlerts) SendNotification(Symbol() + " PRE-SELL ");

if (SoundAlerts) PlaySound(SoundFileUp);

if (EmailAlerts) SendMail(Symbol() , " PRE-SELL ");

gi_100 = TRUE;

gi_96 = FALSE;

}

}

}

}

return (0);

}

Regards

Amin

 
aminhakim:
Hello Guys

This MA cross indicator is producing alerts with every tick. Would anyone be so kind to rectify the problem or at least teach me how to do it.

#property indicator_chart_window

#property indicator_buffers 2

#property indicator_color1 Lime

#property indicator_color2 Red

double g_ibuf_76[];

double g_ibuf_80[];

int g_period_84 = 5;

int g_period_88 = 34;

extern bool Alerts = TRUE;

extern bool PopAlerts = TRUE;

extern bool PushAlerts = TRUE;

extern bool EmailAlerts = TRUE;

extern bool SoundAlerts = TRUE;

extern string SoundFileUp = "UP.wav";

extern string SoundFileDn = "DN.wav";

int gi_96 = 0;

int gi_100 = 0;

int init() {

SetIndexStyle(0, DRAW_ARROW, EMPTY);

SetIndexArrow(0, 233);

SetIndexBuffer(0, g_ibuf_76);

SetIndexStyle(1, DRAW_ARROW, EMPTY);

SetIndexArrow(1, 234);

SetIndexBuffer(1, g_ibuf_80);

return (0);

}

int deinit() {

return (0);

}

int start() {

int li_20;

double l_ima_24;

double l_ima_32;

double l_ima_40;

double l_ima_48;

double l_ima_56;

double l_ima_64;

double ld_72;

double ld_80;

int li_88 = IndicatorCounted();

if (li_88 < 0) return (-1);

if (li_88 > 0) li_88--;

int li_12 = Bars - li_88;

for (int li_16 = 0; li_16 <= li_12; li_16++) {

li_20 = li_16;

ld_72 = 0;

ld_80 = 0;

for (li_20 = li_16; li_20 <= li_16 + 9; li_20++) ld_80 += MathAbs(High[li_20] - Low[li_20]);

ld_72 = ld_80 / 10.0;

l_ima_24 = iMA(NULL, 0, g_period_84, 0, MODE_EMA, PRICE_CLOSE, li_16);

l_ima_40 = iMA(NULL, 0, g_period_84, 0, MODE_EMA, PRICE_CLOSE, li_16 + 1);

l_ima_56 = iMA(NULL, 0, g_period_84, 0, MODE_EMA, PRICE_CLOSE, li_16 - 1);

l_ima_32 = iMA(NULL, 0, g_period_88, 0, MODE_EMA, PRICE_CLOSE, li_16);

l_ima_48 = iMA(NULL, 0, g_period_88, 0, MODE_EMA, PRICE_CLOSE, li_16 + 1);

l_ima_64 = iMA(NULL, 0, g_period_88, 0, MODE_EMA, PRICE_CLOSE, li_16 - 1);

if (l_ima_24 > l_ima_32 && l_ima_40 l_ima_64) {

g_ibuf_76[li_16] = Low[li_16] - ld_72 / 2.0;

if (li_16 <= 2 && Alerts && !gi_100) {

if (PopAlerts) Alert(Symbol(), " ", Period(), " PRE-BUY ");

if (PushAlerts) SendNotification(Symbol() + " PRE-BUY ");

if (SoundAlerts) PlaySound(SoundFileUp);

if (EmailAlerts) SendMail(Symbol() , " PRE-BUY ");

gi_96 = TRUE;

gi_100 = FALSE;

}

} else {

if (l_ima_24 l_ima_48 && l_ima_56 < l_ima_64) {

g_ibuf_80[li_16] = High[li_16] + ld_72 / 2.0;

if (li_16 <= 2 && Alerts && !gi_100) {

if (PopAlerts) Alert(Symbol(), " ", Period(), " PRE-SELL ");

if (PushAlerts) SendNotification(Symbol() + " PRE-SELL ");

if (SoundAlerts) PlaySound(SoundFileUp);

if (EmailAlerts) SendMail(Symbol() , " PRE-SELL ");

gi_100 = TRUE;

gi_96 = FALSE;

}

}

}

}

return (0);

}

Regards

Amin

Amin that is decompiled version of a repainting indicator with problems you have noticed. Use the indicator from this post instead : https://www.mql5.com/en/forum/173574/page447

 

Hello dear coders!

Is it possible to add alerting options in this indicator the moment when it changes color?

The most important thing would be to give an alert as soon as possible (it always happens on the opening of a candle).

Option 1: Email: (TRUE/FALSE)

Option 2: Box: (TRUE/FALSE)

Text to display in subject of email or box: [PAIR] turned on TF [TF]

Since i honor your time, i tried it myself first to code it but without any luck.

Hopefully someone could help me out.

Thanks in advance!

hama.mq4

Files:
hama.mq4  4 kb
 

Hi programmers, i'm trying to create an indicator that paints price bars by the stepMA average formula. Since it is an elite indicator i was unsure if i could put it here, but in my code there is no trace of the original formula because i created the MTF version of that indicator using iCustom functions.

The compiler doesn't give me errors at all but the indicator doesn't work properly, i think i've made some mess with buffers. Could you help me?

thanks in advance.

here is the my code:

//------------------------------------------------------------------

#property copyright "mladen"

#property link "www.forex-tsd.com"

//------------------------------------------------------------------

#property indicator_chart_window

#property indicator_buffers 4

#property indicator_color1 DarkGreen

#property indicator_width1 1

#property indicator_color2 FireBrick

#property indicator_width2 1

#property indicator_color3 LimeGreen

#property indicator_width3 2

#property indicator_color4 Orange

#property indicator_width4 2

//

//

//

extern int TimeFrame = 0; // Timeframe

extern int MaLength = 10; // Ma Length

extern int MaMethod = 18; // Ma method

extern double Sensitivity = 3; // Sensivity Factor

extern double StepSize = 3; // Constant Step Size

extern int Shift = 0; // OShify

extern bool HighLow = false; // High/Low Mode Switch (more sensitive)

extern color WickBuyColor = DarkGreen;

extern color WickSellColor = FireBrick;

extern color BodyBuyColor = LimeGreen;

extern color BodySellColor = Orange;

extern int WickWidth = 1;

extern int BodyWidth = 2;

extern bool alertsOn = false;

extern bool alertsOnCurrent = false;

extern bool alertsMessage = false;

extern bool alertsNotification = false;

extern bool alertsSound = false;

extern bool alertsEmail = false;

extern string MaMethods = "";

extern string __0 = "SMA";

extern string __1 = "EMA";

extern string __2 = "Double smoothed EMA";

extern string __3 = "Double EMA (DEMA)";

extern string __4 = "Triple EMA (TEMA)";

extern string __5 = "Smoothed MA";

extern string __6 = "Linear weighted MA";

extern string __7 = "Parabolic weighted MA";

extern string __8 = "Alexander MA";

extern string __9 = "Volume weghted MA";

extern string __10 = "Hull MA";

extern string __11 = "Triangular MA";

extern string __12 = "Sine weighted MA";

extern string __13 = "Linear regression";

extern string __14 = "IE/2";

extern string __15 = "NonLag MA";

extern string __16 = "Zero lag EMA";

extern string __17 = "Leader EMA";

extern string __18 = "Super smoother";

extern string __19 = "Smoother";

//

//

//

double MABuffer[];

double UpBuffer[];

double DnBuffer[];

double UpbBuffer[];

double DnbBuffer[];

double slope[];

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

//| |

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

int init()

{

IndicatorBuffers(6);

SetIndexBuffer(0,UpBuffer); SetIndexStyle(0,DRAW_HISTOGRAM, EMPTY, WickWidth, WickBuyColor);

SetIndexBuffer(1,DnBuffer); SetIndexStyle(1,DRAW_HISTOGRAM, EMPTY, WickWidth, WickSellColor);

SetIndexBuffer(2,UpbBuffer); SetIndexStyle(2,DRAW_HISTOGRAM, EMPTY, BodyWidth, BodyBuyColor);

SetIndexBuffer(3,DnbBuffer); SetIndexStyle(3,DRAW_HISTOGRAM, EMPTY, BodyWidth, BodySellColor);

SetIndexBuffer(4,MABuffer);

SetIndexBuffer(5,slope);

IndicatorShortName("StepMA averages MTF candles("+MaLength+","+Sensitivity+","+StepSize+")");

MaLength = MathMax(MaLength,1);

switch(TimeFrame)

{

case 1 : string TimeFrameStr="Period_M1"; break;

case 5 : TimeFrameStr="Period_M5"; break;

case 15 : TimeFrameStr="Period_M15"; break;

case 30 : TimeFrameStr="Period_M30"; break;

case 60 : TimeFrameStr="Period_H1"; break;

case 240 : TimeFrameStr="Period_H4"; break;

case 1440 : TimeFrameStr="Period_D1"; break;

case 10080 : TimeFrameStr="Period_W1"; break;

case 43200 : TimeFrameStr="Period_MN1"; break;

default : TimeFrameStr="Current Timeframe";

}

IndicatorShortName("StepMA averages MTF candles ("+TimeFrameStr+")");

return(0);

}

//----

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

//| MTF function |

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

int start()

{

datetime TimeArray[];

int i,limit,y=0,counted_bars=IndicatorCounted();

// Plot defined time frame on to current time frame

ArrayCopySeries(TimeArray,MODE_TIME,Symbol(),TimeFrame);

limit= MathMin(Bars-counted_bars+3*TimeFrame/Period(),Bars-1);

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

{

if (Time<TimeArray[y]) y++;

/*********************************************************************************************************

Add your main indicator loop below. You can reference an existing indicator with its iName or iCustom.

Rule 1: Add extern inputs above for all neccesary values

Rule 2: Use 'TimeFrame' for the indicator time frame

Rule 3: Use 'y' for your indicator's shift value

********************************************************************************************************/

MABuffer=iCustom(Symbol(),TimeFrame,"StepMA averages",MaLength,MaMethod,Sensitivity,StepSize,Shift,HighLow,0,y);

slope = slope;

if (MABuffer>MABuffer) slope = 1;

if (MABuffer<MABuffer) slope = -1;

if (slope == 1) { UpBuffer=High; DnBuffer=Low; UpbBuffer = MathMax(Open,Close); DnbBuffer = MathMin(Open,Close); }

if (slope == -1) { DnBuffer=High; UpBuffer=Low; DnbBuffer = MathMax(Open,Close); UpbBuffer = MathMin(Open,Close); }

}

return(0);

}

//+------------------------------------------------------------------+
 
thefxpros:
Hi programmers, i'm trying to create an indicator that paints price bars by the stepMA average formula. Since it is an elite indicator i was unsure if i could put it here, but in my code there is no trace of the original formula because i created the MTF version of that indicator using iCustom functions.

The compiler doesn't give me errors at all but the indicator doesn't work properly, i think i've made some mess with buffers. Could you help me?

thanks in advance.

here is the my code:

//------------------------------------------------------------------

#property copyright "mladen"

#property link "www.forex-tsd.com"

//------------------------------------------------------------------

#property indicator_chart_window

#property indicator_buffers 4

#property indicator_color1 DarkGreen

#property indicator_width1 1

#property indicator_color2 FireBrick

#property indicator_width2 1

#property indicator_color3 LimeGreen

#property indicator_width3 2

#property indicator_color4 Orange

#property indicator_width4 2

//

//

//

extern int TimeFrame = 0; // Timeframe

extern int MaLength = 10; // Ma Length

extern int MaMethod = 18; // Ma method

extern double Sensitivity = 3; // Sensivity Factor

extern double StepSize = 3; // Constant Step Size

extern int Shift = 0; // OShify

extern bool HighLow = false; // High/Low Mode Switch (more sensitive)

extern color WickBuyColor = DarkGreen;

extern color WickSellColor = FireBrick;

extern color BodyBuyColor = LimeGreen;

extern color BodySellColor = Orange;

extern int WickWidth = 1;

extern int BodyWidth = 2;

extern bool alertsOn = false;

extern bool alertsOnCurrent = false;

extern bool alertsMessage = false;

extern bool alertsNotification = false;

extern bool alertsSound = false;

extern bool alertsEmail = false;

extern string MaMethods = "";

extern string __0 = "SMA";

extern string __1 = "EMA";

extern string __2 = "Double smoothed EMA";

extern string __3 = "Double EMA (DEMA)";

extern string __4 = "Triple EMA (TEMA)";

extern string __5 = "Smoothed MA";

extern string __6 = "Linear weighted MA";

extern string __7 = "Parabolic weighted MA";

extern string __8 = "Alexander MA";

extern string __9 = "Volume weghted MA";

extern string __10 = "Hull MA";

extern string __11 = "Triangular MA";

extern string __12 = "Sine weighted MA";

extern string __13 = "Linear regression";

extern string __14 = "IE/2";

extern string __15 = "NonLag MA";

extern string __16 = "Zero lag EMA";

extern string __17 = "Leader EMA";

extern string __18 = "Super smoother";

extern string __19 = "Smoother";

//

//

//

double MABuffer[];

double UpBuffer[];

double DnBuffer[];

double UpbBuffer[];

double DnbBuffer[];

double slope[];

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

//| |

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

int init()

{

IndicatorBuffers(6);

SetIndexBuffer(0,UpBuffer); SetIndexStyle(0,DRAW_HISTOGRAM, EMPTY, WickWidth, WickBuyColor);

SetIndexBuffer(1,DnBuffer); SetIndexStyle(1,DRAW_HISTOGRAM, EMPTY, WickWidth, WickSellColor);

SetIndexBuffer(2,UpbBuffer); SetIndexStyle(2,DRAW_HISTOGRAM, EMPTY, BodyWidth, BodyBuyColor);

SetIndexBuffer(3,DnbBuffer); SetIndexStyle(3,DRAW_HISTOGRAM, EMPTY, BodyWidth, BodySellColor);

SetIndexBuffer(4,MABuffer);

SetIndexBuffer(5,slope);

IndicatorShortName("StepMA averages MTF candles("+MaLength+","+Sensitivity+","+StepSize+")");

MaLength = MathMax(MaLength,1);

switch(TimeFrame)

{

case 1 : string TimeFrameStr="Period_M1"; break;

case 5 : TimeFrameStr="Period_M5"; break;

case 15 : TimeFrameStr="Period_M15"; break;

case 30 : TimeFrameStr="Period_M30"; break;

case 60 : TimeFrameStr="Period_H1"; break;

case 240 : TimeFrameStr="Period_H4"; break;

case 1440 : TimeFrameStr="Period_D1"; break;

case 10080 : TimeFrameStr="Period_W1"; break;

case 43200 : TimeFrameStr="Period_MN1"; break;

default : TimeFrameStr="Current Timeframe";

}

IndicatorShortName("StepMA averages MTF candles ("+TimeFrameStr+")");

return(0);

}

//----

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

//| MTF function |

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

int start()

{

datetime TimeArray[];

int i,limit,y=0,counted_bars=IndicatorCounted();

// Plot defined time frame on to current time frame

ArrayCopySeries(TimeArray,MODE_TIME,Symbol(),TimeFrame);

limit= MathMin(Bars-counted_bars+3*TimeFrame/Period(),Bars-1);

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

{

if (Time<TimeArray[y]) y++;

/*********************************************************************************************************

Add your main indicator loop below. You can reference an existing indicator with its iName or iCustom.

Rule 1: Add extern inputs above for all neccesary values

Rule 2: Use 'TimeFrame' for the indicator time frame

Rule 3: Use 'y' for your indicator's shift value

********************************************************************************************************/

MABuffer=iCustom(Symbol(),TimeFrame,"StepMA averages",MaLength,MaMethod,Sensitivity,StepSize,Shift,HighLow,0,y);

slope = slope;

if (MABuffer>MABuffer) slope = 1;

if (MABuffer<MABuffer) slope = -1;

if (slope == 1) { UpBuffer=High; DnBuffer=Low; UpbBuffer = MathMax(Open,Close); DnbBuffer = MathMin(Open,Close); }

if (slope == -1) { DnBuffer=High; UpBuffer=Low; DnbBuffer = MathMax(Open,Close); UpbBuffer = MathMin(Open,Close); }

}

return(0);

}

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

thefxpros

All you need is a call to the slope buffer (all the rest you can ignore)

If the slope returned is 1 it is an up trend

If the slope returned is -1 it is a down trend

 
thefxpros:
Hi programmers, i'm trying to create an indicator that paints price bars by the stepMA average formula. Since it is an elite indicator i was unsure if i could put it here, but in my code there is no trace of the original formula because i created the MTF version of that indicator using iCustom functions.

The compiler doesn't give me errors at all but the indicator doesn't work properly, i think i've made some mess with buffers. Could you help me?

thanks in advance.

Like this :

//------------------------------------------------------------------

#property copyright "mladen"

#property link "www.forex-tsd.com"

//------------------------------------------------------------------

#property indicator_chart_window

#property indicator_buffers 4

#property indicator_color1 DarkGreen

#property indicator_width1 1

#property indicator_color2 FireBrick

#property indicator_width2 1

#property indicator_color3 LimeGreen

#property indicator_width3 2

#property indicator_color4 Orange

#property indicator_width4 2

//

//

//

extern int TimeFrame = 0; // Timeframe

extern int MaLength = 10; // Ma Length

extern int MaMethod = 18; // Ma method

extern double Sensitivity = 3; // Sensivity Factor

extern double StepSize = 3; // Constant Step Size

extern int Shift = 0; // OShify

extern bool HighLow = false; // High/Low Mode Switch (more sensitive)

extern color WickBuyColor = DarkGreen;

extern color WickSellColor = FireBrick;

extern color BodyBuyColor = LimeGreen;

extern color BodySellColor = Orange;

extern int WickWidth = 1;

extern int BodyWidth = 2;

extern bool alertsOn = false;

extern bool alertsOnCurrent = false;

extern bool alertsMessage = false;

extern bool alertsNotification = false;

extern bool alertsSound = false;

extern bool alertsEmail = false;

extern string MaMethods = "";

extern string __0 = "SMA";

extern string __1 = "EMA";

extern string __2 = "Double smoothed EMA";

extern string __3 = "Double EMA (DEMA)";

extern string __4 = "Triple EMA (TEMA)";

extern string __5 = "Smoothed MA";

extern string __6 = "Linear weighted MA";

extern string __7 = "Parabolic weighted MA";

extern string __8 = "Alexander MA";

extern string __9 = "Volume weghted MA";

extern string __10 = "Hull MA";

extern string __11 = "Triangular MA";

extern string __12 = "Sine weighted MA";

extern string __13 = "Linear regression";

extern string __14 = "IE/2";

extern string __15 = "NonLag MA";

extern string __16 = "Zero lag EMA";

extern string __17 = "Leader EMA";

extern string __18 = "Super smoother";

extern string __19 = "Smoother";

//

//

//

double UpBuffer[];

double DnBuffer[];

double UpbBuffer[];

double DnbBuffer[];

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

//| |

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

int init()

{

SetIndexBuffer(0,UpBuffer); SetIndexStyle(0,DRAW_HISTOGRAM, EMPTY, WickWidth, WickBuyColor);

SetIndexBuffer(1,DnBuffer); SetIndexStyle(1,DRAW_HISTOGRAM, EMPTY, WickWidth, WickSellColor);

SetIndexBuffer(2,UpbBuffer); SetIndexStyle(2,DRAW_HISTOGRAM, EMPTY, BodyWidth, BodyBuyColor);

SetIndexBuffer(3,DnbBuffer); SetIndexStyle(3,DRAW_HISTOGRAM, EMPTY, BodyWidth, BodySellColor);

IndicatorShortName("StepMA averages MTF candles("+MaLength+","+Sensitivity+","+StepSize+")");

MaLength = MathMax(MaLength,1);

switch(TimeFrame)

{

case 1 : string TimeFrameStr="Period_M1"; break;

case 5 : TimeFrameStr="Period_M5"; break;

case 15 : TimeFrameStr="Period_M15"; break;

case 30 : TimeFrameStr="Period_M30"; break;

case 60 : TimeFrameStr="Period_H1"; break;

case 240 : TimeFrameStr="Period_H4"; break;

case 1440 : TimeFrameStr="Period_D1"; break;

case 10080 : TimeFrameStr="Period_W1"; break;

case 43200 : TimeFrameStr="Period_MN1"; break;

default : TimeFrameStr="Current Timeframe";

}

IndicatorShortName("StepMA averages MTF candles ("+TimeFrameStr+")");

return(0);

}

//----

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

//| MTF function |

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

int start()

{

int counted_bars=IndicatorCounted();

if(counted_bars<0) return(-1);

if(counted_bars>0) counted_bars--;

int limit = MathMin(MathMax(Bars-counted_bars,3*TimeFrame/Period()),Bars-1);

for(int i=limit;i>=0;i--)

{

int y = iBarShift(NULL,TimeFrame,Time);

int slope=iCustom(Symbol(),TimeFrame,"StepMA averages",MaLength,MaMethod,Sensitivity,StepSize,Shift,HighLow,5,y);

if (slope == 1) { UpBuffer=High; DnBuffer=Low; UpbBuffer = MathMax(Open,Close); DnbBuffer = MathMin(Open,Close); }

if (slope == -1) { DnBuffer=High; UpBuffer=Low; DnbBuffer = MathMax(Open,Close); UpbBuffer = MathMin(Open,Close); }

}

return(0);

}

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

And then with same parameters they are going to be the same :

Files:
 
mladen:
Like this :
//------------------------------------------------------------------

#property copyright "mladen"

#property link "www.forex-tsd.com"

//------------------------------------------------------------------

#property indicator_chart_window

#property indicator_buffers 4

#property indicator_color1 DarkGreen

#property indicator_width1 1

#property indicator_color2 FireBrick

#property indicator_width2 1

#property indicator_color3 LimeGreen

#property indicator_width3 2

#property indicator_color4 Orange

#property indicator_width4 2

//

//

//

extern int TimeFrame = 0; // Timeframe

extern int MaLength = 10; // Ma Length

extern int MaMethod = 18; // Ma method

extern double Sensitivity = 3; // Sensivity Factor

extern double StepSize = 3; // Constant Step Size

extern int Shift = 0; // OShify

extern bool HighLow = false; // High/Low Mode Switch (more sensitive)

extern color WickBuyColor = DarkGreen;

extern color WickSellColor = FireBrick;

extern color BodyBuyColor = LimeGreen;

extern color BodySellColor = Orange;

extern int WickWidth = 1;

extern int BodyWidth = 2;

extern bool alertsOn = false;

extern bool alertsOnCurrent = false;

extern bool alertsMessage = false;

extern bool alertsNotification = false;

extern bool alertsSound = false;

extern bool alertsEmail = false;

extern string MaMethods = "";

extern string __0 = "SMA";

extern string __1 = "EMA";

extern string __2 = "Double smoothed EMA";

extern string __3 = "Double EMA (DEMA)";

extern string __4 = "Triple EMA (TEMA)";

extern string __5 = "Smoothed MA";

extern string __6 = "Linear weighted MA";

extern string __7 = "Parabolic weighted MA";

extern string __8 = "Alexander MA";

extern string __9 = "Volume weghted MA";

extern string __10 = "Hull MA";

extern string __11 = "Triangular MA";

extern string __12 = "Sine weighted MA";

extern string __13 = "Linear regression";

extern string __14 = "IE/2";

extern string __15 = "NonLag MA";

extern string __16 = "Zero lag EMA";

extern string __17 = "Leader EMA";

extern string __18 = "Super smoother";

extern string __19 = "Smoother";

//

//

//

double UpBuffer[];

double DnBuffer[];

double UpbBuffer[];

double DnbBuffer[];

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

//| |

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

int init()

{

SetIndexBuffer(0,UpBuffer); SetIndexStyle(0,DRAW_HISTOGRAM, EMPTY, WickWidth, WickBuyColor);

SetIndexBuffer(1,DnBuffer); SetIndexStyle(1,DRAW_HISTOGRAM, EMPTY, WickWidth, WickSellColor);

SetIndexBuffer(2,UpbBuffer); SetIndexStyle(2,DRAW_HISTOGRAM, EMPTY, BodyWidth, BodyBuyColor);

SetIndexBuffer(3,DnbBuffer); SetIndexStyle(3,DRAW_HISTOGRAM, EMPTY, BodyWidth, BodySellColor);

IndicatorShortName("StepMA averages MTF candles("+MaLength+","+Sensitivity+","+StepSize+")");

MaLength = MathMax(MaLength,1);

switch(TimeFrame)

{

case 1 : string TimeFrameStr="Period_M1"; break;

case 5 : TimeFrameStr="Period_M5"; break;

case 15 : TimeFrameStr="Period_M15"; break;

case 30 : TimeFrameStr="Period_M30"; break;

case 60 : TimeFrameStr="Period_H1"; break;

case 240 : TimeFrameStr="Period_H4"; break;

case 1440 : TimeFrameStr="Period_D1"; break;

case 10080 : TimeFrameStr="Period_W1"; break;

case 43200 : TimeFrameStr="Period_MN1"; break;

default : TimeFrameStr="Current Timeframe";

}

IndicatorShortName("StepMA averages MTF candles ("+TimeFrameStr+")");

return(0);

}

//----

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

//| MTF function |

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

int start()

{

int counted_bars=IndicatorCounted();

if(counted_bars<0) return(-1);

if(counted_bars>0) counted_bars--;

int limit = MathMin(MathMax(Bars-counted_bars,3*TimeFrame/Period()),Bars-1);

for(int i=limit;i>=0;i--)

{

int y = iBarShift(NULL,TimeFrame,Time);

int slope=iCustom(Symbol(),TimeFrame,"StepMA averages",MaLength,MaMethod,Sensitivity,StepSize,Shift,HighLow,5,y);

if (slope == 1) { UpBuffer=High; DnBuffer=Low; UpbBuffer = MathMax(Open,Close); DnbBuffer = MathMin(Open,Close); }

if (slope == -1) { DnBuffer=High; UpBuffer=Low; DnbBuffer = MathMax(Open,Close); UpbBuffer = MathMin(Open,Close); }

}

return(0);

}

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

[/PHP]

And then with same parameters they are going to be the same :

ok thank u.

Mladen, do you know where can i get some material in order to seriously learn this language, please?

just a question on this type of code:

[PHP]if (MABuffer>MABuffer) slope = 1;

it means: if (MABuffer[of current bar]>MA Buffer[of current bar + 1, so next bar]) of slope[of current bar] is equal to 1;

correct?

 
thefxpros:
ok thank u.

Mladen, do you know where can i get some material in order to seriously learn this language, please?

just a question on this type of code:

if (MABuffer>MABuffer) slope = 1;

it means: if (MABuffer[of current bar]>MA Buffer[of current bar + 1, so next bar] of slope[of current bar] is equal to 1;

correct?

Yes. Maybe just a slight rephrase : if current ma > previous ma then slope = 1

Of learning : I think the best place is to start with this post https://www.mql5.com/en/forum/172969/page2 (and of course, asking. Nobody have ever learned without asking)

 

request !

i just want a very simple EA :

- one EA only open a trade if 2 candles close in the same direction and close it at the end of the same candle

more explain .. ok ? .... if there is 2 candles close in green , so i will open a buy trade , this trade which i opened will be closed at the end of the same candle , thus also it will be opened sell trade after closed of 2 red candles ........ so this is only 1 easy restriction.

 

Hi,

i'm having fun in turning some indicator in MTF using icustom. The indicator works, but doesn't display color and arrows properly, why?

Where is the error, please?

wilders_trailing_stop_mtf.mq4

wilders_trailing_stop.mq4

//------------------------------------------------------------------

#property copyright "thefxpros"

#property link "thefxpros@katamail.com"

//------------------------------------------------------------------

#property indicator_chart_window

//#property indicator_color1 Orange

//#property indicator_color2 LimeGreen

//#property indicator_color3 LimeGreen

//#property indicator_color4 Orange

//#property indicator_width3 1

//#property indicator_width4 1

//

//

//

extern int TimeFrame = 0;

extern int Length = 2;

extern double Coeff = 1.75;

extern int LineWidth = 1;

extern int ArrowWidth = 1;

extern color UpLineClr = LimeGreen;

extern color DnLineClr = Orange;

extern color UpArrowClr = LimeGreen;

extern color DnArrowClr = Orange;

//

double WTS[];

double WTSDn[];

double arrUp[];

double arrDn[];

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

//| |

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

int init()

{

IndicatorBuffers(4);

SetIndexBuffer(0,WTS); SetIndexStyle(0,DRAW_LINE, EMPTY, LineWidth, DnLineClr);

SetIndexBuffer(1,WTSDn); SetIndexStyle(1,DRAW_LINE, EMPTY, LineWidth, UpLineClr);

SetIndexBuffer(2,arrUp); SetIndexStyle(2,DRAW_ARROW, EMPTY, ArrowWidth, UpArrowClr); SetIndexArrow(2,SYMBOL_ARROWUP);

SetIndexBuffer(3,arrDn); SetIndexStyle(3,DRAW_ARROW, EMPTY, ArrowWidth, DnArrowClr); SetIndexArrow(3,SYMBOL_ARROWDOWN);

IndicatorShortName("Wilders trailing stop MTF ("+Length+","+Coeff+")");

Length = MathMax(Length,1);

switch(TimeFrame)

{

case 1 : string TimeFrameStr="Period_M1"; break;

case 5 : TimeFrameStr="Period_M5"; break;

case 15 : TimeFrameStr="Period_M15"; break;

case 30 : TimeFrameStr="Period_M30"; break;

case 60 : TimeFrameStr="Period_H1"; break;

case 240 : TimeFrameStr="Period_H4"; break;

case 1440 : TimeFrameStr="Period_D1"; break;

case 10080 : TimeFrameStr="Period_W1"; break;

case 43200 : TimeFrameStr="Period_MN1"; break;

default : TimeFrameStr="Current Timeframe";

}

IndicatorShortName("Wilders trailing stop MTF ("+TimeFrameStr+")");

return(0);

}

//----

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

//| MTF function |

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

int start()

{

datetime TimeArray[];

int i,limit,y=0,counted_bars=IndicatorCounted();

// Plot defined time frame on to current time frame

ArrayCopySeries(TimeArray,MODE_TIME,Symbol(),TimeFrame);

limit= MathMin(Bars-counted_bars+3*TimeFrame/Period(),Bars-1);

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

{

if (Time<TimeArray[y]) y++;

/*********************************************************************************************************

Add your main indicator loop below. You can reference an existing indicator with its iName or iCustom.

Rule 1: Add extern inputs above for all neccesary values

Rule 2: Use 'TimeFrame' for the indicator time frame

Rule 3: Use 'y' for your indicator's shift value

********************************************************************************************************/

WTS=iCustom(Symbol(),TimeFrame,"Wilders trailing stop",Length,Coeff,0,y);

WTSDn=iCustom(Symbol(),TimeFrame,"Wilders trailing stop",Length,Coeff,1,y);

arrUp=iCustom(Symbol(),TimeFrame,"Wilders trailing stop",Length,Coeff,2,y);

arrDn=iCustom(Symbol(),TimeFrame,"Wilders trailing stop",Length,Coeff,3,y);

}

return(0);

}

//+------------------------------------------------------------------+
Reason: