+ Reply to Thread
Page 1 of 2 1 2 LastLast
Results 1 to 10 of 17
 2 Attachment(s)    

Thread: Add a trailing stop

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

    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

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

    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,455

    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,455

    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,455

    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
    Member
    Join Date
    Feb 2009
    Posts
    317

    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 18:01. Reason: Redid code....

  10. #10
    Member
    Join Date
    Feb 2009
    Posts
    317

    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

+ Reply to Thread
Page 1 of 2 1 2 LastLast

Similar Threads

  1. Alarm for Sniper Stop
    By magidkaramy in forum Indicators
    Replies: 5
    Last Post: 02-24-2010, 21:38
  2. ATR Trailing
    By przem81621 in forum MQL programming
    Replies: 3
    Last Post: 09-17-2009, 08:41
  3. Start e-trailing from total profit
    By romano in forum MQL programming
    Replies: 0
    Last Post: 03-07-2009, 08:42
  4. Stop trading when TP is hit
    By whyme in forum MQL programming
    Replies: 4
    Last Post: 01-14-2009, 18:08
  5. Add take profit and stop loss
    By funyoo in forum MQL programming
    Replies: 0
    Last Post: 09-23-2008, 10:32

Posting Permissions

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