Hi there. Invalid price error. Need help with a fix.

 
void OpenSellPosition()
  {
   double lowest_values[], highest_values[];
   CopyLow(_Symbol, _Period, 0, recent_lows_period, lowest_values);
   CopyHigh(_Symbol, _Period, 0, recent_high_period, highest_values);

   double entryPrice = iLow(Symbol(), Period(), 1) * 0.9998;
   double stopLoss = calculate_local_maximum(highest_values);
   double takeProfit = stopLoss - RiskRateRatio * (stopLoss - entryPrice);

   double lotSize = calculateLotSize(entryPrice, stopLoss);
   datetime expTime=TimeCurrent()+3600*TimeoutHours;
// Работа с объектом CTrade
   bool result = trade.SellStop(lotSize, NormalizeDouble(entryPrice, Digits()), _Symbol, NormalizeDouble(stopLoss, Digits()),  NormalizeDouble(takeProfit, Digits()), ORDER_TIME_SPECIFIED, expTime);
}


void OpenBuyPosition()
  {
   double lowest_values[], highest_values[];
   CopyLow(_Symbol, _Period, 0, recent_lows_period, lowest_values);
   CopyHigh(_Symbol, _Period, 0, recent_high_period, highest_values);

   double entryPrice = iHigh(Symbol(), Period(), 1) * 1.0002;
   double stopLoss = calculate_local_minimum(lowest_values);
   double takeProfit = stopLoss + RiskRateRatio * (entryPrice - stopLoss);
   double lotSize = calculateLotSize(entryPrice, stopLoss);
}

On some simbols i've got invalid price errors. For example i tested this variation on spx(s&p500) and on a spy(s&p trust) and on spy I've started to get tons of errors that says - "invalid price." Need help with it 
 
Аркаша:
On some simbols i've got invalid price errors. For example i tested this variation on spx(s&p500) and on a spy(s&p trust) and on spy I've started to get tons of errors that says - "invalid price." Need help with it 
Are you a programmer?
 
   double entryPrice = iHigh(Symbol(), Period(), 1) * 1.0002;
   double stopLoss = calculate_local_minimum(lowest_values);
   double takeProfit = stopLoss + RiskRateRatio * (entryPrice - stopLoss);
  1. Floating point has an infinite number of decimals, it's you were 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) — NormalizeDouble 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 #10 (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 using NormalizeDouble , 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 (and lots) 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)

Reason: