'OnInit' - unexpected token

 

This is my first time coding in MQL4

I'm not sure what the error is, I was following a video of youtube, and it seems my code has multiple errors even though it was the same, could this be because it was an old video and mql4 language updated?

Here is the code below

//+------------------------------------------------------------------+
//|                                                 UntitledEMAX.mq4 |
//|                                                Mark Flint Pillay |
//|                                         https://www.eidoyada.com |
//+------------------------------------------------------------------+
#property copyright "Mark Flint Pillay"
#property link      "https://www.eidoyada.com"
#property version   "1.00"
#property strict

extern int     MagicNumber=12345;
extern int     TakeProfit=50;
extern int     StopLoss=25;
extern double  LotSize=0.01;
extern int     FastMA=5;
extern int     FastMaShift=0;
extern int     FastMaMethod=0;
extern int     FastMaAppliedTo=0;
extern int     SlowMA=21;
extern int     SlowMaShift=0;
extern int     SlowMaMethod=0;
extern int     SlowMaAppliedTo=0

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit();
  {
//---
   double ticksize = MarketInfo(Symbol(), MODE_TICKSIZE);
      if(ticksize == 0.00001 || ticksize == 0.001);
      double pips = ticksize*10;
      else pips =ticksize;
      
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick();
  {
//---
     
   double CurrentFast   = iMA (NULL,0,FastMA,FastMaShift,FastMaMethod,FastMaAppliedTo,1);
   double PreviousFast  = iMA (NULL,0,FastMA,FastMaShift,FastMaMethod,FastMaAppliedTo,2);
   double CurrentSlow   = iMA (NULL,0,SlowMA,SlowMaShift,SlowMaMethod,SlowMaAppliedTo,1);
   double PreviousSlow  = iMA (NULL,0,SlowMA,SlowMaShift,SlowMaMethod,SlowMaAppliedTo,2);
     
     // if statement - Logic Comes Here 
   if(PreviousFast<PreviousSlow && CurrentFast>CurrentSlow)
      if(OrdersTotal()==0)
      OrderSend(Symbol(),OP_BUY,LotSize,Ask,3,Ask-(StopLoss*pips),Ask+(TakeProfit*pips),NULL,MagicNumber,0,Green);   
   if(PreviousFast>PreviousSlow && CurrentFast<CurrentSlow)     
      if(OrdersTotal()==0)
      OrderSend(Symbol(),OP_SELL,LotSize,Bid,3,Bid+(StopLoss*pips),Bid+(TakeProfit*pips),NULL,MagicNumber,0,Red);   
     
     return(INIT_SUCCEEDED);
             
   }
//+------------------------------------------------------------------+
 
These are the current errors, I did have more but after some searching I found some fixes, not sure if it is correct though
Files:
errors.JPG  42 kb
 
//+------------------------------------------------------------------+
//|                                                 UntitledEMAX.mq4 |
//|                                                Mark Flint Pillay |
//|                                         https://www.eidoyada.com |
//+------------------------------------------------------------------+
#property copyright "Mark Flint Pillay"
#property link      "https://www.eidoyada.com"
#property version   "1.00"
#property strict

extern int     MagicNumber=12345;
extern int     TakeProfit=50;
extern int     StopLoss=25;
extern double  LotSize=0.01;
extern int     FastMA=5;
extern int     FastMaShift=0;
extern int     FastMaMethod=0;
extern int     FastMaAppliedTo=0;
extern int     SlowMA=21;
extern int     SlowMaShift=0;
extern int     SlowMaMethod=0;
extern int     SlowMaAppliedTo=0

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//|                                                 UntitledEMAX.mq4 |
//|                                                Mark Flint Pillay |
//|                                         https://www.eidoyada.com |
//+------------------------------------------------------------------+
#property copyright "Mark Flint Pillay"
#property link      "https://www.eidoyada.com"
#property version   "1.00"
#property strict

extern int     MagicNumber=12345;
extern int     TakeProfit=50;
extern int     StopLoss=25;
extern double  LotSize=0.01;
extern int     FastMA=5;
extern int     FastMaShift=0;
extern int     FastMaMethod=0;
extern int     FastMaAppliedTo=0;
extern int     SlowMA=21;
extern int     SlowMaShift=0;
extern int     SlowMaMethod=0;
extern int     SlowMaAppliedTo=0; // <---

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
 
Marco vd Heijden:
Thank you, seems to have fixed two of the initial four errors, makes it a bit easier :)
 

this is not a valid directive/syntax:


if(ticksize == 0.00001 || ticksize == 0.001); // if- statements must have some body but you're ending the statment with the ';'
// this is the 'unexpected token'
 
      OrderSend(Symbol(),OP_BUY,LotSize,Ask,3,Ask-(StopLoss*pips),Ask+(TakeProfit*pips),NULL,MagicNumber,0,Green);   

You buy at the Ask and sell at the Bid. Pending Buy Stop orders become market orders when hit by the Ask.

  1. Your buy order's TP/SL (or Sell Stop's/Sell Limit's entry) are triggered when the Bid / OrderClosePrice reaches it. Using Ask±n, makes your SL shorter and your TP longer, by the spread. Don't you want the specified amount used in either direction?

  2. Your sell order's TP/SL (or Buy Stop's/Buy Limit's entry) will be triggered when the Ask / OrderClosePrice reaches it. To trigger close at a specific Bid price, add the average spread.
              MODE_SPREAD (Paul) - MQL4 programming forum - Page 3 #25

  3. The charts show Bid prices only. Turn on the Ask line to see how big the spread is (Tools → Options (control+O) → charts → Show ask line.)

    Most brokers with variable spreads widen considerably at end of day (5 PM ET) ± 30 minutes.
    My GBPJPY shows average spread = 26 points, average maximum spread = 134.
    My EURCHF shows average spread = 18 points, average maximum spread = 106.
    (your broker will be similar).
              Is it reasonable to have such a huge spreads (20 PIP spreads) in EURCHF? - General - MQL5 programming forum (2022)