retcode 10038
10038 — TRADE_RETCODE_INVALID_CLOSE_VOLUME
Wolumen zamknięcia jest większy niż wolumen otwartej pozycji.
1 fragment kodu z tej strony przeszedł przez kompilator MetaEditor build 6090, 2026-08-05.
Co ten kod znaczy
Próba zamknięcia większej ilości, niż faktycznie masz. Zwykle skutek pracy na nieaktualnych danych.
Skąd się bierze
- częściowe zamknięcie liczone z wolumenu sprzed wcześniejszego zamknięcia
- pozycja częściowo zamknięta przez stop loss albo ręcznie
- zaokrąglenie wolumenu w górę przy zamykaniu połowy pozycji
Co z tym zrobić
Wolumen do zamknięcia odczytuj z pozycji tuż przed operacją i zaokrąglaj zawsze w dół, do kroku instrumentu:
if(!PositionSelectByTicket(bilet))
return;
double obecny = PositionGetDouble(POSITION_VOLUME);
double krok = SymbolInfoDouble(symbol, SYMBOL_VOLUME_STEP);
double doZamkniecia = MathFloor((obecny / 2.0) / krok) * krok;
doZamkniecia = MathMin(doZamkniecia, obecny);