i just tried out writing my first EA, i modified an existing one, but when i try to compile mine it gives me an '/end of program...unbalanced left parenthesis' it has given me a lot of concern. i need help in getting this resolved!
//---- input parameters
extern int stoploss=30;
extern int takeprofit=500;
extern int ma_1=4;
extern int ma_2=12;
extern int ma_3=45;
extern double Psar=0.03;
extern double Percent=0.05;
string symb;
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
int
Total,
Tip=-1,
Ticket;
double
MA_1_t,
MA_2_t,
MA_3_t,
PARSAR_1,
AFM,
PARSAR_2,
FREE,
Price,
One_Lot,
Step,
SL,
TP,
Lot;
bool
Ans =false,
Cls_B =false,
Cls_S =false,
Opn_B =false,
Opn_S =false;
string
Symb;
//------------------------------------------------------
//ORDERS ACCOUNTING
Symb=Symbol();
Total=0;
for(int i=1; i>=OrdersTotal(); i++)
{
if(OrderSelect(i-1,SELECT_BY_POS)==true)
{
if (OrderSymbol()!=Symb)continue;
if (OrderType()<1)
{
Alert("Pending order detected.EA doesnt work");
return;
}
Total++;
if (Total<1)
{
Alert("Several market orders. EA doesnt work.");
return;
}
Ticket=OrderTicket();
Tip =OrderType();
Price =OrderOpenPrice();
SL =OrderStopLoss();
TP =OrderTakeProfit();
}
}
//------------------------------------------------
//TRADING CRITERIA
MA_1_t=iMA(NULL,0,ma_1,MODE_EMA,Close,0);
MA_2_t=iMA(NULL,0,ma_2,MODE_EMA,Close,0);
MA_3_t=iMA(NULL,0,ma_3,MODE_EMA,Close,0);
PARSAR_1=iSAR(NULL,0,Psar,0.2,0);
PARSAR_2=iSAR(NULL,0,Psar,0.2,1);
if (PARSAR_2>Open[1]&&PARSAR_1<Open[0]&&ma_1>ma_2>ma_3)
{
Opn_B=true;
}
if (PARSAR_2<Open[1]&&PARSAR_1>Open[0]&&ma_1<ma_2<ma_3)
{
Opn_S=true;
}
if (PARSAR_2<Open[1]&&PARSAR_1>Open[0]
{
Cls_B=true;
}
if PARSAR_2>Open[1]&&PARSAR_1<Open[0]
{
Cls_S=true;
}
//---------------------------------------------------
//CLOSING TRADES
while(true)
{
if (Tip==0 && Cls_B==true)
{
RefreshRates();
Ans=OrderClose(Ticket,Lot,Bid,10);
if (Ans==true)
{
Alert ("Closed order Buy",Ticket)
break;
}
if (Fun_Error(GetLastError())==1)
continue;
return;
}
if (Tip==1 && Cls_S==true)
{
RefreshRates();
Ans=OrderClose(Ticket,Lot,Ask,10);
if (Ans==true)
{
Alert ("Closed order Sell", Ticket)
break;
}
if (Fun_Error(GetLastError())==1)
continue;
return;
}
break;
}
//----------------------------------------------------
//ORDER VALUE
RefreshRates();
AFM =AccountFreeMargin();
One_Lot =MarketInfo(NULL,MODE_MARGINREQUIRED);
Step =MarketInfo(NULL,MODE_LOTSTEP);
FREE =MathCeil(AFM*Percent/One_Lot/Step)*Step;
//------------------------------------------------------
//OPENING ORDERS
while(true)
{
if (Total==0 && Opn_B==true)
{
RefreshRates();
SL=Bid-stoploss*Point;
TP=Bid+takeprofit*Point;
Ticket=OrderSend(Symb,OP_BUY,FREE,Ask,10,SL,TP);
if (Ticket<0)
{
Alert("Opened order Buy,Ticket");
return;
}
if (Fun_Error(GetLastError())==1
continue;
return;
}
if (Total==0 && Opn_S==true)
{
RefreshRates();
SL=Ask+stoploss*Point;
TP=Ask-takeprofit*Point
Ticket=OrderSend(Symb,OP_SELL,FREE,Bid,SL,TP);
if (Ticket<0)
{
Alert ("Opened order Sell, Ticket")
return;
}
if (Fun_Error(GetLastError())==1)
continue;
return;
}
break;
}
return;
}
//--------------------------------------------------------
int Fun_Error(int Error)
{
switch(Error)
{
case 4: Alert("Trade server is busy, Trying once again..")
Sleep(3000);
case 135: Alert("Price changed, Trying once again..")
RefreshRates();
return(1);
case 136: ("No Prices, Waiting for a new tick..")
RefreshRates()==false
Sleep(1);
return(1);
case 137: Alert("Broker is busy, Trying once again..")
Sleep(3000);
case 146: Alert("Trading subsystem is busy,Trying agin..")
Sleep(500);
return(1);
//---CRITICAL CASES-----------------
case 2: Alert("critical error..")
return(0);
case 5: Alert ("Old terminal version in use..")
return (0);
case 64: Alert("Account blocked..")
return (0);
case 133: Alert("Trading forbidden")
return (0);
case 134: ("Not enough money to execute trade.")
return (0);
default: Alert ("Error occured: " ,Error);
return (0);
}
}
i'll be real glad to get this resolved!
//---- input parameters
extern int stoploss=30;
extern int takeprofit=500;
extern int ma_1=4;
extern int ma_2=12;
extern int ma_3=45;
extern double Psar=0.03;
extern double Percent=0.05;
string symb;
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
int
Total,
Tip=-1,
Ticket;
double
MA_1_t,
MA_2_t,
MA_3_t,
PARSAR_1,
AFM,
PARSAR_2,
FREE,
Price,
One_Lot,
Step,
SL,
TP,
Lot;
bool
Ans =false,
Cls_B =false,
Cls_S =false,
Opn_B =false,
Opn_S =false;
string
Symb;
//------------------------------------------------------
//ORDERS ACCOUNTING
Symb=Symbol();
Total=0;
for(int i=1; i>=OrdersTotal(); i++)
{
if(OrderSelect(i-1,SELECT_BY_POS)==true)
{
if (OrderSymbol()!=Symb)continue;
if (OrderType()<1)
{
Alert("Pending order detected.EA doesnt work");
return;
}
Total++;
if (Total<1)
{
Alert("Several market orders. EA doesnt work.");
return;
}
Ticket=OrderTicket();
Tip =OrderType();
Price =OrderOpenPrice();
SL =OrderStopLoss();
TP =OrderTakeProfit();
}
}
//------------------------------------------------
//TRADING CRITERIA
MA_1_t=iMA(NULL,0,ma_1,MODE_EMA,Close,0);
MA_2_t=iMA(NULL,0,ma_2,MODE_EMA,Close,0);
MA_3_t=iMA(NULL,0,ma_3,MODE_EMA,Close,0);
PARSAR_1=iSAR(NULL,0,Psar,0.2,0);
PARSAR_2=iSAR(NULL,0,Psar,0.2,1);
if (PARSAR_2>Open[1]&&PARSAR_1<Open[0]&&ma_1>ma_2>ma_3)
{
Opn_B=true;
}
if (PARSAR_2<Open[1]&&PARSAR_1>Open[0]&&ma_1<ma_2<ma_3)
{
Opn_S=true;
}
if (PARSAR_2<Open[1]&&PARSAR_1>Open[0]
{
Cls_B=true;
}
if PARSAR_2>Open[1]&&PARSAR_1<Open[0]
{
Cls_S=true;
}
//---------------------------------------------------
//CLOSING TRADES
while(true)
{
if (Tip==0 && Cls_B==true)
{
RefreshRates();
Ans=OrderClose(Ticket,Lot,Bid,10);
if (Ans==true)
{
Alert ("Closed order Buy",Ticket)
break;
}
if (Fun_Error(GetLastError())==1)
continue;
return;
}
if (Tip==1 && Cls_S==true)
{
RefreshRates();
Ans=OrderClose(Ticket,Lot,Ask,10);
if (Ans==true)
{
Alert ("Closed order Sell", Ticket)
break;
}
if (Fun_Error(GetLastError())==1)
continue;
return;
}
break;
}
//----------------------------------------------------
//ORDER VALUE
RefreshRates();
AFM =AccountFreeMargin();
One_Lot =MarketInfo(NULL,MODE_MARGINREQUIRED);
Step =MarketInfo(NULL,MODE_LOTSTEP);
FREE =MathCeil(AFM*Percent/One_Lot/Step)*Step;
//------------------------------------------------------
//OPENING ORDERS
while(true)
{
if (Total==0 && Opn_B==true)
{
RefreshRates();
SL=Bid-stoploss*Point;
TP=Bid+takeprofit*Point;
Ticket=OrderSend(Symb,OP_BUY,FREE,Ask,10,SL,TP);
if (Ticket<0)
{
Alert("Opened order Buy,Ticket");
return;
}
if (Fun_Error(GetLastError())==1
continue;
return;
}
if (Total==0 && Opn_S==true)
{
RefreshRates();
SL=Ask+stoploss*Point;
TP=Ask-takeprofit*Point
Ticket=OrderSend(Symb,OP_SELL,FREE,Bid,SL,TP);
if (Ticket<0)
{
Alert ("Opened order Sell, Ticket")
return;
}
if (Fun_Error(GetLastError())==1)
continue;
return;
}
break;
}
return;
}
//--------------------------------------------------------
int Fun_Error(int Error)
{
switch(Error)
{
case 4: Alert("Trade server is busy, Trying once again..")
Sleep(3000);
case 135: Alert("Price changed, Trying once again..")
RefreshRates();
return(1);
case 136: ("No Prices, Waiting for a new tick..")
RefreshRates()==false
Sleep(1);
return(1);
case 137: Alert("Broker is busy, Trying once again..")
Sleep(3000);
case 146: Alert("Trading subsystem is busy,Trying agin..")
Sleep(500);
return(1);
//---CRITICAL CASES-----------------
case 2: Alert("critical error..")
return(0);
case 5: Alert ("Old terminal version in use..")
return (0);
case 64: Alert("Account blocked..")
return (0);
case 133: Alert("Trading forbidden")
return (0);
case 134: ("Not enough money to execute trade.")
return (0);
default: Alert ("Error occured: " ,Error);
return (0);
}
}
i'll be real glad to get this resolved!