'First_time' - variable not defined C:\PROGRAM FILES\METATRADER 4\experts\My_First_EA.mq4 (50, 7)
I tried over the weekend to sort this out but went from two errors to nine! Not sure if I've got the code jumbled up somewhere. I got a bit lost in the middle of it all!
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.
'static' - semicolon expected C:\PROGRAM FILES\METATRADER 4\experts\My_First_EA.mq4 (42, 7)
Also,
'First_time' - variable not defined C:\PROGRAM FILES\METATRADER 4\experts\My_First_EA.mq4 (50, 7)
I tried over the weekend to sort this out but went from two errors to nine! Not sure if I've got the code jumbled up somewhere. I got a bit lost in the middle of it all!
Thanks for any help.
demag.
//+------------------------------------------------------------------+
//| 5 Minute Scalper My_First_EA.mq4 |
//| Coders Guru |
//| https://www.mql5.com/en/forum |
//+------------------------------------------------------------------+
#property copyright "Coders Guru"
#property link "https://www.forex-tsd.com"
//---- input parameters
extern double TakeProfit=8.0;
extern double Lots=0.1;
extern double TrailingStop=10.0;
extern double StopLoss=-15.0;
extern bool UseStopLoss=true;
extern int ShortEma = 3;
extern int LongEma = 7;
extern int LongSma = 25;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
int Crossed (double line1 , double line2 , double line3)
static int last_direction = 0;
static int current_direction = 0;
// Don't work in the first load, wait for first cross!
static bool first_time = true;
if(first_time == true)
{
First_time == false;
return (0);
}
{
if(line1>line2>line3)current_direction = 1; //up
if(line1<line2<line3)current_direction = 2; //down
if(current_direction != last_direction) //changed
{
last_direction = current_direction;
return (last_direction);
}
else
{
return (0);
}
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
int cnt, ticket, total;
double shortEma, longEma, longSma;
if(Bars<100)
{
Print("bars less than 100");
return(0);
}
if(TakeProfit<1)
{
Print("TakeProfit less than 1");
return(0); // check TakeProfit
}
shortEma = iMA(NULL,0,3,0,MODE_EMA,PRICE_CLOSE,0);
longEma = iMA(NULL,0,7,0,MODE_EMA,PRICE_CLOSE,0);
longSma = iMA (NULL,0,25,0,MODE_SMA,PRICE_CLOSE,0);
int isCrossed = Crossed (shortEma,longEma,longSma);
total = OrdersTotal();
if(total < 1)
{
if(isCrossed == 1)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"My EA",12345,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
}
else Print("Error opening BUY order : ",GetLastError());
return(0);
}
if(isCrossed == 2)
// Delay action by "x" bars
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"My EA",12345,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
}
else Print("Error opening SELL order : ",GetLastError());
return(0);
}
return(0);
}
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY) // long position is opened
{
// should it be closed?
if(isCrossed == 2)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position
return(0); // exit
}
// check for trailing stop
if(TrailingStop>0){
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<Bid-Point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
return(0);
}
}
}
}
else // go to short position
{
// should it be closed?
if(isCrossed == 1)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close position
return(0); // exit
}
// check for trailing stop
if(TrailingStop>0){
if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
return(0);
}
}
}
}
}
}
return(0);
}
//+------------------------------------------------------------------+