PositionModify, new stop loss fail

 

Hello,

I can't understand why my positions don't change. The error is on the new stop loss. However, for the buy ask>new sl>last st and for the belly bid<new sl<last sl.

This SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL) say me that the minimum stoploss is 10 points so i put 11 for try but nothing change.

bool TraillingStop(double ask, double bid){
   for(int i = 0; i < PositionsTotal(); i++) {
      m_position.SelectByIndex(i);
      if(m_position.Magic() == MAGIC){
         if(m_position.PositionType()==POSITION_TYPE_BUY){
            if(m_position.PriceOpen()+sl_start*point_value<=ask && m_position.StopLoss()<SLAchat(ask,sl_trailling)){
               TradeManager.PositionModify(m_position.Ticket(),SLAchat(ask,sl_trailling),m_position.TakeProfit());
               Print("MODIFY: ask "+ask+" new sl "+SLAchat(ask,sl_trailling)+" ancien " + m_position.StopLoss());
            }
         } else if(m_position.PositionType()==POSITION_TYPE_SELL){
            if(m_position.PriceOpen()-sl_start*point_value>=bid && m_position.StopLoss()>SLVente(bid,sl_trailling)){
               TradeManager.PositionModify(m_position.Ticket(),SLVente(bid,sl_trailling),m_position.TakeProfit());
               Print("MODIFY: bid "+bid+" new sl "+SLVente(bid,sl_trailling)+" ancien " + m_position.StopLoss());
            }
         } else{
            Print("ERROR : Probleme avec le type de la position");
            return false;
         }
       }
    }
    return true;
}


2022.10.25 21:41:38.212 Core 1  2022.10.21 18:11:05   failed modify #880 sell 0.71 USDJPY sl: 149.153, tp: 148.753 -> sl: 148.853, tp: 148.753 [Invalid stops]
2022.10.25 21:41:38.212 Core 1  2022.10.21 18:11:05   CTrade::OrderSend: modify position #880 USDJPY (sl: 148.853, tp: 148.753) [invalid stops]
2022.10.25 21:41:38.212 Core 1  2022.10.21 18:11:05   MODIFY: bid 148.842 new sl 148.853 ancien 149.153
2022.10.25 21:41:38.212 Core 1  2022.10.21 18:11:07   failed modify #880 sell 0.71 USDJPY sl: 149.153, tp: 148.753 -> sl: 148.844, tp: 148.753 [Invalid stops]
2022.10.25 21:41:38.212 Core 1  2022.10.21 18:11:07   CTrade::OrderSend: modify position #880 USDJPY (sl: 148.844, tp: 148.753) [invalid stops]
2022.10.25 21:41:38.212 Core 1  2022.10.21 18:11:07   MODIFY: bid 148.833 new sl 148.844 ancien 149.153
2022.10.25 21:41:38.212 Core 1  2022.10.21 18:11:07   failed modify #880 sell 0.71 USDJPY sl: 149.153, tp: 148.753 -> sl: 148.824, tp: 148.753 [Invalid stops]
2022.10.25 21:41:38.212 Core 1  2022.10.21 18:11:07   CTrade::OrderSend: modify position #880 USDJPY (sl: 148.824, tp: 148.753) [invalid stops]
2022.10.25 21:41:38.212 Core 1  2022.10.21 18:11:07   MODIFY: bid 148.813 new sl 148.82399999999998 ancien 149.153
2022.10.25 21:41:38.212 Core 1  2022.10.21 18:11:07   failed modify #880 sell 0.71 USDJPY sl: 149.153, tp: 148.753 -> sl: 148.831, tp: 148.753 [Invalid stops]
2022.10.25 21:41:38.212 Core 1  2022.10.21 18:11:07   CTrade::OrderSend: modify position #880 USDJPY (sl: 148.831, tp: 148.753) [invalid stops]
2022.10.25 21:41:38.212 Core 1  2022.10.21 18:11:07   MODIFY: bid 148.82 new sl 148.831 ancien 149.153
2022.10.25 21:41:38.212 Core 1  2022.10.21 18:11:07   failed modify #880 sell 0.71 USDJPY sl: 149.153, tp: 148.753 -> sl: 148.828, tp: 148.753 [Invalid stops]
2022.10.25 21:41:38.212 Core 1  2022.10.21 18:11:07   CTrade::OrderSend: modify position #880 USDJPY (sl: 148.828, tp: 148.753) [invalid stops]
2022.10.25 21:41:38.212 Core 1  2022.10.21 18:11:07   MODIFY: bid 148.817 new sl 148.828 ancien 149.153
2022.10.25 21:41:38.212 Core 1  2022.10.21 18:11:07   failed modify #880 sell 0.71 USDJPY sl: 149.153, tp: 148.753 -> sl: 148.840, tp: 148.753 [Invalid stops]
2022.10.25 21:41:38.212 Core 1  2022.10.21 18:11:07   CTrade::OrderSend: modify position #880 USDJPY (sl: 148.840, tp: 148.753) [invalid stops]
2022.10.25 21:41:38.212 Core 1  2022.10.21 18:11:07   MODIFY: bid 148.829 new sl 148.84 ancien 149.153
2022.10.25 21:41:38.212 Core 1  2022.10.21 18:11:07   failed modify #880 sell 0.71 USDJPY sl: 149.153, tp: 148.753 -> sl: 148.844, tp: 148.753 [Invalid stops]
2022.10.25 21:41:38.212 Core 1  2022.10.21 18:11:07   CTrade::OrderSend: modify position #880 USDJPY (sl: 148.844, tp: 148.753) [invalid stops]
2022.10.25 21:41:38.212 Core 1  2022.10.21 18:11:07   MODIFY: bid 148.833 new sl 148.844 ancien 149.153
2022.10.25 21:41:38.212 Core 1  2022.10.21 18:11:07   failed modify #880 sell 0.71 USDJPY sl: 149.153, tp: 148.753 -> sl: 148.843, tp: 148.753 [Invalid stops]
2022.10.25 21:41:38.212 Core 1  2022.10.21 18:11:07   CTrade::OrderSend: modify position #880 USDJPY (sl: 148.843, tp: 148.753) [invalid stops]
2022.10.25 21:41:38.212 Core 1  2022.10.21 18:11:07   MODIFY: bid 148.832 new sl 148.843 ancien 149.153
2022.10.25 21:41:38.212 Core 1  2022.10.21 18:11:07   failed modify #880 sell 0.71 USDJPY sl: 149.153, tp: 148.753 -> sl: 148.860, tp: 148.753 [Invalid stops]
2022.10.25 21:41:38.212 Core 1  2022.10.21 18:11:07   CTrade::OrderSend: modify position #880 USDJPY (sl: 148.860, tp: 148.753) [invalid stops]
2022.10.25 21:41:38.212 Core 1  2022.10.21 18:11:07   MODIFY: bid 148.849 new sl 148.85999999999999 ancien 149.153



Thank you by advance for your help !

 
if you use NormalizeDouble function you avoid some errors.
 
Vénon kirigaya:

Hello,

I can't understand why my positions don't change. The error is on the new stop loss. However, for the buy ask>new sl>last st and for the belly bid<new sl<last sl.

This SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL) say me that the minimum stoploss is 10 points so i put 11 for try but nothing change.




Thank you by advance for your help !

Do you need normalize sl_trailing to not happen 148.82399999998 or 148.853000001?
 
Ricardo Rodrigues Lucca #: Do you need normalize sl_trailing to not happen 148.82399999998 or 148.853000001?

You used NormalizeDouble, It's use is usually wrong, as it is in your case.

  1. Floating point has a infinite number of decimals, it's your not understanding floating point and that some numbers can't be represented exactly. (like 1/10.)
              Double-precision floating-point format - Wikipedia, the free encyclopedia

    See also The == operand. - MQL4 programming forum (2013)

  2. Print out your values to the precision you want with DoubleToString - Conversion Functions - MQL4 Reference.

  3. SL/TP (stops) need to be normalized to tick size (not Point) — code fails on non-currencies.
              On 5Digit Broker Stops are only allowed to be placed on full pip values. How to find out in mql? - MQL4 programming forum (2011)

    And abide by the limits Requirements and Limitations in Making Trades - Appendixes - MQL4 Tutorial and that requires understanding floating point equality Can price != price ? - MQL4 programming forum (2012)

  4. Open price for pending orders need to be adjusted. On Currencies, Point == TickSize, so you will get the same answer, but it won't work on non-currencies. So do it right.
              Trailing Bar Entry EA - MQL4 programming forum (2013)
              Bid/Ask: (No Need) to use NormalizeDouble in OrderSend - MQL4 programming forum (2012)

  5. Lot size must also be adjusted to a multiple of LotStep and check against min and max. If that is not a power of 1/10 then NormalizeDouble is wrong. Do it right.
              (MT4 2013)) (MT5 2022))

  6. MathRound() and NormalizeDouble() are rounding in a different way. Make it explicit.
              MT4:NormalizeDouble - MQL5 programming forum (2017)
              How to Normalize - Expert Advisors and Automated Trading - MQL5 programming forum (2017)

  7. Prices you get from the terminal are already correct (normalized).

  8. PIP, Point, or Tick are all different in general.
              What is a TICK? - MQL4 programming forum (2014)

 
Thank you very much to all ! I'll try this as soon as I can ^^
 
I have done the normalisation but nothing has changed.

William Roeder, I will change my dots to ticks when I finish the first version of this robot

2022.10.26 10:19:15.965 Core 1  2022.10.21 18:11:03   failed modify #880 sell 0.71 USDJPY sl: 149.153, tp: 148.753 -> sl: 148.812, tp: 148.753 [Invalid stops]
2022.10.26 10:19:15.965 Core 1  2022.10.21 18:11:03   CTrade::OrderSend: modify position #880 USDJPY (sl: 148.812, tp: 148.753) [invalid stops]
2022.10.26 10:19:15.965 Core 1  2022.10.21 18:11:03   MODIFY: bid 148.801 new sl 148.812 ancien 149.153
2022.10.26 10:19:15.965 Core 1  2022.10.21 18:11:03   failed modify #880 sell 0.71 USDJPY sl: 149.153, tp: 148.753 -> sl: 148.803, tp: 148.753 [Invalid stops]
2022.10.26 10:19:15.965 Core 1  2022.10.21 18:11:03   CTrade::OrderSend: modify position #880 USDJPY (sl: 148.803, tp: 148.753) [invalid stops]
2022.10.26 10:19:15.965 Core 1  2022.10.21 18:11:03   MODIFY: bid 148.792 new sl 148.803 ancien 149.153
2022.10.26 10:19:15.965 Core 1  2022.10.21 18:11:03   failed modify #880 sell 0.71 USDJPY sl: 149.153, tp: 148.753 -> sl: 148.803, tp: 148.753 [Invalid stops]
2022.10.26 10:19:15.965 Core 1  2022.10.21 18:11:03   CTrade::OrderSend: modify position #880 USDJPY (sl: 148.803, tp: 148.753) [invalid stops]
2022.10.26 10:19:15.965 Core 1  2022.10.21 18:11:03   MODIFY: bid 148.792 new sl 148.803 ancien 149.153
2022.10.26 10:19:15.965 Core 1  2022.10.21 18:11:04   failed modify #880 sell 0.71 USDJPY sl: 149.153, tp: 148.753 -> sl: 148.803, tp: 148.753 [Invalid stops]
2022.10.26 10:19:15.965 Core 1  2022.10.21 18:11:04   CTrade::OrderSend: modify position #880 USDJPY (sl: 148.803, tp: 148.753) [invalid stops]
2022.10.26 10:19:15.965 Core 1  2022.10.21 18:11:04   MODIFY: bid 148.792 new sl 148.803 ancien 149.153
2022.10.26 10:19:15.965 Core 1  2022.10.21 18:11:04   failed modify #880 sell 0.71 USDJPY sl: 149.153, tp: 148.753 -> sl: 148.803, tp: 148.753 [Invalid stops]
2022.10.26 10:19:15.965 Core 1  2022.10.21 18:11:04   CTrade::OrderSend: modify position #880 USDJPY (sl: 148.803, tp: 148.753) [invalid stops]
2022.10.26 10:19:15.965 Core 1  2022.10.21 18:11:04   MODIFY: bid 148.792 new sl 148.803 ancien 149.153
2022.10.26 10:19:15.965 Core 1  2022.10.21 18:11:04   failed modify #880 sell 0.71 USDJPY sl: 149.153, tp: 148.753 -> sl: 148.806, tp: 148.753 [Invalid stops]
2022.10.26 10:19:15.965 Core 1  2022.10.21 18:11:04   CTrade::OrderSend: modify position #880 USDJPY (sl: 148.806, tp: 148.753) [invalid stops]
2022.10.26 10:19:15.965 Core 1  2022.10.21 18:11:04   MODIFY: bid 148.795 new sl 148.806 ancien 149.153
2022.10.26 10:19:15.965 Core 1  2022.10.21 18:11:04   failed modify #880 sell 0.71 USDJPY sl: 149.153, tp: 148.753 -> sl: 148.803, tp: 148.753 [Invalid stops]
2022.10.26 10:19:15.965 Core 1  2022.10.21 18:11:04   CTrade::OrderSend: modify position #880 USDJPY (sl: 148.803, tp: 148.753) [invalid stops]
2022.10.26 10:19:15.965 Core 1  2022.10.21 18:11:04   MODIFY: bid 148.792 new sl 148.803 ancien 149.153
2022.10.26 10:19:15.965 Core 1  2022.10.21 18:11:04   failed modify #880 sell 0.71 USDJPY sl: 149.153, tp: 148.753 -> sl: 148.807, tp: 148.753 [Invalid stops]
2022.10.26 10:19:15.965 Core 1  2022.10.21 18:11:04   CTrade::OrderSend: modify position #880 USDJPY (sl: 148.807, tp: 148.753) [invalid stops]
2022.10.26 10:19:15.965 Core 1  2022.10.21 18:11:04   MODIFY: bid 148.796 new sl 148.807 ancien 149.153
 

A Buy opens at Ask and closes at Bid. Likewise, Sell opens at Bid, closes at Ask.

 

Thank you  Enrique Dangeroux, i didn't know that point. All work now ^^


Thank you to everybody ))

Reason: