Download MetaTrader 5

help fixing an error

To add comments, please log in or register
user30456
37
user30456  

I'm new in the world of programing and i read a few articles on writing expert advisors, and i tried to write my own one but i keep getting these two errors :

'}' - unexpected end of program

'{' - unbalanced parentheses

 I don't know how to fix this can anyone tell me what should i 

thank you 

aschk
3
aschk  

I understand your frustration, this can be one of the hardest things to get to grips with when starting to program.

Basically parentheses as they are known, are both a { and } symbol.

The error you are getting is because you have either a { without a }, or a } without a {

e.g.

myfunction() {

... some stuff here



Notice in the above I forgot to finish with a }, thus I would get a unbalanced parentheses error.

It can also work the other way around

e.g.

myfunction()

... some stuff here

}


In the above I forgot the {

I suspect what you have is quite a few if/else type statements and you've forgotten to open or close one of these { } tags.


I hope this helps.

user30456
37
user30456  

thank you for your comment 

i don't think that's the problem because i looked at the code million times and i can't find the problem so i even wrote a new expert advisor startin from zero and in the end i got the same error

and even when i remove everything in the void ontick function i still get the same error 

i think it would be better if i put the code here :

 

 

 

 

#property copyright "karem talli"

#property link      "karem.talli@hotmail.com"

#property version   "1.00"

//--- The Trade Class

#include <Trade\Trade.mqh>

//--- The PositionInfo Class

#include <Trade\PositionInfo.mqh>

//--- The AccountInfo Class

#include <Trade\AccountInfo.mqh>

//--- The SymbolInfo Class

#include <Trade\SymbolInfo.mqh>

//INPUT PARAMETERS:

input int ma_period=8; // Moving average period

input int adx_period=8; // ADX period

input double vol=0.1; // Lots to trade

input int EA_magic=1515; // EA magic number

input int dev=100; // Deviation

input int take=250; // Take profit

input int stop=50; // Stop loss

/*OTHER PARAMETERS:*/

double adx[] , plus[] , minus[] , ma[];

double mahandle , adxhandle;

double tkp , stl;

//CLASSES: 

CTrade trade;

CPositionInfo poinfo;

CSymbolInfo symbol;

CAccountInfo accinfo;

// TYLER

int Tyler()

{

     int durden=5;

     if (poinfo.Select(_Symbol)==true)

     {

       if (poinfo.Type()==POSITION_TYPE_BUY)

       {

         durden=1;

         if (/*CONDITIONS TO CLOSE A LONG POSITION*/)

         {

           durden=3;

         }

       }

       if (poinfo.Type()==POSITION_TYPE_SELL)

       {

         durden=2;

         if (/*CONDITIONS TO CLOSE A SHORT POSITIONS*/)

         {

           durden=4;

         }

       }

     }

     return(durden);

}

// MIKE THE CLOSER

void Mike()

{

    if (trade.PositionClose(_Symbol,dev))

    {

      Alert("Open position has been closed");

    } 

    else

    {

      Alert("Position was not closed - error: ",trade.ResultRetcodeDescription());

    }

}

// MOMBASA

int Mombasa()

{

     int troy=3;

     if (/*buy conditions*/)

     {

       troy=1;

     }

     if (/*sell conditions*/)

     {

       troy=2;

     }

     return(troy);

}

// SHAQ

void Shaq(int type)

{

     if (type==1)

     {

       double buyprice=NormalizeDouble(symbol.Bid(),_Digits);             //--- latest Bid price

       double stoploss=NormalizeDouble(symbol.Bid()+stl*_Point,_Digits);   //--- Stop Loss

       double takeprofit=NormalizeDouble(symbol.Bid()-tkp*_Point,_Digits); //--- Take Profit

       if (trade.PositionOpen(_Symbol,ORDER_TYPE_BUY,vol,buyprice,stoploss,takeprofit))

       {

         Alert("A long position has been opened with deal ticket no: ",trade.ResultDeal());

       }

       else

       {

         Alert("The Buy order request at Vol:",trade.RequestVolume(),

               ", sl:", trade.RequestSL(),", tp:",trade.RequestTP(), 

               ", price:", trade.RequestPrice(), 

               " could not be completed -error:",trade.ResultRetcodeDescription());

         return;

       }

     }

     if (type==2)

     {

       double sellprice=NormalizeDouble(symbol.Ask(),_Digits);             //--- latest Bid price

       double stopploss=NormalizeDouble(symbol.Ask()+stl*_Point,_Digits);   //--- Stop Loss

       double takeeprofit=NormalizeDouble(symbol.Ask()-tkp*_Point,_Digits); //--- Take Profit

       if (trade.PositionOpen(_Symbol,ORDER_TYPE_SELL,vol,sellprice,stopploss,takeeprofit))

       {

         Alert("A short position has been opened with deal ticket no: ",trade.ResultDeal());

       }

       else

       {

         Alert("The Sell order request at Vol:",trade.RequestVolume(),

               ", sl:", trade.RequestSL(),", tp:",trade.RequestTP(), 

               ", price:", trade.RequestPrice(), 

               " could not be completed -error:",trade.ResultRetcodeDescription());

         return;

     }

}

//| Expert initialization function                                   |

//+------------------------------------------------------------------+

int OnInit()

  {

      trade.SetExpertMagicNumber(EA_magic);

      trade.SetDeviationInPoints(dev);

      mahandle=iMA(_Symbol,_Period,ma_period,0,MODE_EMA,PRICE_CLOSE);

      adxhandle=iADX(_Symbol,_Period,adx_period);

      if ( mahandle<0 || adxhandle<0 ) 

         {

         Alert("Error creating handles for indicators! - error: ",GetLastError());

         return(1);

         }

   return(0);

  }

//+------------------------------------------------------------------+

//| Expert deinitialization function                                 |

//+------------------------------------------------------------------+

void OnDeinit(const int reason)

  {

     IndicatorRelease(adxhandle);

     IndicatorRelease(mahandle);

  }

//+------------------------------------------------------------------+

//| Expert tick function                                             |

//+------------------------------------------------------------------+

void OnTick()

  {

     MqlRates myrate[];

     ArraySetAsSeries(myrate,true);

     ArraySetAsSeries(adx,true);

     ArraySetAsSeries(plus,true);

     ArraySetAsSeries(minus,true);

     ArraySetAsSeries(ma,true);

     // copy rates

     if (CopyRates(_Symbol,_Period,0,4,myrate) < 0)

     {

       Alert("Error copying rates - error: ",GetLastError());

       return;

     }

     //check if we have enough bars

     static datetime lastime;

     datetime now = myrate[0].time;

     if (now==lastime)

     {

       return;

     }

     lastime=now;

     // copying buffers

     if ( CopyBuffer(adxhandle,0,0,4,adx) < 3 || CopyBuffer(adxhandle,1,0,4,plus) < 3 || CopyBuffer(adxhandle,2,0,4,minus) < 3 )

     {

       Alert("Error copying ADX buffers - error: ",GetLastError());

       return;

     } 

     if ( CopyBuffer(mahandle,0,0,4,ma) < 3)

     {

       Alert("Error copying MA buffer - error: ",GetLastError());

       return;

     }

     tkp = take;

     stl = stop;

     void Tristen()

     {

       int smilla = Tyler();

       if ( smilla == 1 || smilla == 2 )

       {

         return;

       }

       if ( smilla == 3 || smilla == 4 )

       {

         Mike();

       }

       if ( smilla == 5 )

       {

         becca = Mombasa();

         if ( becca == 1 )

         {

           Shaq(1);

         }

         if ( becca == 2 )

         {

           Shaq(2);

         }

       }

     }

  

  }

//+------------------------------------------------------------------+
user30456
37
user30456  

i finally found the problem it wasn't in the ontick where i was looking the whole time

thank you i appreciate your effort to help  

Alain Verleyen
Moderator
31476
Alain Verleyen  
Comments that do not relate to this topic, have been moved to "Help fixing error (mql4)".
To add comments, please log in or register