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

MQL5 / Instrument

SYMBOL_VOLUME_LIMIT

Maksymalny łączny wolumen pozycji i zleceń na jednym instrumencie. Mylona z `SYMBOL_VOLUME_MAX`, a to zupełnie co innego. `SYMBOL_VOLUME_MAX`

double SymbolInfoDouble(string symbol, SYMBOL_VOLUME_LIMIT);

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

Ogranicza sumę, a nie pojedyncze zlecenie. Obejmuje otwarte pozycje razem ze zleceniami oczekującymi.

Dlaczego to nie jest oczywiste

Mylona z SYMBOL_VOLUME_MAX, a to zupełnie co innego. SYMBOL_VOLUME_MAX dotyczy pojedynczego zlecenia, SYMBOL_VOLUME_LIMIT całej ekspozycji. Można spełnić pierwszy warunek i złamać drugi, dokładając trzecią pozycję po 0.5 lota przy limicie 1.0.

Wartość zero znaczy „bez limitu" i tak jest u większości brokerów detalicznych. Kod, który testowałeś tylko u takiego brokera, nigdy nie wszedł w tę ścieżkę — a u brokera z limitem strategia dokładająca do pozycji przestanie działać w połowie, zgłaszając 10034.

Kod

SYMBOL_VOLUME_LIMIT
double limit = SymbolInfoDouble(symbol, SYMBOL_VOLUME_LIMIT);
if(limit <= 0.0)
   return true;                 // brak limitu

//--- sumujemy własną ekspozycję na tym instrumencie
double lacznie = 0.0;
for(int i = PositionsTotal() - 1; i >= 0; i--)
  {
   ulong bilet = PositionGetTicket(i);
   if(bilet == 0 || !PositionSelectByTicket(bilet))
      continue;
   if(PositionGetString(POSITION_SYMBOL) == symbol)
      lacznie += PositionGetDouble(POSITION_VOLUME);
  }

if(lacznie + nowyWolumen > limit)
   PrintFormat("%s: limit %.2f, mamy %.2f, dokładamy %.2f — nie zmieści się",
               symbol, limit, lacznie, nowyWolumen);

Powiązane