can't compile my EA, got several prob

 

i tried to make an EA from an indicator..but got 3 problems:

'{' - initialization expected

'EachTickMode' - comma or semicolon expected

'}' - unbalanced parentheses

could anyone help me with this problems >.<

all the problem is at "extern bool EachTickMode = {EachTickMode};"

extern int MagicNumber = 0;
extern bool SignalMail = False;
extern bool EachTickMode = {EachTickMode};
extern double Lots = {Lots};
extern int Slippage = {Slippage};
extern bool UseStopLoss = {UseStopLoss};
extern int StopLoss = {StopLoss};
extern bool UseTakeProfit = {UseTakeProfit};
extern int TakeProfit = {TakeProfit};
extern bool UseTrailingStop = {UseTrailingStop};
extern int TrailingStop = {TrailingStop};


 
hekenawang:

i tried to make an EA from an indicator..but got 3 problems:

'{' - initialization expected

'EachTickMode' - comma or semicolon expected

'}' - unbalanced parentheses

could anyone help me with this problems >.<

all the problem is at "extern bool = {EachTickMode};"

Hi hakenawang,

Where did you learn to assign value to extern variable like that ?, they're all wrong.

Change EachTickMode = True; then compile and you'll get another compiler error. Change the Lots = 0.01; then compile and you get another compiler error. Change Slippage = 1; then compile and you will get another compile error. And so on and so on.

That's because you assign all extern variable with { } !!!. Where did you learn that way, anyway ?

:(

 
onewithzachy:

Hi hakenawang,

Where did you learn to assign value to extern variable like that ?, they're all wrong.

Change EachTickMode = True; then compile and you'll get another compiler error. Change the Lots = 0.01; then compile and you get another compiler error. Change Slippage = 1; then compile and you will get another compile error. And so on and so on.

That's because you assign all extern variable with { } !!!. Where did you learn that way, anyway ?

:(


hurmm..tbh..i just copy the template generated from http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/

i was hoping to build an EA from ichimoku indicator..i thought uploading it through that website can generate the code to make an EA..lol

if anyone would like to see this indicator, i can upload it here

 
hekenawang:


hurmm..tbh..i just copy the template generated from http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/

i was hoping to build an EA from ichimoku indicator..i thought uploading it through that website can generate the code to make an EA..lol

if anyone would like to see this indicator, i can upload it here

Hi hakenawang,

Didn't notice that was EAB, here's some review of EAB - a bad one - https://www.mql5.com/en/forum/139608

:D

 

Oh my. Ok try it this way

extern int MagicNumber = 0;
extern bool SignalMail = False;
extern bool EachTickMode = true;  // true or false
extern double Lots = 0.1;         // a number upto two decimal places
extern int Slippage = 10;         // a number
extern bool UseStopLoss = true;   // true or false
extern int StopLoss = 100;         // a number
extern bool UseTakeProfit = true;  // true or false
extern int TakeProfit = 100;        // a number
extern bool UseTrailingStop = true;  // true or false
extern int TrailingStop = 50;        // a number
 
onewithzachy:

Hi hakenawang,

Didn't notice that was EAB, here's some review of EAB - a bad one - https://www.mql5.com/en/forum/139608

:D


thanks..i manage to make my own EA and got 1 problem..i just want to ask, how can i add "max trade per position"?
 

this EA will open new sell position as long tenkan is below kijun..btw, i'm a seller trader..lol

so,eventhough tenkan is like 1 second about to cross kijun to go above it, EA will still open sell position,because of the law tenkan need to be below kijun to open sell position...when this happen, it surely result in a loss position because after that 1 sec, tenkan is above kijun ..hope you understand..hahaha

that is the only problem i got here...i was hoping this EA to open only 2 or 3 sell position when it is downtrend..and also hope this EA realize that tenkan is about to cross kijun, so no need to open another position when the line is moving near to each other,just wait for both to cross again to open new sell position..

any idea how to deal with this?
 
//+------------------------------------------------------------------+
//| This MQL is generated by Expert Advisor Builder                  |
//|                http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/ |
//|                                                                  |
//|  In no event will author be liable for any damages whatsoever.   |
//|                      Use at your own risk.                       |
//|                                                                  |
//+------------------- DO NOT REMOVE THIS HEADER --------------------+

#define SIGNAL_NONE 0
#define SIGNAL_BUY   1
#define SIGNAL_SELL  2
#define SIGNAL_CLOSEBUY 3
#define SIGNAL_CLOSESELL 4



extern int MagicNumber = 0;
extern bool SignalMail = False;
extern bool EachTickMode = False;
extern double Lots = 10.0;
extern int Slippage = 5;
extern bool UseStopLoss = False;
extern int StopLoss = 30;
extern bool UseTakeProfit = True;
extern int TakeProfit = 5;
extern bool UseTrailingStop = False;
extern int TrailingStop = 30;

int BarCount;
int Current;
bool TickCheck = False;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init() {
   BarCount = Bars;

   if (EachTickMode) Current = 0; else Current = 1;

   return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit() {
   return(0);
}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start() {
   int Order = SIGNAL_NONE;
   int Total, Ticket;
   double StopLossLevel, TakeProfitLevel;



   if (EachTickMode && Bars != BarCount) TickCheck = False;
   Total = OrdersTotal();
   Order = SIGNAL_NONE;

   //+------------------------------------------------------------------+
   //| Variable Begin                                                   |
   //+------------------------------------------------------------------+

double Var1 = iIchimoku(NULL, 0, 9, 26, 52, MODE_TENKANSEN, Current + 0);

double Buy1_1 = iIchimoku(NULL, 0, 9, 26, 52, MODE_TENKANSEN, Current + 0);
double Buy1_2 = iIchimoku(NULL, 0, 9, 26, 52, MODE_KIJUNSEN, Current + 0);

double Sell1_1 = iIchimoku(NULL, 0, 9, 26, 52, MODE_TENKANSEN, Current + 0);
double Sell1_2 = iIchimoku(NULL, 0, 9, 26, 52, MODE_KIJUNSEN, Current + 1);

double CloseBuy1_1 = iIchimoku(NULL, 0, 9, 26, 52, MODE_TENKANSEN, Current + 0);
double CloseBuy1_2 = iIchimoku(NULL, 0, 9, 26, 52, MODE_KIJUNSEN, Current + 0);

double CloseSell1_1 = iIchimoku(NULL, 0, 9, 26, 52, MODE_TENKANSEN, Current + 0);
double CloseSell1_2 = iIchimoku(NULL, 0, 9, 26, 52, MODE_KIJUNSEN, Current + 0);

   
   //+------------------------------------------------------------------+
   //| Variable End                                                     |
   //+------------------------------------------------------------------+

   //Check position
   bool IsTrade = False;

   for (int i = 0; i < Total; i ++) {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if(OrderType() <= OP_SELL &&  OrderSymbol() == Symbol()) {
         IsTrade = True;
         if(OrderType() == OP_BUY) {
            //Close

            //+------------------------------------------------------------------+
            //| Signal Begin(Exit Buy)                                           |
            //+------------------------------------------------------------------+

                     if (CloseBuy1_1 < CloseBuy1_2) Order = SIGNAL_CLOSEBUY;


            //+------------------------------------------------------------------+
            //| Signal End(Exit Buy)                                             |
            //+------------------------------------------------------------------+

            if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
               OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);
               if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");
               if (!EachTickMode) BarCount = Bars;
               IsTrade = False;
               continue;
            }
            //Trailing stop
            if(UseTrailingStop && TrailingStop > 0) {                 
               if(Bid - OrderOpenPrice() > Point * TrailingStop) {
                  if(OrderStopLoss() < Bid - Point * TrailingStop) {
                     OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
                     if (!EachTickMode) BarCount = Bars;
                     continue;
                  }
               }
            }
         } else {
            //Close

            //+------------------------------------------------------------------+
            //| Signal Begin(Exit Sell)                                          |
            //+------------------------------------------------------------------+

                     if (CloseSell1_1 == CloseSell1_2) Order = SIGNAL_CLOSESELL;


            //+------------------------------------------------------------------+
            //| Signal End(Exit Sell)                                            |
            //+------------------------------------------------------------------+

            if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
               OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);
               if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");
               if (!EachTickMode) BarCount = Bars;
               IsTrade = False;
               continue;
            }
            //Trailing stop
            if(UseTrailingStop && TrailingStop > 0) {                 
               if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {
                  if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {
                     OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);
                     if (!EachTickMode) BarCount = Bars;
                     continue;
                  }
               }
            }
         }
      }
   }

   //+------------------------------------------------------------------+
   //| Signal Begin(Entry)                                              |
   //+------------------------------------------------------------------+

   if (Buy1_1 > Buy1_2) Order = SIGNAL_BUY;

   if (Sell1_1 < Sell1_2) Order = SIGNAL_SELL;


   //+------------------------------------------------------------------+
   //| Signal End                                                       |
   //+------------------------------------------------------------------+

   //Buy
   if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
      if(!IsTrade) {
         //Check free margin
         if (AccountFreeMargin() < (1000 * Lots)) {
            Print("We have no money. Free Margin = ", AccountFreeMargin());
            return(0);
         }

         if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;
         if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;

         Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);
         if(Ticket > 0) {
            if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
                                Print("BUY order opened : ", OrderOpenPrice());
                if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");
                        } else {
                                Print("Error opening BUY order : ", GetLastError());
                        }
         }
         if (EachTickMode) TickCheck = True;
         if (!EachTickMode) BarCount = Bars;
         return(0);
      }
   }

   //Sell
   if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
      if(!IsTrade) {
         //Check free margin
         if (AccountFreeMargin() < (1000 * Lots)) {
            Print("We have no money. Free Margin = ", AccountFreeMargin());
            return(0);
         }

         if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;
         if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;

         Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);
         if(Ticket > 0) {
            if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
                                Print("SELL order opened : ", OrderOpenPrice());
                if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");
                        } else {
                                Print("Error opening SELL order : ", GetLastError());
                        }
         }
         if (EachTickMode) TickCheck = True;
         if (!EachTickMode) BarCount = Bars;
         return(0);
      }
   }

   if (!EachTickMode) BarCount = Bars;

   return(0);
}
//+------------------------------------------------------------------+
 

https://www.mql5.com/en/forum/139608

Go read that topic again if you already did your EA has still same problems made by your Expert Advisor Builder

Reason: