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);