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

MQL5 / Pozycja

POSITION_VOLUME

Bieżący wolumen pozycji. Wolumen zmienia się w trakcie życia pozycji, a kod zapamiętujący go przy

double PositionGetDouble(POSITION_VOLUME);

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

Wielkość pozycji po uwzględnieniu wszystkich dołożeń i częściowych zamknięć.

Dlaczego to nie jest oczywiste

Wolumen zmienia się w trakcie życia pozycji, a kod zapamiętujący go przy otwarciu tego nie zauważy. Najczęstszy skutek: próba zamknięcia całości wolumenem sprzed częściowego zamknięcia, kończąca się kodem 10038.

Przy zamykaniu części pozycji wynik dzielenia trzeba dopasować do kroku instrumentu i zaokrąglić w dół — inaczej dostaniesz 10014 albo zamkniesz więcej, niż zamierzałeś.

Kod

POSITION_VOLUME
if(!PositionSelectByTicket(bilet))
   return;

string symbol = PositionGetString(POSITION_SYMBOL);
double obecny = PositionGetDouble(POSITION_VOLUME);
double krok   = SymbolInfoDouble(symbol, SYMBOL_VOLUME_STEP);
double minimum = SymbolInfoDouble(symbol, SYMBOL_VOLUME_MIN);

//--- polowa pozycji, dopasowana do kroku instrumentu
double polowa = MathFloor((obecny / 2.0) / krok) * krok;

if(polowa < minimum || obecny - polowa < minimum)
  {
   Print("Czesciowe zamkniecie zostawiloby resztke ponizej minimum.");
   return;
  }

PrintFormat("zamykam %.2f z %.2f lota", polowa, obecny);

Powiązane