Trailing Stop with Commission

To add comments, please log in or register
roi
23
roi  

Hi,

I have a problem,

my broker use commissions, when I use in my EA trail stop it close the trade without profit finaly because it from Open price to close price standpoint its ok  but than

the commission is not included and the net trade is loss.

how can I tell the EA only if net pips is more than X pips start trail,

 

thanks

Roi 

Keith Watford
Moderator
20585
Keith Watford  
Don't start the trailing stop until it is x pips in profit the x being the amount of pips for the TS plus an allowance in pips that will cover the commission.
roi
23
roi  

so you mean, I'll check (for BUY order for example)  if  OrderProfit() > = 0 and (OrderOpenPrice - TrailStop) > Bid 

than if yes , I'll  start trail?

Keith Watford
Moderator
20585
Keith Watford  
roi_:

so you mean, I'll check (for BUY order for example)  if  OrderProfit() > = 0 and (OrderOpenPrice - TrailStop) > Bid 

than if yes , I'll  start trail?

No, for a buy

if(OrderClosePrice()-OrderOpenPrice()>=TrailStop+allowance for commisison) 

roi
23
roi  

OrderClosePrice() can't be because it still running, you mean Bid?

Keith Watford
Moderator
20585
Keith Watford  

OrderClosePrice()  is the most recent price for the order, for a Buy, it will be Bid, for a Sell, Ask.

Same as Close[0], The 0 bar has not closed yet, but Close[0] holds the most recent price. 

sathyaicm
29
sathyaicm  

Hi @roi,

Were you able to add commission on your TrailStop? Even I've been trying this on my code on both buy & Sell but never got success, below is my code snip,


void TrailingPositions() {
  double pBid, pAsk, pp;

  pp = MarketInfo(OrderSymbol(), MODE_POINT);
  if (OrderType()==OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber()==EAMagicNumber) {
    pBid = MarketInfo(OrderSymbol(), MODE_BID);
    if (!ProfitTrailing || (pBid-OrderOpenPrice())>TrailingStop*pp) {
      if (OrderStopLoss()<pBid-(TrailingStop+TrailingStep-1)*pp) {
      if((OrderClosePrice()-OrderOpenPrice())>=((TrailingStop*pp)+OrderCommission()))     //sathya mfd#3
        ModifyStopLoss(pBid-TrailingStop*pp);
        return;
      }
    }
  }
  if (OrderType()==OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber()==EAMagicNumber) {
    pAsk = MarketInfo(OrderSymbol(), MODE_ASK);
    if (!ProfitTrailing || OrderOpenPrice()-pAsk>TrailingStop*pp) {
      if (OrderStopLoss()>pAsk+(TrailingStop+TrailingStep-1)*pp || OrderStopLoss()==0) {  
   if((OrderClosePrice()+ OrderOpenPrice())>=((TrailingStop*pp)+OrderCommission()))     //sathya mfd#3
        ModifyStopLoss(pAsk+TrailingStop*pp);
        return;
      }
    }
  }
}

void ModifyStopLoss(double ldStopLoss) {
  bool fm;
  fm=OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(),0,CLR_NONE);
 
}


-Sathya-

plewright
147
plewright  



Hi Sathy

wow, necro-bump.

Let us know if this works for you, see below for what I use to work out what the commission will total up to;

Cheers, 

Chris

// I use an input into my EA
input double m_commission_per_minlot = 0.035; // Commission per minimum lot size

// in my example; 3.5c to open a position plus 3.5c to close it (per min lot size), so the total commission will end up being 7c per round trip.  


// then, in your function, you can check like this;

double pos_vol_lots = PositionGetDouble(POSITION_VOLUME);
double min_vol_lots = SymbolInfoDouble( _Symbol , SYMBOL_VOLUME_MIN );
double pos_commission = MathRound(200.0 * m_commission_per_minlot * pos_vol_lots/min_vol_lots )/100.0;
Magruder Trading Group, Inc.
151
Chad Magruder  

Try this

double commission=((OrderCommission()*-1)/(OrderLots()*MarketInfo(Symbol(),MODE_TICKVALUE)))*Point;

commission variable equals how many pips you would need to cover the amount of commission for a given lot size.

if((OrderClosePrice()+ OrderOpenPrice())>=((TrailingStop*pp)+commission)) 
sathyaicm
29
sathyaicm  
plewright:


Hi Sathy

wow, necro-bump.

Let us know if this works for you, see below for what I use to work out what the commission will total up to;

Cheers, 

Chris

Thanks @plewright, I'll try this
sathyaicm
29
sathyaicm  
Chad Magruder:

Try this

commission variable equals how many pips you would need to cover the amount of commission for a given lot size.

Thanks Chad,

Modified as below, but seems no change on TS placement,  1.  TS placed exactly on the OrderOpenPrice() 2, If OrderLots= 0.03 also TS --> 0.07(equal pips) only


double commission;        
   commission=((OrderCommission()*-1)/(OrderLots()*MarketInfo(Symbol(),MODE_TICKVALUE)))*Point; 


 if (OrderType()==OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber()==EAMagicNumber) {
    pAsk = MarketInfo(OrderSymbol(), MODE_ASK);
    if (!ProfitTrailing || OrderOpenPrice()-pAsk>TrailingStop*pp) {
      if (OrderStopLoss()>pAsk+(TrailingStop+TrailingStep-1)*pp || OrderStopLoss()==0) {  
  if((OrderClosePrice()+ OrderOpenPrice())>=((TrailingStop*pp)+commission))   
       ModifyStopLoss(pAsk+TrailingStop*pp);
        return;
      }
    }
  }
}



-Sathya-

12
To add comments, please log in or register