MQL5

Redondear un precio al tick size (no NormalizeDouble)

En el oro, los índices o los futuros, el paso de cotización (SYMBOL_TRADE_TICK_SIZE) puede valer 0.25 o 0.05: NormalizeDouble no basta, hay que cuantizar el precio al múltiplo del tick.

Requisitos

MetaTrader 5, MQL5

MQL5
double RoundToTick(string symbol, double price)
{
   double tickSize = SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_SIZE);
   int    digits   = (int)SymbolInfoInteger(symbol, SYMBOL_DIGITS);

   if(tickSize <= 0.0)
      return NormalizeDouble(price, digits); // repli

   // Quantifier au multiple de tick le plus proche, PUIS normaliser
   double rounded = MathRound(price / tickSize) * tickSize;
   return NormalizeDouble(rounded, digits);
}

// Exemple : sur un future coté au quart de point
// RoundToTick(sym, 15123.37) -> 15123.25 (et non 15123.37)
double entry = RoundToTick(_Symbol, levelFromIndicator);

Resultado

2026.06.10 10:15:00.310  TickRound (US500,M5)  tick_size=0.25 : niveau indicateur 5123.37 -> 5123.25
2026.06.10 10:15:00.345  TickRound (US500,M5)  BuyLimit 5123.25 accepté (retcode 10009)
2026.06.10 10:15:00.412  TickRound (XAUUSD,M5)  tick_size=0.05 : 2380.43 -> 2380.45
2026.06.10 10:15:00.413  TickRound (XAUUSD,M5)  NormalizeDouble seul aurait laissé 2380.43 -> « invalid price »
Tick SizeNormalizeDoubleInvalid PricePiège

Snippets relacionados

Volver al Data Lab