SYMBOL_TRADE_FREEZE_LEVEL
Strefa wokół ceny, w której nie można modyfikować ani anulować zlecenia. Ta właściwość dotyczy modyfikacji istniejącego zlecenia, a nie zakładania
long SymbolInfoInteger(string symbol, SYMBOL_TRADE_FREEZE_LEVEL);
1 fragment kodu z tej strony przeszedł przez kompilator MetaEditor build 6090, 2026-08-05.
Gdy cena zbliży się do poziomu zlecenia bliżej niż ta wartość, zlecenie jest zamrożone: nie da się go zmienić ani usunąć, dopóki cena się nie oddali albo zlecenie nie zadziała.
Dlaczego to nie jest oczywiste
Ta właściwość dotyczy modyfikacji istniejącego zlecenia, a nie zakładania nowego — i to jest różnica wobec SYMBOL_TRADE_STOPS_LEVEL, z którą jest notorycznie mylona. Trailing stop, który sprawdza tylko poziom stopów, w momencie zbliżenia ceny do stopa zacznie dostawać 10029 i będzie ponawiał próbę przy każdym ticku, aż do 10024.
Większość brokerów detalicznych podaje tu zero. Ci sami brokerzy podnoszą tę wartość w chwilach wysokiej zmienności, czyli dokładnie wtedy, gdy trailing stop pracuje najintensywniej.
Kod
//--- czy wolno teraz ruszać stopa tej pozycji
bool WolnoModyfikowac(const string symbol, const double poziomStopa)
{
long zamrozenie = SymbolInfoInteger(symbol, SYMBOL_TRADE_FREEZE_LEVEL);
if(zamrozenie <= 0)
return true;
MqlTick tick;
if(!SymbolInfoTick(symbol, tick))
return false;
double strefa = zamrozenie * SymbolInfoDouble(symbol, SYMBOL_POINT);
return (MathAbs(tick.bid - poziomStopa) > strefa);
}