Page 1 of 2 12 LastLast
Results 1 to 10 of 19
 4 Attachment(s)    

Thread: Add a trailing stop

  1. #1
    Administrator funyoo's Avatar
    Join Date
    Sep 2008
    Posts
    7,003

    Default Add a trailing stop

    At the bottom of your EA, add this function :

    Code:
    void MoveTrailingStop()
    {
       int cnt,total=OrdersTotal();
       for(cnt=0;cnt<total;cnt++)
       {
          OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
          if(OrderType()<=OP_SELL&&OrderSymbol()==Symbol())
          {
             if(OrderType()==OP_BUY)
             {
                if(TrailingStop>0)  
                {                 
                   if((NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid-Point*(TrailingStop+TrailingStep),Digits))||(OrderStopLoss()==0))
                   {
                      OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-Point*TrailingStop,Digits),OrderTakeProfit(),0,Green);
                      return(0);
                   }
                }
             }
             else 
             {
                if(TrailingStop>0)  
                {                 
                   if((NormalizeDouble(OrderStopLoss(),Digits)>(NormalizeDouble(Ask+Point*(TrailingStop+TrailingStep),Digits)))||(OrderStopLoss()==0))
                   {
                      OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+Point*TrailingStop,Digits),OrderTakeProfit(),0,Red);
                      return(0);
                   }
                }
             }
          }
       }
    }
    Somewhere in your EA, after conditions, near tickets for example, add this :

    Code:
    if(TrailingStop>0)MoveTrailingStop();
    Finally, at the top of the EA add this :

    Code:
    extern int TrailingStop=0;
    extern int TrailingStep=0;
    Some documentation : script for trailing stop needed please? - Forex Trading

  2. #2
    Junior Member
    Join Date
    Jan 2009
    Posts
    17

    Default EA to ad a trailing stop

    Hi Funyoo

    I have a free EA that ads a trailing stop of 5 pips or more in new market orders, but it dont works well, in many situations you want to open an order and it fail many times, moreover it don't works to stop orders. (It's atatched above)

    Is posible to make an EA to ad a trailing stop of 5 pips or more in new market orders and stop orders ?

    It need to have:
    Market order or stop order
    Stop loss
    Take proffit
    trailing stop
    number of lots

    Thanks
    Attached Files Attached Files

  3. #3
    Administrator funyoo's Avatar
    Join Date
    Sep 2008
    Posts
    7,003

    Default

    Quote Originally Posted by ctritany View Post
    Hi Funyoo

    I have a free EA that ads a trailing stop of 5 pips or more in new market orders, but it dont works well, in many situations you want to open an order and it fail many times, moreover it don't works to stop orders. (It's atatched above)

    Is posible to make an EA to ad a trailing stop of 5 pips or more in new market orders and stop orders ?

    It need to have:
    Market order or stop order
    Stop loss
    Take proffit
    trailing stop
    number of lots

    Thanks
    Hi ctritany,

    It depends on the broker. The minimum trailing stop allowed is generally of 15 pips.

  4. #4
    Junior Member
    Join Date
    Jan 2009
    Posts
    17

    Default

    Hi Funyoo

    Yes i know that, the MT4 only ad minimun 15 pips, but this EA that i post ad a 5 pips trailing stop in market order, do you think the brooker will not accept orders in a real account whith this EA ?

    Thanks

  5. #5
    Administrator funyoo's Avatar
    Join Date
    Sep 2008
    Posts
    7,003

    Default

    Quote Originally Posted by ctritany View Post
    Hi Funyoo

    Yes i know that, the MT4 only ad minimun 15 pips, but this EA that i post ad a 5 pips trailing stop in market order, do you think the brooker will not accept orders in a real account whith this EA ?

    Thanks

    I don't know at all.

  6. #6
    Administrator funyoo's Avatar
    Join Date
    Sep 2008
    Posts
    7,003

    Default

    Guide updated.

    I have found a way to avoid the famous OrderModify error 1.

  7. #7
    Junior Member
    Join Date
    Jan 2009
    Posts
    17

    Default Hi

    When you send order it fail and delay to open an order, is that you mean whith error ?

    Thanks

  8. #8
    Administrator funyoo's Avatar
    Join Date
    Sep 2008
    Posts
    7,003

    Default

    Quote Originally Posted by ctritany View Post
    When you send order it fail and delay to open an order, is that you mean whith error ?

    Thanks
    No, it is an error that appears when the modification has already been made.

  9. #9

    Default

    Hi Funyoo,
    I've tried everything to get Trailing Stop and/or Dynamic Modify Stoploss (and TakeProfit too) to work in this EA...and to get it to work only when the value of the position is on the Profitable side....This is Martingale EA that has both Buy AND Sell orders open at the same time....Any ideas??
    Thanks Bill




    #define m 20050611
    //----
    extern int tp = 65;
    extern int sh = 41;
    extern int sl=100;
    extern int TrailingStop=0;
    extern int TrailingStep=0;
    //----
    datetime lastt;
    //+------------------------------------------------------------------+
    //| |
    //+------------------------------------------------------------------+
    int kol_buy()
    {
    int kol_ob = 0;
    //----
    for(int i = 0; i < OrdersTotal(); i++)
    {
    if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false)
    break;
    //----
    if(OrderType() == OP_BUY)
    kol_ob++;
    }
    return(kol_ob);
    }
    //+------------------------------------------------------------------+
    //| |
    //+------------------------------------------------------------------+
    int kol_sell()
    {
    int kol_os = 0;
    //----
    for(int i = 0; i < OrdersTotal(); i++)
    {
    if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false)
    break;
    //----
    if(OrderType() == OP_SELL)
    kol_os++;
    }
    return(kol_os);
    }
    //+------------------------------------------------------------------+
    //| |
    //+------------------------------------------------------------------+
    int start()
    {
    int slip, i, ii, tic, total, kk, gle;
    double lotsi = 0.0;
    bool sob = false, sos = false, scb = false, scs = false;
    int kb, kb_max = 0;
    kb = kol_buy() + 1;
    double M_ob[11][8];
    ArrayResize(M_ob,kb);
    int ks = 0, ks_max = 0;
    ks = kol_sell() + 1;
    double M_os[11][8];
    ArrayResize(M_os,ks);
    ArrayInitialize(M_ob, 0.0);
    int kbi = 0;
    if(TrailingStop>0)MoveTrailingStop();
    //----
    for(i = 0; i < OrdersTotal(); i++)
    {
    if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false)
    break;
    //----
    if(OrderSymbol() == Symbol() && OrderType() == OP_BUY)
    {
    kbi++;
    M_ob[kbi][0] = OrderTicket();
    M_ob[kbi][1] = OrderOpenPrice();
    M_ob[kbi][2] = OrderLots();
    M_ob[kbi][3] = OrderType();
    M_ob[kbi][4] = OrderMagicNumber();
    M_ob[kbi][5] = OrderStopLoss();
    M_ob[kbi][6] = OrderTakeProfit();
    M_ob[kbi][7] = OrderProfit();
    }
    }
    M_ob[0][0] = kb;
    double max_lot_b = 0.0;
    //----
    for(i = 1; i < kb; i++)
    if(M_ob[i][2] > max_lot_b)
    {
    max_lot_b = M_ob[i][2];
    kb_max = i;
    }
    double buy_lev_min = M_ob[kb_max][1];
    ArrayInitialize(M_os,0.0);
    int ksi = 0;
    //----
    for(i = 0; i < OrdersTotal(); i++)
    {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false )
    break;
    //----
    if(OrderSymbol()==Symbol() && OrderType()==OP_SELL)
    {
    ksi++;
    M_os[ksi][0] = OrderTicket();
    M_os[ksi][1] = OrderOpenPrice();
    M_os[ksi][2] = OrderLots();
    M_os[ksi][3] = OrderType();
    M_os[ksi][4] = OrderMagicNumber();
    M_os[ksi][5] = OrderStopLoss();
    M_os[ksi][6] = OrderTakeProfit();
    M_os[ksi][7] = OrderProfit();
    }
    }
    M_os[0][0] = ks;
    double max_lot_s = 0.0;
    //----
    for(i = 1;i < ks; i++)
    if(M_os[i][2] > max_lot_s)
    {
    max_lot_s = M_os[i][2];
    ks_max = i;
    }
    double sell_lev_max = M_os[ks_max][1];
    //----
    if(Bars < 100 || IsTradeAllowed() == false)
    return(0);
    sob = (kol_buy() < 1 || buy_lev_min - sh*Point > Ask) &&
    AccountFreeMargin() > AccountBalance()*0.5;
    sos = (kol_sell() < 1 || sell_lev_max + sh*Point < Bid) &&
    AccountFreeMargin() > AccountBalance()*0.5;
    //----
    if(M_ob[kb_max][2] > 0.0)
    scb = M_ob[kb_max][7] / (M_ob[kb_max][2]*9) > tp;
    //----
    if(M_os[ks_max][2] > 0.0)
    scs = M_os[ks_max][7] / (M_os[ks_max][2]*9) > tp;
    kk = 0;
    ii = 0;
    //----
    if(scb)
    {
    while(kol_buy() > 0 && kk < 3)
    {
    for(i = 1; i <= kb; i++)
    {
    ii = M_ob[i][0];
    //----
    if(!OrderClose(ii,M_ob[i][2],Bid,slip,White))
    {
    gle = GetLastError();
    kk++;
    Print(" ", gle, " close buy ", kk);
    Sleep(6000);
    RefreshRates();
    }
    }
    kk++;
    }
    }
    kk = 0;
    ii = 0;
    //----
    if(scs)
    {
    while(kol_sell() > 0 && kk < 3)
    {
    for(i = 1; i <= ks; i++)
    {
    ii = M_os[i][0];
    //----
    if(!OrderClose(ii,M_os[i][2], Ask, slip, White))
    {
    gle = GetLastError();
    kk++;
    Print(" ", gle, " close sell ", kk);
    Sleep(6000);
    RefreshRates();
    }
    }
    kk++;
    }
    }
    kk = 0;
    tic = -1;
    //----
    if(sob)
    {
    if(max_lot_b == 0.0)
    lotsi = 0.1;
    else
    lotsi = 1.5*max_lot_b;
    //----
    while(tic == -1 && kk < 3)
    {
    tic = OrderSend(Symbol(), OP_BUY, lotsi, Ask, slip, Ask - (sl)*Point, Ask + (tp + 25)*Point,
    " ", m, 0, Yellow);
    Print("tic_buy=", tic);
    //----
    if(tic==-1)
    {
    gle = GetLastError();
    kk++;
    Print(" ", gle, " buy ", kk);
    Sleep(6000);
    RefreshRates();
    }
    }
    lastt = CurTime();
    return;
    }
    tic = -1;
    kk = 0;
    //----
    if(sos)
    {
    if(max_lot_s == 0.0)
    lotsi = 0.1;
    else
    lotsi = 1.5*max_lot_s;
    //----
    while(tic == -1 && kk < 3)
    {
    tic = OrderSend(Symbol(), OP_SELL, lotsi, Bid, slip, Bid + (sl)*Point, Bid - (tp + 25)*Point,
    " ", m, 0, Red);
    Print("tic_sell=", tic);
    //----
    if(tic == -1)
    {
    gle = GetLastError();
    kk++;
    Print(" ", gle, " sell ", kk);
    Sleep(6000);
    RefreshRates();
    }
    }
    lastt = CurTime();
    return;
    }
    }
    //+------------------------------------------------------------------+
    void MoveTrailingStop()
    {
    int cnt,total=OrdersTotal();
    for(cnt=0;cnt<total;cnt++)
    {
    OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
    if(OrderType()<=OP_SELL&&OrderSymbol()==Symbol())
    {
    if(OrderType()==OP_BUY)
    {
    if(TrailingStop>0)
    {
    if((NormalizeDouble(OrderStopLoss(),Digits)<Normal izeDouble(Bid-Point*(TrailingStop+TrailingStep),Digits))||(Order StopLoss()==0))
    {
    OrderModify(OrderTicket(),OrderOpenPrice(),Normali zeDouble(Bid-Point*TrailingStop,Digits),OrderTakeProfit(),0,Gre en);
    return(0);
    }
    }
    }
    else
    {
    if(TrailingStop>0)
    {
    if((NormalizeDouble(OrderStopLoss(),Digits)>(Norma lizeDouble(Ask+Point*(TrailingStop+TrailingStep),D igits)))||(OrderStopLoss()==0))
    {
    OrderModify(OrderTicket(),OrderOpenPrice(),Normali zeDouble(Ask+Point*TrailingStop,Digits),OrderTakeP rofit(),0,Red);
    return(0);
    }
    }
    }
    }
    }
    }
    Last edited by BillR; 02-28-2009 at 19:01. Reason: Redid code....

  10. #10

    Default More...about the SL TP TS

    There is an extra space on the last line of your code... OrderTakeP rofit, but that's not the problem....Bill

Similar Threads

  1. Trailing stop and Trailing profit
    By Luudt in forum MQL programming
    Replies: 0
    Last Post: 02-15-2016, 21:00
  2. Trailing stop
    By painofhell in forum Trading discussion
    Replies: 1
    Last Post: 11-07-2014, 17:43
  3. Best Trailing Stop ???
    By JXBlack in forum MQL programming
    Replies: 1
    Last Post: 08-09-2010, 15:48
  4. Waddah Attar Win EA - with Trailing Stop & Stop Loss
    By dlhc in forum Scripts and other tools
    Replies: 0
    Last Post: 03-09-2010, 12:33
  5. EA Trailing Stop
    By andrewte in forum MQL programming
    Replies: 1
    Last Post: 06-15-2009, 20:22

Tags for this Thread

100, add, broker, change, forex, forex trading, free, free ea, guide, martingale, metatrader, mq4, mql, mt4, profit, profitable, real, simple, stop, stoploss, study, test, time, trading, trailing, trailingstep, trailingstop

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •