Jump to content

Welcome to the new Traders Laboratory! Please bear with us as we finish the migration over the next few days. If you find any issues, want to leave feedback, get in touch with us, or offer suggestions please post to the Support forum here.

  • Welcome Guests

    Welcome. You are currently viewing the forum as a guest which does not give you access to all the great features at Traders Laboratory such as interacting with members, access to all forums, downloading attachments, and eligibility to win free giveaways. Registration is fast, simple and absolutely free. Create a FREE Traders Laboratory account here.

pepe1

Help To Code My EA

Recommended Posts

Hi,

 

I am newbie in this forum.I have used a function found in this MQL4 's forum : "Stop trading after losses" but i have problems to compil EA.

 

It seems not complicated code to intregrate to my strategy but Like I am beginning with Mql4, i don' t see where and what can i do?:crap::crap:

 

So, if somebody has an advice I wil be happy to share information. I have used an expert adviser builder for strategy. ( so i think the code is right !!!!!)

 

I post my code here ( It's not " a GRAAL code " ) but as i have told later i begin !!!!! :shrug::shrug:

 

My code :

 

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

extern int MagicNumber = 0;
extern bool SignalMail = False;
extern bool EachTickMode = True;
extern double Lots = 1.0;
extern int Slippage = 3;
extern bool UseStopLoss = True;
extern int StopLoss = 40;
extern bool UseTakeProfit = True;
extern int TakeProfit = 7;
extern bool UseTrailingStop = False;
extern int TrailingStop = 30;
extern int Shift = 1; 

int BarCount;
int Current;
bool TickCheck = False;

int WaitTime = iTime(Null,0,Shift); 
total=OrdersTotal();

if(total>=1 && OrderProfit()<0) }
{
CloseTime=iTime(NULL,0,0);
}
if(total<1 && WaitTime<=CloseTime)
{
Pause=true;
}
else
{
Pause=false;
}



return (0);             
//+------------------------------------------------------------------+
//| 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 = iADX(NULL, 0, 14, PRICE_MEDIAN, MODE_MAIN, Current + 0);
double Var2 = iCCI(NULL, 0, 14, PRICE_CLOSE, Current + 0);

double Buy1_1 = iCCI(NULL, 0, 14, PRICE_CLOSE, Current + 0);
double Buy1_2 = iADX(NULL, 0, 14, PRICE_MEDIAN, MODE_PLUSDI, Current + 0);

double Sell1_1 = iADX(NULL, 0, 14, PRICE_MEDIAN, MODE_MINUSDI, Current + 0);
double Sell1_2 = iCCI(NULL, 0, 14, PRICE_CLOSE, 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 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 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);}

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.