Dzienny limit straty w bocie MT5 - jak go liczyć i wdrożyć
W skrócie: dzienny limit straty to próg, np. 5% salda, czyli 500 USD na koncie 10 000 USD. Po jego przekroczeniu bot zamyka swoje pozycje i do końca dnia nic nie otwiera. Sam próg to za mało. Trzeba wiedzieć, od jakiej kwoty bot liczy stratę (saldo czy equity na początku dnia), o której zaczyna się dzień (o północy serwera brokera, nie Twojej) i czy blokada zostaje po restarcie terminala. Jeśli któraś z tych rzeczy jest źle ustawiona, konto prop jest stracone, nawet gdy strategia jest dobra.
Po co limit dzienny, skoro każda transakcja ma SL?
Stop loss (SL) chroni jedną pozycję. Limit dzienny chroni całe konto w sytuacjach, których SL nie obejmuje:
- seria strat w jednym dniu: bot wchodzi 4 razy i 4 razy trafia w SL,
- kilka botów na jednym koncie, każdy z osobnym ryzykiem, które razem przekraczają próg,
- poślizg na SL przy newsach albo luce cenowej, czyli strata 1,5-2R zamiast 1R (przy ryzyku 100 USD to 150-200 USD),
- błąd w kodzie, przez który bot otwiera pozycje w pętli.
Na koncie prop firmy przekroczenie dziennego limitu oznacza utratę konta od razu. Wystarczy 1 dolar ponad limit, nawet przez chwilę, bo firma liczy equity, czyli wynik razem z otwartymi pozycjami.
Od czego liczyć: saldo czy equity?
W tym prop firmy różnią się najbardziej. Typowe warianty bazy dnia:
| Baza dnia | Jak liczona | Pułapka |
|---|---|---|
| Saldo na początek dnia | zamknięte transakcje do północy | otwarta pozycja z zyskiem nie podnosi bazy |
| Equity na początek dnia | saldo + otwarte pozycje o północy | zysk z nocnej pozycji podnosi bazę, a jego oddanie liczy się jako strata |
| Wyższe z dwóch | max(saldo, equity) | najsurowsze, częste u firm z challenge dwuetapowym |
| Saldo początkowe konta | stała kwota (np. 5% z 10 000) | najprostsze, nie zmienia się w czasie |
W bocie liczę bazę tak samo jak firma, u której jest konto. Jeśli nie wiem, jak liczy firma, biorę wariant najsurowszy i zostawiam zapas, np. bot blokuje się przy 80% limitu firmy.
Kiedy zaczyna się dzień?
Dzień w regułach prop firmy to prawie zawsze dzień serwera brokera, a nie czas w Polsce. Przy serwerze GMT+2 albo GMT+3 północ serwera wypada o 23:00 albo 22:00 w Polsce. Część firm, np. z serwerem w czasie NY-close, zaczyna nowy dzień o 17:00 czasu Nowego Jorku.
W kodzie bota oznacza to jedno: nowy dzień wykrywam z TimeCurrent() (czas serwera), a nie z TimeLocal()
(czas komputera). Dwa razy w roku USA i Europa zmieniają czas w różnych terminach i przez 2-3 tygodnie różnica
godzin jest inna. W tym okresie sprawdź, czy bot nie zaczyna dnia w złym momencie.
Jak to działa w moich botach
Wszystkie moje boty używają tego samego, wspólnego kodu limitu dziennego, więc każdy robi to samo:
- Na początku dnia serwera zapisuje bazę dnia (saldo albo equity).
- Co tik albo co minutę liczy wynik dnia: transakcje zamknięte dziś plus otwarte pozycje.
- Po przekroczeniu progu zamyka swoje pozycje (po swoim numerze magic) i ustawia blokadę do końca dnia.
- Blokada jest zapisana w zmiennej globalnej terminala, więc restart bota w ciągu dnia nie odblokowuje handlu.
- W Testerze odtwarzanie blokady jest wyłączone, każdy backtest startuje od zera.
Limit całego konta czy limit bota?
To wyszło w praktyce na koncie z kilkoma botami. Pierwsza wersja liczyła wynik całego konta. Jeden bot na minusie blokował wtedy wszystkie pozostałe, także te, które tego dnia zarabiały. Dziś blokada bota liczy tylko jego własne transakcje (jego numer magic), a limitu całego konta pilnuje osobny mechanizm. Więcej o liczeniu ryzyka kilku botów: Ryzyko łączne kilku pozycji i kilku botów.
Przykład progu z mojego konta demo 100 000 USD: dzienny limit bota 0,3% był za ciasny i blokował po jednej stracie. Podnieśliśmy go do 3% salda początkowego.
Błędy, które widziałem na żywo
Saldo początkowe ustawione na 0. Bot liczy procent od salda początkowego z inputu. Jeśli w inputie zostaje 0, to 5% z zera daje zero i bot blokuje się od razu albo nie blokuje się nigdy, zależnie od kodu. Przed wdrożeniem zawsze sprawdzam na każdym wykresie, czy saldo początkowe w ustawieniach bota jest większe od zera.
Awaria zasilania kasuje stan. MT5 zapisuje zmienne globalne na dysk dopiero przy zamknięciu terminala. Po awarii prądu terminal wstał bez blokady i bez bazy dnia. Bot “zapomniał”, że tego dnia już stracił. Teraz wynik dnia odtwarzam z historii transakcji (transakcje od północy serwera), a zmienna globalna jest tylko pomocnicza.
Limit sprawdzany tylko po zamkniętych transakcjach. Bot sprawdzał wynik dopiero po zamknięciu pozycji, a firma liczyła equity na żywo. Otwarta pozycja na -4,8% plus szeroki spread przy newsach i konto było stracone, zanim bot cokolwiek zrobił. Limit musi liczyć także otwarte pozycje.
Jak ustawić próg - przykład liczbowy
Konto 10 000 USD, limit firmy 5% dziennie, czyli 500 USD. Ryzyko na transakcję 100 USD, czyli 1R.
- Próg bota: 80% limitu firmy, czyli 400 USD (4R). Zostaje 100 USD zapasu na poślizg i spread przy zamykaniu.
- Jeśli na koncie są 3 boty po 100 USD ryzyka i wszystkie mają naraz otwarte pozycje, to razem 300 USD. Do progu zostaje 100 USD. Wtedy limit pojedynczego bota ustaw np. na 2R, a limit konta na 4R.
- Sprawdź w backteście, ile dni w roku bot doszedłby do limitu. Jeśli więcej niż kilka, ryzyko na transakcję jest za wysokie.
Checklista wdrożenia
- baza dnia liczona tak samo jak u firmy (saldo, equity albo wyższe z nich),
- dzień liczony wg czasu serwera,
- wynik dnia obejmuje otwarte pozycje,
- próg z zapasem (70-80% limitu firmy),
- blokada zostaje po restarcie i po awarii zasilania (odtworzenie z historii),
- saldo początkowe na wykresie większe od zera,
- po blokadzie przychodzi mail albo powiadomienie push,
- test w Testerze na dniu z serią strat: czy bot naprawdę się zatrzymał.
Powiązane
- Dzienny cel zysku, czyli zatrzymanie po zysku
- Blokada handlu zamiast usuwania bota
- Maksymalny drawdown konta
- Ryzyko łączne kilku pozycji i kilku botów
- Luka cenowa i stop loss
- Pojęcia z artykułu: słowniczek, skorowidz
Ostrzeżenie: handel CFD i forex wiąże się z wysokim ryzykiem utraty kapitału. Artykuł ma charakter edukacyjny i nie jest rekomendacją inwestycyjną.