Can somebody help me to write code for Alert when fast Hull Moving Average crossing slow Hull MA.
hull MA i use is in attached file.
thank you for HELP. It means a lot to me.
Where "attached file" ?.
There's EA in MT called Moving Average, you can modify that one with your Hull MA.
Can somebody help me to write code
Since there are no slaves here, there are only two choices: learn to code or pay someone. We're not going to code it FOR you. We are willing to HELP you.
The CI you use is relevant only for coding the iCustom Call
Since there are no slaves here, there are only two choices: learn to code or pay someone. We're not going to code it FOR you. We are willing to HELP you.
The CI you use is relevant only for coding the iCustom Call
thank you and OK.
HOW MUCH?
Where "attached file" ?.
There's EA in MT called Moving Average, you can modify that one with your Hull MA.
//+------------------------------------------------------------------+
//| HMA15.mq4 |
//| Copyright © 2004-08, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004-08, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net/"
//---- indicator settings
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Aqua
#property indicator_width1 1
#property indicator_color2 Yellow
#property indicator_width2 1
#property indicator_color3 Magenta
#property indicator_width3 1
//---- indicator parameters
extern string note1="Hull Moving Average Period";
extern int HMA_Period= 50;
extern int MA_Shift=0;
extern string note2="0=Simple,1=Exponential";
extern string note3="2=Smooth,3=Linear Weighted";
extern int MA_Method=3;
extern string note4="0=High/Low,1=Close/Close";
extern int MA_Price=6;
extern string note5="--------------------------------------------";
extern string note6="Filter # default = 2.0";
extern double FilterNumber=2.0;
extern string note7="Draw Dots = true";
extern string note8="Draw Lines = false";
extern bool DrawDots=false;
extern string note9="--------------------------------------------";
//----
int aTake_Profit=48;
int aStop_Loss=38;
//extern string note10 = "--------------------------------------------";
extern string note11="turn on HMA Pop-up Alert = true";
extern string note12="turn off = false";
extern bool aAlerts=true;
extern string note13="--------------------------------------------";
extern string note14="send HMA Email Alert = true";
extern string note15="turn off = false";
//----
extern bool EmailOn=false;
extern bool aTurnedUp=false;
extern bool aTurnedDown=false;
//---- indicator buffers
double ind_buffer0[];
double ind_buffer1[];
double ind_buffer2[];
double buffer[];
//----
int draw_begin0;
string AlertPrefix;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
string GetTimeFrameStr()
{
switch(Period())
{
case 1 : string TimeFrameStr="M1"; break;
case 5 : TimeFrameStr="M5"; break;
case 15 : TimeFrameStr="M15"; break;
case 30 : TimeFrameStr="M30"; break;
case 60 : TimeFrameStr="H1"; break;
case 240 : TimeFrameStr="H4"; break;
case 1440 : TimeFrameStr="D1"; break;
case 10080 : TimeFrameStr="W1"; break;
case 43200 : TimeFrameStr="MN1"; break;
default : TimeFrameStr=Period();
}
return(TimeFrameStr);
}
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicator buffers mapping
IndicatorBuffers(4);
if(!SetIndexBuffer(0,ind_buffer0) && !SetIndexBuffer(1,ind_buffer1)
&& !SetIndexBuffer(2,ind_buffer2) && !SetIndexBuffer(3, buffer))
Print("cannot set indicator buffers!");
// ArraySetAsSeries(ind_buffer1,true);
//---- drawing settings
if (DrawDots)
{
SetIndexStyle(0,DRAW_ARROW);
SetIndexStyle(1,DRAW_ARROW);
SetIndexStyle(2,DRAW_ARROW);
SetIndexArrow(0,159);
SetIndexArrow(1,159);
SetIndexArrow(2,159);
}
else
{
SetIndexStyle(0,DRAW_LINE);
SetIndexStyle(1,DRAW_LINE);
SetIndexStyle(2,DRAW_LINE);
}
draw_begin0=HMA_Period+MathFloor(MathSqrt(HMA_Period));
SetIndexDrawBegin(0,draw_begin0);
SetIndexDrawBegin(1,draw_begin0);
SetIndexDrawBegin(2,draw_begin0);
IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+1);
//---- name for DataWindow and indicator subwindow label
IndicatorShortName("HMA("+HMA_Period+")");
SetIndexLabel(0,"Hull Moving Average");
//---- initialization done
// my AlertPrefix=Symbol()+" ("+GetTimeFrameStr()+"): ";
return(0);
}
//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence |
//+------------------------------------------------------------------+
int start()
{
int limit,i;
int counted_bars=IndicatorCounted();
double tmp, tmpPrevious;
//---- check for possible errors
if(counted_bars<1)
{
for(i=1;i<=draw_begin0;i++) buffer[Bars-i]=0;
for(i=1;i<=HMA_Period;i++)
{
ind_buffer0[Bars-i]=0;
ind_buffer1[Bars-i]=0;
ind_buffer2[Bars-i]=0;
}
}
//---- last counted bar will be recounted
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
//---- MA difference counted in the 1-st buffer
for(i=0; i<limit; i++)
{
buffer[i]=iMA(NULL,0,MathFloor
(HMA_Period/FilterNumber),MA_Shift,MA_Method,MA_Price,i)*2- //change the HMA_Period/xx will change when the colors chang at given rate
iMA(NULL,0,HMA_Period,MA_Shift,MA_Method,MA_Price,i);
}
//---- HMA counted in the 0-th buffer
tmp=iMAOnArray(buffer,0,MathFloor(MathSqrt(HMA_Period)),0,MA_Method,0);
for(i=1; i<limit; i++)
{
tmpPrevious=iMAOnArray(buffer,0,MathFloor(MathSqrt
(HMA_Period)),0,MA_Method,i);
if (tmpPrevious > tmp)
{
ind_buffer0[i]=EMPTY_VALUE;
ind_buffer1[i]=EMPTY_VALUE;
ind_buffer2[i]=tmpPrevious;
ind_buffer2[i-1]=tmp; // !
}
else if (tmpPrevious < tmp)
{
ind_buffer0[i]=tmpPrevious;
ind_buffer0[i-1]=tmp; // !
ind_buffer1[i]=EMPTY_VALUE;
ind_buffer2[i]=EMPTY_VALUE;
}
else
{
ind_buffer0[i]=CLR_NONE;
ind_buffer1[i]=tmpPrevious;
ind_buffer2[i-1]=tmp; // !
ind_buffer2[i]=CLR_NONE;
}
if (aAlerts)
{
if (tmpPrevious < tmp) //change the wt[?] number will change when the signal will trigger based on # of last bars
{
if (!aTurnedUp)
{
if (BarChanged())
{
Alert(AlertPrefix+"HMA "+(aRperiodf())+" Alert\nBUY signal @ Ask = $",Ask,"; Bid = $",Bid,"\nDate & Time = ",TimeToStr(CurTime(),TIME_DATE)," ",TimeHour(CurTime()),":",TimeMinute(CurTime()));
PlaySound("alert.wav");
if (EmailOn)
{
SendMail(AlertPrefix,"HMA Alert\nBUY signal @ Ask = $"+DoubleToStr(Ask,4)+", Bid = $"+DoubleToStr(Bid,4)+", Date & Time = "+TimeToStr(CurTime(),TIME_DATE)+" "+TimeHour(CurTime())+":"+TimeMinute(CurTime())+" Stop: "+ DoubleToStr(aGetSLl(),4)+" Limit: "+DoubleToStr(aGetTPl(),4));
}
}
aTurnedUp=true;
aTurnedDown=false;
}
}
if (tmpPrevious > tmp) //change the wt[?] number will change when the signal will trigger based on # of last bars
{
if (!aTurnedDown)
{
if (BarChanged())
{
Alert(AlertPrefix+"HMA Alert\nSELL signal @ Ask = $",Ask,"; Bid = $",Bid,"\nDate & Time = ",TimeToStr(CurTime(),TIME_DATE)," ",TimeHour(CurTime()),":",TimeMinute(CurTime()));
PlaySound("alert.wav");
if (EmailOn)
{
SendMail(AlertPrefix,"HMA Alert\nSELL signal @ Ask = $"+DoubleToStr(Ask,4)+", Bid = $"+DoubleToStr(Bid,4)+", Date & Time = "+TimeToStr(CurTime(),TIME_DATE)+" "+TimeHour(CurTime())+":"+TimeMinute(CurTime())+" Stop: "+ DoubleToStr(aGetSLs(),4)
+" Limit: "+DoubleToStr(aGetTPs(),4));
}
}
aTurnedDown=true;
aTurnedUp=false;
}
}
}
tmp=tmpPrevious;
}
//---- done
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
bool BarChanged()
{
static datetime dt=0;
if (dt!=Time[0])
{
dt=Time[0];
return(true);
}
return(false);
}
//---- done
return(0);
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double aGetTPs() { return(Bid-aTake_Profit*Point); }
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double aGetTPl() { return(Ask+aTake_Profit*Point); }
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double aGetSLs() { return(Bid+aStop_Loss*Point); }
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double aGetSLl() { return(Ask-aStop_Loss*Point); }
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int aRperiodf() { return(HMA_Period*Point*10000); }
//+------------------------------------------------------------------+
thank you and OK.
HOW MUCH?
Please, re-post your code using SRC button. Thank you. :)
//+------------------------------------------------------------------+ //| HMA15.mq4 | //| Copyright © 2004-08, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2004-08, MetaQuotes Software Corp." #property link "http://www.metaquotes.net/" //---- indicator settings #property indicator_chart_window #property indicator_buffers 3 #property indicator_color1 Aqua #property indicator_width1 1 #property indicator_color2 Yellow #property indicator_width2 1 #property indicator_color3 Magenta #property indicator_width3 1 //---- indicator parameters extern string note1="Hull Moving Average Period"; extern int HMA_Period= 50; extern int MA_Shift=0; extern string note2="0=Simple,1=Exponential"; extern string note3="2=Smooth,3=Linear Weighted"; extern int MA_Method=3; extern string note4="0=High/Low,1=Close/Close"; extern int MA_Price=6; extern string note5="--------------------------------------------"; extern string note6="Filter # default = 2.0"; extern double FilterNumber=2.0; extern string note7="Draw Dots = true"; extern string note8="Draw Lines = false"; extern bool DrawDots=false; extern string note9="--------------------------------------------"; //---- int aTake_Profit=48; int aStop_Loss=38; //extern string note10 = "--------------------------------------------"; extern string note11="turn on HMA Pop-up Alert = true"; extern string note12="turn off = false"; extern bool aAlerts=true; extern string note13="--------------------------------------------"; extern string note14="send HMA Email Alert = true"; extern string note15="turn off = false"; //---- extern bool EmailOn=false; extern bool aTurnedUp=false; extern bool aTurnedDown=false; //---- indicator buffers double ind_buffer0[]; double ind_buffer1[]; double ind_buffer2[]; double buffer[]; //---- int draw_begin0; string AlertPrefix; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ string GetTimeFrameStr() { switch(Period()) { case 1 : string TimeFrameStr="M1"; break; case 5 : TimeFrameStr="M5"; break; case 15 : TimeFrameStr="M15"; break; case 30 : TimeFrameStr="M30"; break; case 60 : TimeFrameStr="H1"; break; case 240 : TimeFrameStr="H4"; break; case 1440 : TimeFrameStr="D1"; break; case 10080 : TimeFrameStr="W1"; break; case 43200 : TimeFrameStr="MN1"; break; default : TimeFrameStr=Period(); } return(TimeFrameStr); } //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicator buffers mapping IndicatorBuffers(4); if(!SetIndexBuffer(0,ind_buffer0) && !SetIndexBuffer(1,ind_buffer1) && !SetIndexBuffer(2,ind_buffer2) && !SetIndexBuffer(3, buffer)) Print("cannot set indicator buffers!"); // ArraySetAsSeries(ind_buffer1,true); //---- drawing settings if (DrawDots) { SetIndexStyle(0,DRAW_ARROW); SetIndexStyle(1,DRAW_ARROW); SetIndexStyle(2,DRAW_ARROW); SetIndexArrow(0,159); SetIndexArrow(1,159); SetIndexArrow(2,159); } else { SetIndexStyle(0,DRAW_LINE); SetIndexStyle(1,DRAW_LINE); SetIndexStyle(2,DRAW_LINE); } draw_begin0=HMA_Period+MathFloor(MathSqrt(HMA_Period)); SetIndexDrawBegin(0,draw_begin0); SetIndexDrawBegin(1,draw_begin0); SetIndexDrawBegin(2,draw_begin0); IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+1); //---- name for DataWindow and indicator subwindow label IndicatorShortName("HMA("+HMA_Period+")"); SetIndexLabel(0,"Hull Moving Average"); //---- initialization done // my AlertPrefix=Symbol()+" ("+GetTimeFrameStr()+"): "; return(0); } //+------------------------------------------------------------------+ //| Moving Averages Convergence/Divergence | //+------------------------------------------------------------------+ int start() { int limit,i; int counted_bars=IndicatorCounted(); double tmp, tmpPrevious; //---- check for possible errors if(counted_bars<1) { for(i=1;i<=draw_begin0;i++) buffer[Bars-i]=0; for(i=1;i<=HMA_Period;i++) { ind_buffer0[Bars-i]=0; ind_buffer1[Bars-i]=0; ind_buffer2[Bars-i]=0; } } //---- last counted bar will be recounted if(counted_bars>0) counted_bars--; limit=Bars-counted_bars; //---- MA difference counted in the 1-st buffer for(i=0; i<limit; i++) { buffer[i]=iMA(NULL,0,MathFloor (HMA_Period/FilterNumber),MA_Shift,MA_Method,MA_Price,i)*2- //change the HMA_Period/xx will change when the colors chang at given rate iMA(NULL,0,HMA_Period,MA_Shift,MA_Method,MA_Price,i); } //---- HMA counted in the 0-th buffer tmp=iMAOnArray(buffer,0,MathFloor(MathSqrt(HMA_Period)),0,MA_Method,0); for(i=1; i<limit; i++) { tmpPrevious=iMAOnArray(buffer,0,MathFloor(MathSqrt (HMA_Period)),0,MA_Method,i); if (tmpPrevious > tmp) { ind_buffer0[i]=EMPTY_VALUE; ind_buffer1[i]=EMPTY_VALUE; ind_buffer2[i]=tmpPrevious; ind_buffer2[i-1]=tmp; // ! } else if (tmpPrevious < tmp) { ind_buffer0[i]=tmpPrevious; ind_buffer0[i-1]=tmp; // ! ind_buffer1[i]=EMPTY_VALUE; ind_buffer2[i]=EMPTY_VALUE; } else { ind_buffer0[i]=CLR_NONE; ind_buffer1[i]=tmpPrevious; ind_buffer2[i-1]=tmp; // ! ind_buffer2[i]=CLR_NONE; } if (aAlerts) { if (tmpPrevious < tmp) //change the wt[?] number will change when the signal will trigger based on # of last bars { if (!aTurnedUp) { if (BarChanged()) { Alert(AlertPrefix+"HMA "+(aRperiodf())+" Alert\nBUY signal @ Ask = $",Ask,"; Bid = $",Bid,"\nDate & Time = ",TimeToStr(CurTime(),TIME_DATE)," ",TimeHour(CurTime()),":",TimeMinute(CurTime())); PlaySound("alert.wav"); if (EmailOn) { SendMail(AlertPrefix,"HMA Alert\nBUY signal @ Ask = $"+DoubleToStr(Ask,4)+", Bid = $"+DoubleToStr(Bid,4)+", Date & Time = "+TimeToStr(CurTime(),TIME_DATE)+" "+TimeHour(CurTime())+":"+TimeMinute(CurTime())+" Stop: "+ DoubleToStr(aGetSLl(),4)+" Limit: "+DoubleToStr(aGetTPl(),4)); } } aTurnedUp=true; aTurnedDown=false; } } if (tmpPrevious > tmp) //change the wt[?] number will change when the signal will trigger based on # of last bars { if (!aTurnedDown) { if (BarChanged()) { Alert(AlertPrefix+"HMA Alert\nSELL signal @ Ask = $",Ask,"; Bid = $",Bid,"\nDate & Time = ",TimeToStr(CurTime(),TIME_DATE)," ",TimeHour(CurTime()),":",TimeMinute(CurTime())); PlaySound("alert.wav"); if (EmailOn) { SendMail(AlertPrefix,"HMA Alert\nSELL signal @ Ask = $"+DoubleToStr(Ask,4)+", Bid = $"+DoubleToStr(Bid,4)+", Date & Time = "+TimeToStr(CurTime(),TIME_DATE)+" "+TimeHour(CurTime())+":"+TimeMinute(CurTime())+" Stop: "+ DoubleToStr(aGetSLs(),4) +" Limit: "+DoubleToStr(aGetTPs(),4)); } } aTurnedDown=true; aTurnedUp=false; } } } tmp=tmpPrevious; } //---- done return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool BarChanged() { static datetime dt=0; if (dt!=Time[0]) { dt=Time[0]; return(true); } return(false); } //---- done return(0); //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double aGetTPs() { return(Bid-aTake_Profit*Point); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double aGetTPl() { return(Ask+aTake_Profit*Point); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double aGetSLs() { return(Bid+aStop_Loss*Point); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double aGetSLl() { return(Ask-aStop_Loss*Point); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int aRperiodf() { return(HMA_Period*Point*10000); } //+------------------------------------------------------------------+
Please, re-post your code using SRC button. Thank you. :)
THANK SO MUCH FOR HELPING
THANK SO MUCH FOR HELPING
Dear dimamn,
When I said re-post, it meant edit your previous post with code and not creating a new one. ;)
;)
I hope i did not create too much inconvenience for you.
I am new to meta trader (switched from trade station) - feel really stupid .
Thanks ONEWITHZACHY for your TIME.
I hope i did not create too much inconvenience for you.
I am new to meta trader (switched from trade station) - feel really stupid .
Thanks ONEWITHZACHY for your TIME.
I've never said I'm gonna help ya :D, and it seem you don't even read my previous post about re-posting.
Having said that, however I do have question, do you want an alert when fast HMA crosses slow HMA (which mean creating new CI) OR do you want an alert when HMA change colors ?
want an alert when fast HMA crosses slow HMA
I did - just don't know how to re-post
thank you ONEWITHZACHY for your TIME any way :]

- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
Can somebody help me to write code for Alert when fast Hull Moving Average crossing slow Hull MA.
hull MA i use is in attached file.
thank you for HELP. It means a lot to me.