Przejdź do treści
MQL5 · MetaTrader 5 · po polsku
kod odczarowany

MQL5 / Instrument

SYMBOL_VOLUME_STEP

Minimalny krok zmiany wolumenu zlecenia. Zaokrąglenie musi iść w dół, nie do najbliższej wielokrotności. Wolumen

double SymbolInfoDouble(string symbol, SYMBOL_VOLUME_STEP);

1 fragment kodu z tej strony przeszedł przez kompilator MetaEditor build 6090, 2026-08-05.

Wolumen musi być całkowitą wielokrotnością tej wartości. Typowo 0.01 na walutach, 0.1 na części indeksów, 1.0 na akcjach.

Dlaczego to nie jest oczywiste

Zaokrąglenie musi iść w dół, nie do najbliższej wielokrotności. Wolumen wyliczony z ryzyka i zaokrąglony w górę przekracza założone ryzyko — przy kroku 1.0 na akcjach różnica między 1.4 a 2.0 to czterdzieści procent więcej, niż zamierzałeś.

Druga rzecz: liczbę miejsc dziesiętnych do NormalizeDouble też trzeba wziąć z kroku, a nie wpisać na sztywno. Krok 0.01 daje dwa miejsca, krok 1.0 zero miejsc, a wysłanie 1.00 tam, gdzie broker oczekuje 1, bywa odrzucane.

Kod

SYMBOL_VOLUME_STEP
//--- liczba miejsc dziesiętnych wynikająca z kroku wolumenu
int CyfryWolumenu(const string symbol)
  {
   double krok = SymbolInfoDouble(symbol, SYMBOL_VOLUME_STEP);
   if(krok <= 0.0)
      return 2;

   return (int)MathMax(0.0, MathRound(-MathLog(krok) / MathLog(10.0)));
  }

//--- zaokrąglenie zawsze w dół, do kroku
double wolumen = MathFloor(surowyWolumen / krok) * krok;
wolumen = NormalizeDouble(wolumen, CyfryWolumenu(symbol));

Powiązane