//+--------------------------------------------------------------------------+//| 3 MA Cross with alert.mq4 |//| mladen |//+--------------------------------------------------------------------------+#property copyright"mladen"#property link"mladenfx@gmail.com"#property indicator_chart_window#property indicator_buffers9#property indicator_color1 Aqua
#property indicator_color2 Orange
#property indicator_color3 DodgerBlue
#property indicator_color4 Red
#property indicator_color5 Blue
#property indicator_color6 FireBrick
#property indicator_color7 Blue
#property indicator_color8 LimeGreen
#property indicator_color9 Red
#property indicator_width12#property indicator_width22#property indicator_width32#property indicator_width42#property indicator_width52#property indicator_width62#property indicator_width72#property indicator_width82#property indicator_width92//////////externstring TimeFrame = "Current time frame";
externint FasterMA = 10;//5;externint FasterShift = 0;
externENUM_MA_METHOD FasterMode = 1;
externENUM_APPLIED_PRICE FasterPrice = PRICE_CLOSE;
externint MediumMA = 20;
externint MediumShift = 0;
externENUM_MA_METHOD MediumMode = 1;
externENUM_APPLIED_PRICE MediumPrice = PRICE_CLOSE;
externint SlowerMA = 40;//34;externint SlowerShift = 0;
externENUM_MA_METHOD SlowerMode = 1;
externENUM_APPLIED_PRICE SlowerPrice = PRICE_CLOSE;
externbool showMAs = true;
externbool alertsOn = false;
externbool alertsOnCurrent = true;
externbool alertsOnFastCrossMiddle = true;
externbool alertsOnFastCrossSlow = true;
externbool alertsOnMiddleCrossSlow = true;
externbool alertsMessage = true;
externbool alertsSound = false;
externbool alertsNotify = false;
externbool alertsEmail = false;
externbool showarrows_ms = false;//true;externbool showarrows_fs = true;
externbool showarrows_fm = true;
externint arrowUpCode_ms = 159;
externint arrowDownCode_ms = 159;
externint arrowUpCode_fs = 233;
externint arrowDownCode_fs = 234;
externint arrowUpCode_fm = 116;
externint arrowDownCode_fm = 116;
externbool Interpolate = true;
externbool ArrowsOnFirstBar = false;
externdouble arrowsFMGap = 0.50;
externdouble arrowsFSGap = 0.75;
externdouble arrowsMSGap = 1.00;
//////////double CrossfmUp[];
double CrossfmDn[];
double CrossfsUp[];
double CrossfsDn[];
double CrossmsUp[];
double CrossmsDn[];
double ma1[];
double ma2[];
double ma3[];
double trendfm[];
double trendfs[];
double trendms[];
//////////string indicatorFileName;
bool returnBars;
int timeFrame;
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+//////////int init()
{
IndicatorBuffers(12);
//SetIndexBuffer(0,CrossmsUp); SetIndexStyle(0, DRAW_ARROW); SetIndexArrow(0,arrowUpCode) ;SetIndexBuffer(0,CrossmsUp); if (showarrows_ms) { SetIndexStyle(0, DRAW_ARROW); SetIndexArrow(0,arrowUpCode_ms) ; } elseSetIndexStyle(0,DRAW_NONE);
//SetIndexBuffer(1,CrossmsDn); SetIndexStyle(1, DRAW_ARROW); SetIndexArrow(1,arrowDownCode);SetIndexBuffer(1,CrossmsDn); if (showarrows_ms) { SetIndexStyle(1, DRAW_ARROW); SetIndexArrow(1,arrowDownCode_ms); } elseSetIndexStyle(1,DRAW_NONE);
//SetIndexBuffer(2,CrossfsUp); SetIndexStyle(2, DRAW_ARROW); SetIndexArrow(2,arrowUpCode) ;SetIndexBuffer(2,CrossfsUp); if (showarrows_fs) { SetIndexStyle(2, DRAW_ARROW); SetIndexArrow(2,arrowUpCode_fs) ; } elseSetIndexStyle(2,DRAW_NONE);
//SetIndexBuffer(3,CrossfsDn); SetIndexStyle(3, DRAW_ARROW); SetIndexArrow(3,arrowDownCode);SetIndexBuffer(3,CrossfsDn); if (showarrows_fs) { SetIndexStyle(3, DRAW_ARROW); SetIndexArrow(3,arrowDownCode_fs); } elseSetIndexStyle(3,DRAW_NONE);
//SetIndexBuffer(4,CrossfmUp); SetIndexStyle(4, DRAW_ARROW); SetIndexArrow(4,arrowUpCode) ;SetIndexBuffer(4,CrossfmUp); if (showarrows_fm) { SetIndexStyle(4, DRAW_ARROW); SetIndexArrow(4,arrowUpCode_fm) ; } elseSetIndexStyle(4,DRAW_NONE);
//SetIndexBuffer(5,CrossfmDn); SetIndexStyle(5, DRAW_ARROW); SetIndexArrow(5,arrowDownCode);SetIndexBuffer(5,CrossfmDn); if (showarrows_fm) { SetIndexStyle(5, DRAW_ARROW); SetIndexArrow(5,arrowDownCode_fm); } elseSetIndexStyle(5,DRAW_NONE);
SetIndexBuffer(6,ma1);
SetIndexBuffer(7,ma2);
SetIndexBuffer(8,ma3);
SetIndexBuffer(9 ,trendfm);
SetIndexBuffer(10,trendfs);
SetIndexBuffer(11,trendms);
if (showMAs)
{
SetIndexStyle(6,DRAW_LINE);
SetIndexStyle(7,DRAW_LINE);
SetIndexStyle(8,DRAW_LINE);
}
else
{
SetIndexStyle(6,DRAW_NONE);
SetIndexStyle(7,DRAW_NONE);
SetIndexStyle(8,DRAW_NONE);
}
//////////
indicatorFileName = WindowExpertName();
returnBars = TimeFrame == "returnBars"; if (returnBars) return(0);
timeFrame = stringToTimeFrame(TimeFrame);
SetIndexShift(6,FasterShift*timeFrame/Period());
SetIndexShift(7,MediumShift*timeFrame/Period());
SetIndexShift(8,SlowerShift*timeFrame/Period());
IndicatorShortName(timeFrameToString(timeFrame)+" 3 ma cross ");
return(0);
}
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+//////////int start()
{
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
int limit=MathMin(Bars-counted_bars,Bars-1);
if (FasterShift < 0) limit = MathMax(limit,-FasterShift);
if (MediumShift < 0) limit = MathMax(limit,-MediumShift);
if (SlowerShift < 0) limit = MathMax(limit,-SlowerShift);
if (returnBars) { CrossmsUp[0] = limit+1; return(0); }
if (timeFrame!=Period())
{
int shift = -1; if (ArrowsOnFirstBar) shift=1;
limit = MathMax(limit,MathMin(Bars-1,iCustom(NULL,timeFrame,indicatorFileName,"returnBars",0,0)*timeFrame/Period()));
for (int i=limit; i>=0; i--)
{
int y = iBarShift(NULL,timeFrame,Time[i]);
int x = iBarShift(NULL,timeFrame,Time[i+shift]);
ma1[i] = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",FasterMA,0,FasterMode,FasterPrice,MediumMA,0,MediumMode,MediumPrice,SlowerMA,0,SlowerMode,SlowerPrice,showMAs,alertsOn,alertsOnCurrent,alertsOnFastCrossMiddle,alertsOnFastCrossSlow,alertsOnMiddleCrossSlow,alertsMessage,alertsSound,alertsNotify,alertsEmail,showarrows_ms,showarrows_fs,showarrows_fm,6,y);
ma2[i] = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",FasterMA,0,FasterMode,FasterPrice,MediumMA,0,MediumMode,MediumPrice,SlowerMA,0,SlowerMode,SlowerPrice,showMAs,alertsOn,alertsOnCurrent,alertsOnFastCrossMiddle,alertsOnFastCrossSlow,alertsOnMiddleCrossSlow,alertsMessage,alertsSound,alertsNotify,alertsEmail,showarrows_ms,showarrows_fs,showarrows_fm,7,y);
ma3[i] = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",FasterMA,0,FasterMode,FasterPrice,MediumMA,0,MediumMode,MediumPrice,SlowerMA,0,SlowerMode,SlowerPrice,showMAs,alertsOn,alertsOnCurrent,alertsOnFastCrossMiddle,alertsOnFastCrossSlow,alertsOnMiddleCrossSlow,alertsMessage,alertsSound,alertsNotify,alertsEmail,showarrows_ms,showarrows_fs,showarrows_fm,8,y);
CrossfmUp[i] = EMPTY_VALUE;
CrossfmDn[i] = EMPTY_VALUE;
CrossfsUp[i] = EMPTY_VALUE;
CrossfsDn[i] = EMPTY_VALUE;
CrossmsUp[i] = EMPTY_VALUE;
CrossmsDn[i] = EMPTY_VALUE;
trendfm[i] = trendfm[i+1];
trendfs[i] = trendfs[i+1];
trendms[i] = trendms[i+1];
if (x!=y)
{
if (ma1[i]>ma2[i]) trendfm[i] = 1;
if (ma1[i]<ma2[i]) trendfm[i] = -1;
if (ma1[i]>ma3[i]) trendfs[i] = 1;
if (ma1[i]<ma3[i]) trendfs[i] = -1;
if (ma2[i]>ma3[i]) trendms[i] = 1;
if (ma2[i]<ma3[i]) trendms[i] = -1;
double range = iATR(NULL,0,15,i);
if (alertsOnFastCrossMiddle && trendfm[i]!=trendfm[i+1])
if (trendfm[i] == 1)
CrossfmUp[i] = MathMin(ma1[i],ma2[i])-range*arrowsFMGap;
else CrossfmDn[i] = MathMax(ma1[i],ma2[i])+range*arrowsFMGap;
if (alertsOnFastCrossSlow && trendfs[i]!=trendfs[i+1])
if (trendfs[i] == 1)
CrossfsUp[i] = MathMin(ma1[i],ma3[i])-range*arrowsFSGap;
else CrossfsDn[i] = MathMax(ma1[i],ma3[i])+range*arrowsFSGap;
if (alertsOnMiddleCrossSlow && trendms[i]!=trendms[i+1])
if (trendms[i] == 1)
CrossmsUp[i] = MathMin(ma2[i],ma3[i])-range*arrowsMSGap;
else CrossmsDn[i] = MathMax(ma2[i],ma3[i])+range*arrowsMSGap;
}
//////////if (!Interpolate || y==iBarShift(NULL,timeFrame,Time[i-1])) continue;
//////////datetime time = iTime(NULL,timeFrame,y);
for(int n = 1; i+n < Bars && Time[i+n] >= time; n++) continue;
for(int k = 1; k < n; k++)
{
ma1[i+k] = ma1[i] + (ma1[i+n] - ma1[i]) * k/n;
ma2[i+k] = ma2[i] + (ma2[i+n] - ma2[i]) * k/n;
ma3[i+k] = ma3[i] + (ma3[i+n] - ma3[i]) * k/n;
}
}
return(0);
}
//////////for(i = limit; i >=0; i--)
{
CrossfmUp[i] = EMPTY_VALUE;
CrossfmDn[i] = EMPTY_VALUE;
CrossfsUp[i] = EMPTY_VALUE;
CrossfsDn[i] = EMPTY_VALUE;
CrossmsUp[i] = EMPTY_VALUE;
CrossmsDn[i] = EMPTY_VALUE;
ma1[i] = iMA(NULL, 0, FasterMA, FasterShift, FasterMode, FasterPrice, i);
ma2[i] = iMA(NULL, 0, MediumMA, MediumShift, MediumMode, MediumPrice, i);
ma3[i] = iMA(NULL, 0, SlowerMA, SlowerShift, SlowerMode, SlowerPrice, i);
trendfm[i] = trendfm[i+1];
trendfs[i] = trendfs[i+1];
trendms[i] = trendms[i+1];
if (ma1[i]>ma2[i]) trendfm[i] = 1;
if (ma1[i]<ma2[i]) trendfm[i] = -1;
if (ma1[i]>ma3[i]) trendfs[i] = 1;
if (ma1[i]<ma3[i]) trendfs[i] = -1;
if (ma2[i]>ma3[i]) trendms[i] = 1;
if (ma2[i]<ma3[i]) trendms[i] = -1;
//////////
range = iATR(NULL,0,15,i);
if (alertsOnFastCrossMiddle && trendfm[i]!=trendfm[i+1])
if (trendfm[i] == 1)
CrossfmUp[i] = MathMin(ma1[i],ma2[i])-range*arrowsFMGap;
else CrossfmDn[i] = MathMax(ma1[i],ma2[i])+range*arrowsFMGap;
if (alertsOnFastCrossSlow && trendfs[i]!=trendfs[i+1])
if (trendfs[i] == 1)
CrossfsUp[i] = MathMin(ma1[i],ma3[i])-range*arrowsFSGap;
else CrossfsDn[i] = MathMax(ma1[i],ma3[i])+range*arrowsFSGap;
if (alertsOnMiddleCrossSlow && trendms[i]!=trendms[i+1])
if (trendms[i] == 1)
CrossmsUp[i] = MathMin(ma2[i],ma3[i])-range*arrowsMSGap;
else CrossmsDn[i] = MathMax(ma2[i],ma3[i])+range*arrowsMSGap;
}
manageAlerts();
return(0);
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+////////void manageAlerts()
{
if (alertsOn)
{
int whichBar=1; if (alertsOnCurrent) whichBar = 0;
//////////staticstring mess1 = "";
staticdatetime time1 = 0;
if (alertsOnFastCrossMiddle && trendfm[whichBar]!=trendfm[whichBar+1])
if (trendfm[whichBar] == 1)
doAlert(mess1,time1,"Fast MA crossed Medium MA UP");
else doAlert(mess1,time1,"Fast MA crossed Medium MA DOWN");
staticstring mess2 = "";
staticdatetime time2 = 0;
if (alertsOnFastCrossSlow && trendfs[whichBar]!=trendfs[whichBar+1])
if (trendfs[whichBar] == 1)
doAlert(mess2,time2,"Fast MA crossed Slow MA UP");
else doAlert(mess2,time2,"Fast MA crossed Slow MA DOWN");
staticstring mess3 = "";
staticdatetime time3 = 0;
if (alertsOnMiddleCrossSlow && trendms[whichBar]!=trendms[whichBar+1])
if (trendms[whichBar] == 1)
doAlert(mess3,time3,"Medium MA crossed Slow MA UP");
else doAlert(mess3,time3,"Medium MA crossed Slow MA DOWN");
}
}
////////////void doAlert(string& previousAlert, datetime& previousTime, string doWhat)
{
string message;
if (previousAlert != doWhat || previousTime != Time[0]) {
previousAlert = doWhat;
previousTime = Time[0];
//////////
message = StringConcatenate(Symbol()," ",timeFrameToString(timeFrame)," at ",TimeToStr(TimeLocal(),TIME_SECONDS)," 3 MA line crossing ",doWhat);
if (alertsMessage) Alert(message);
if (alertsNotify) SendNotification(message);
if (alertsEmail) SendMail(StringConcatenate(Symbol(),"3 MA line crossing"),message);
if (alertsSound) PlaySound("alert2.wav");
}
}
//+-------------------------------------------------------------------//| //+-------------------------------------------------------------------//////////string sTfTable[] = {"M1","M5","M10","M15","M30","H1","H4","D1","W1","MN"};
int iTfTable[] = {1,5,10,15,30,60,240,1440,10080,43200};
//////////int stringToTimeFrame(string tfs)
{
tfs = stringUpperCase(tfs);
for (int i=ArraySize(iTfTable)-1; i>=0; i--)
if (tfs==sTfTable[i] || tfs==""+iTfTable[i]) return(MathMax(iTfTable[i],Period()));
return(Period());
}
//////////string timeFrameToString(int tf)
{
for (int i=ArraySize(iTfTable)-1; i>=0; i--)
if (tf==iTfTable[i]) return(sTfTable[i]);
return("");
}
//////////string stringUpperCase(string str)
{
string s = str;
for (int length=StringLen(str)-1; length>=0; length--)
{
int tchar = StringGetChar(s, length);
if((tchar > 96 && tchar < 123) || (tchar > 223 && tchar < 256))
s = StringSetChar(s, length, tchar - 32);
elseif(tchar > -33 && tchar < 0)
s = StringSetChar(s, length, tchar + 224);
}
return(s);
}
Hi
i have 3 ma cross alert indicator.This inidcaotr when is cross ma take alert.i want add code (candel price touch) to 3ma indictor.if is price touch ma1 ma2 ma3 send notification my gsm.How can i doing ? thank you help me ...sory my bad english
Help you with what? You haven't stated a problem, you stated a want. Show us your attempt (using the CODE button) and state the nature of your problem. No free help 2017.04.21
MT4: Learntocodeit. MT5: Beginlearningtocodeit. If you don't learn MQL4/5, there is no common language for us to communicate. If we tell you what you need, you can't code it. If we give you the code, you don't know how to integrate it into yours.
Allow the use of cookies to log in to the MQL5.com website.
Please enable the necessary setting in your browser, otherwise you will not be able to log in.
You are signed in. Two-factor authentication has been disabled. Set it up again and scan a new QR code, or continue with two-factor authentication disabled.
Hi, mladen, may I ask you - to add sound alerts to this indicator please? Many thanks
Mladen or coders,
How to create in mql4 container boxes like these in the picture? Obj_label?
Definitely this indicator is useful, especially when you combine it with zigzag.
Very good start to ea coding.
Definitely this indicator is useful, especially when you combine it with zigzag.
Very good start to ea coding.
Could you please post the source file .mql4 ?
Thanks
Hi
i have 3 ma cross alert indicator.This inidcaotr when is cross ma take alert.i want add code (candel price touch) to 3ma indictor.if is price touch ma1 ma2 ma3 send notification my gsm.How can i doing ? thank you help me ...sory my bad english
Please use the SRC button for including code in your post:
============
Mq4 youtube coding lessons - the thread with videos
============
All about MQL5 Wizard : create robots without programmingHelp me - Account Balance Sunday
Hi,
I'm trying since yesterday to tinker a cache of my all week since the Account Balance Sunday (market success Opening) reveals.
I need To bring to run an EA Account Balance of Sunday at the market success Opening to the Equity Manager correctly.
double usedacc = 0;
...
if (usedacc == 0 | | DayOfWeek () == 0) usedacc = Account Balance ();
...
Just does not work
Maybe someone can help me as I best l Can
Sorry to the bad English
HI.. Did you get a reply or answer to your question above?
I am trying to pickup the Sunday Balance
thanks
Please i need help on how to code ADX including +Di and -Di in MTL4, thanks
and how to use it open and close trade
<2 posts combined by moderator>
Asobeds: and how to use it open and close trade
Messages Editor
No free help 2017.04.21
Or pay someone. Top of every page is the link Freelance.
Hiring to write script - General - MQL5 programming forum 2018.05.12
MT5: Begin learning to code it.
If you don't learn MQL4/5, there is no common language for us to communicate. If we tell you what you need, you can't code it. If we give you the code, you don't know how to integrate it into yours.