Hi all. I need help with the code pasted below. It's a simple moving average cross alert that I tweaked a little and added an email alert. I'm not sure if the email alert will work as I keep getting 1 error when I compile. I've pasted the code below
I've gone through the code several times and I can't seem to pinpoint the problem. Thanks in advance for all your help.
The error says ... '\end_of_program' - unbalanced left parenthesis
//+------------------------------------------------------------------+
//| MACrossEarlyAlert.mq4 |
//| Mariano Silva |
//| [email protected] |
//+------------------------------------------------------------------+
#property copyright "Mariano Silva"
#property link ""
#property indicator_chart_window
//---- input parameters
extern bool EmailAlert = false;
extern int FastMAPeriod=50;
extern string Type="0-SMA, 1-EMA";
extern int FastMAType=1;
extern int SlowMAPeriod=1;
extern int SlowMAType=0;
extern int EarlyPips=15;
extern int ResetAlert=20;
extern color LineColor=Orange;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
string LineName;
//----
LineName=StringConcatenate(FastMAPeriod,"/",SlowMAPeriod," MA Cross");
ObjectDelete(LineName);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
// int counted_bars=IndicatorCounted();
double FastMALastBar, SlowMALastBar, PriceToCross, Cross, FastMATest, SlowMATest;
bool AlertEnabled=true;
string LineName=StringConcatenate(FastMAPeriod,"/",SlowMAPeriod," MA Cross");
// LineName=StringConcatenate(FastMAPeriod,"/",SlowMAPeriod," MA Cross");
//----
if(NewBar())
{
FastMALastBar=iMA(NULL,0,FastMAPeriod,0,FastMAType,PRICE_CLOSE,1);
SlowMALastBar=iMA(NULL,0,SlowMAPeriod,0,SlowMAType,PRICE_CLOSE,1);
PriceToCross=Open[0];
Cross=FastMALastBar-SlowMALastBar;
if(Cross>0.0)
{
while(Cross>0.0)
{
PriceToCross=PriceToCross-Point;
FastMATest=CalcMA(FastMAPeriod,FastMAType,PriceToCross,FastMALastBar);
SlowMATest=CalcMA(SlowMAPeriod,SlowMAType,PriceToCross,SlowMALastBar);
Cross=FastMATest-SlowMATest;
}
}
else
{
while(Cross<0.0)
{
PriceToCross=PriceToCross+Point;
FastMATest=CalcMA(FastMAPeriod,FastMAType,PriceToCross,FastMALastBar);
SlowMATest=CalcMA(SlowMAPeriod,SlowMAType,PriceToCross,SlowMALastBar);
Cross=FastMATest-SlowMATest;
}
}
ObjectDelete(LineName);
drawLine(PriceToCross,LineName,LineColor,0);
}
if(AlertEnabled)
{
if(MathAbs(Close[0]-PriceToCross)<=EarlyPips*Point)
{
Alert("Close to ",FastMAPeriod,"/",SlowMAPeriod," MA Cross on ",Symbol()," ",Period());
if EmailAlert SendMail("Close to ",FastMAPeriod,"/",SlowMAPeriod," MA Cross on ",Symbol()," ",Period();
AlertEnabled=false;
}
}
else
{
if(MathAbs(Close[0]-PriceToCross)>=ResetAlert*Point)
{
AlertEnabled=true;
}
}
//----
return(0);
}
//+------------------------------------------------------------------+
double CalcMA(int MAPeriod, int MAType, double PriceTest, double LastMA)
{
double MA, pr;
switch(MAType)
{
case 0:
{
MA=((LastMA*MAPeriod)-Close[MAPeriod]+PriceTest)/MAPeriod;
break;
}
case 1:
{
pr=2.0/(MAPeriod+1);
MA=PriceTest*pr+LastMA*(1-pr);
break;
}
}
return(MA);
}
void drawLine(double lvl,string name, color Col,int type)
{
ObjectCreate(name, OBJ_HLINE, 0, Time[0], lvl);//,Time[0],lvl);
if(type == 1)
ObjectSet(name, OBJPROP_STYLE, STYLE_SOLID);
else
ObjectSet(name, OBJPROP_STYLE, STYLE_DOT);
ObjectSet(name, OBJPROP_COLOR, Col);
ObjectSet(name,OBJPROP_WIDTH,1);
return;
}
bool NewBar() {
static datetime lastbar;
datetime curbar = Time[0];
if(lastbar!=curbar)
{
lastbar=curbar;
return (true);
}
else {
return(false);
}
}
I've gone through the code several times and I can't seem to pinpoint the problem. Thanks in advance for all your help.
The error says ... '\end_of_program' - unbalanced left parenthesis
//+------------------------------------------------------------------+
//| MACrossEarlyAlert.mq4 |
//| Mariano Silva |
//| [email protected] |
//+------------------------------------------------------------------+
#property copyright "Mariano Silva"
#property link ""
#property indicator_chart_window
//---- input parameters
extern bool EmailAlert = false;
extern int FastMAPeriod=50;
extern string Type="0-SMA, 1-EMA";
extern int FastMAType=1;
extern int SlowMAPeriod=1;
extern int SlowMAType=0;
extern int EarlyPips=15;
extern int ResetAlert=20;
extern color LineColor=Orange;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
string LineName;
//----
LineName=StringConcatenate(FastMAPeriod,"/",SlowMAPeriod," MA Cross");
ObjectDelete(LineName);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
// int counted_bars=IndicatorCounted();
double FastMALastBar, SlowMALastBar, PriceToCross, Cross, FastMATest, SlowMATest;
bool AlertEnabled=true;
string LineName=StringConcatenate(FastMAPeriod,"/",SlowMAPeriod," MA Cross");
// LineName=StringConcatenate(FastMAPeriod,"/",SlowMAPeriod," MA Cross");
//----
if(NewBar())
{
FastMALastBar=iMA(NULL,0,FastMAPeriod,0,FastMAType,PRICE_CLOSE,1);
SlowMALastBar=iMA(NULL,0,SlowMAPeriod,0,SlowMAType,PRICE_CLOSE,1);
PriceToCross=Open[0];
Cross=FastMALastBar-SlowMALastBar;
if(Cross>0.0)
{
while(Cross>0.0)
{
PriceToCross=PriceToCross-Point;
FastMATest=CalcMA(FastMAPeriod,FastMAType,PriceToCross,FastMALastBar);
SlowMATest=CalcMA(SlowMAPeriod,SlowMAType,PriceToCross,SlowMALastBar);
Cross=FastMATest-SlowMATest;
}
}
else
{
while(Cross<0.0)
{
PriceToCross=PriceToCross+Point;
FastMATest=CalcMA(FastMAPeriod,FastMAType,PriceToCross,FastMALastBar);
SlowMATest=CalcMA(SlowMAPeriod,SlowMAType,PriceToCross,SlowMALastBar);
Cross=FastMATest-SlowMATest;
}
}
ObjectDelete(LineName);
drawLine(PriceToCross,LineName,LineColor,0);
}
if(AlertEnabled)
{
if(MathAbs(Close[0]-PriceToCross)<=EarlyPips*Point)
{
Alert("Close to ",FastMAPeriod,"/",SlowMAPeriod," MA Cross on ",Symbol()," ",Period());
if EmailAlert SendMail("Close to ",FastMAPeriod,"/",SlowMAPeriod," MA Cross on ",Symbol()," ",Period();
AlertEnabled=false;
}
}
else
{
if(MathAbs(Close[0]-PriceToCross)>=ResetAlert*Point)
{
AlertEnabled=true;
}
}
//----
return(0);
}
//+------------------------------------------------------------------+
double CalcMA(int MAPeriod, int MAType, double PriceTest, double LastMA)
{
double MA, pr;
switch(MAType)
{
case 0:
{
MA=((LastMA*MAPeriod)-Close[MAPeriod]+PriceTest)/MAPeriod;
break;
}
case 1:
{
pr=2.0/(MAPeriod+1);
MA=PriceTest*pr+LastMA*(1-pr);
break;
}
}
return(MA);
}
void drawLine(double lvl,string name, color Col,int type)
{
ObjectCreate(name, OBJ_HLINE, 0, Time[0], lvl);//,Time[0],lvl);
if(type == 1)
ObjectSet(name, OBJPROP_STYLE, STYLE_SOLID);
else
ObjectSet(name, OBJPROP_STYLE, STYLE_DOT);
ObjectSet(name, OBJPROP_COLOR, Col);
ObjectSet(name,OBJPROP_WIDTH,1);
return;
}
bool NewBar() {
static datetime lastbar;
datetime curbar = Time[0];
if(lastbar!=curbar)
{
lastbar=curbar;
return (true);
}
else {
return(false);
}
}