Download MetaTrader 5

trade based on custom indicator

To add comments, please log in or register
Are you used to trading from your smartphone? Mobile version of MetaTrader 5 will suit you best!
fireslayer26
24
fireslayer26 2015.03.13 00:54 

I want to make an EA to execute automatic trades based on my custom indicator. How would I add this to an EA?

 Thanks

 

Yes... I'm new to EA programming 

Stuart Browne
5820
Stuart Browne 2015.03.13 00:57  
fireslayer26:

I want to make an EA to execute automatic trades based on my custom indicator. How would I add this to an EA?

 Thanks

 

Yes... I'm new to EA programming 

You need to use iCustom() 

For MT4 refer here

For MT5 refer here 

 Cheers

fireslayer26
24
fireslayer26 2015.03.13 18:17  
Filter:

You need to use iCustom() 

For MT4 refer here

For MT5 refer here 

 Cheers

The EA is not opening any trades when I test it. All I want it to do is open the trades based on my custom indicator, then close them based on my trailing stop, profit, or stop loss settings.

 



#define SIGNAL_NONE 0

#define SIGNAL_BUY   1

#define SIGNAL_SELL  2

#define SIGNAL_CLOSEBUY 3

#define SIGNAL_CLOSESELL 4




extern int MagicNumber = 092679;

extern bool SignalMail = False;

extern bool EachTickMode = True;

extern double Lots = 0.1;

extern int Slippage = 2;

extern bool UseStopLoss = True;

extern int StopLoss = 25;

extern bool UseTakeProfit = True;

extern int TakeProfit = 50;

extern bool UseTrailingStop = True;

extern int TrailingStop = 10;


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 Buy1_1 = iCustom(NULL, 0, "Six_Consecutive", 100, Current + 6);


double Sell1_1 = iCustom(NULL, 0, "Six_Consecutive", 100, Current + 6);




   

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

   //| 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)                                           |

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


            


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

            //| Signal End(Exit Buy)                                             |

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


            if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

               OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);

               

               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)                                          |

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


            


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

            //| Signal End(Exit Sell)                                            |

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


            if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

               OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);

               

               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 (False) Order = SIGNAL_BUY;


   if (False) 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());

                

} 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());

                

} else {

Print("Error opening SELL order : ", GetLastError());

}

         }

         if (EachTickMode) TickCheck = True;

         if (!EachTickMode) BarCount = Bars;

         return(0);

      }

   }


   if (!EachTickMode) BarCount = Bars;


   return(0);

}

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


Alain Verleyen
Moderator
30755
Alain Verleyen 2015.03.13 18:35  
fireslayer26:

I want to make an EA to execute automatic trades based on my custom indicator. How would I add this to an EA?

 Thanks

 

Yes... I'm new to EA programming 

You are new to EA programming. The code posted is build automatically with EA builder.

You have to learn to code if you want to be able to modify it or code it yourself. Follow the link provided.

fireslayer26
24
fireslayer26 2015.03.14 00:20  
angevoyageur:

You are new to EA programming. The code posted is build automatically with EA builder.

You have to learn to code if you want to be able to modify it or code it yourself. Follow the link provided.

Yes that is true. Just looking for someone to let me know which part of the code is wrong so I can try to correct it.

 Thanks 

To add comments, please log in or register