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

MQL5 / Pułapki

Swap w backteście liczony po dzisiejszych stawkach

Tester nalicza swap, ale na podstawie wartości obowiązujących dziś, nie w dniu testowanej transakcji. Przy strategiach trzymających pozycje dłużej to zmienia wynik.

2 fragmenty kodu z tej strony przeszły przez kompilator MetaEditor build 6090, 2026-08-05.

Pytanie wraca regularnie: czy tester strategii w ogóle liczy swap? Odpowiedź brzmi tak — i właśnie dlatego warto wiedzieć, jak go liczy.

Skąd tester bierze stawki

Z bieżących właściwości instrumentu: SYMBOL_SWAP_LONG, SYMBOL_SWAP_SHORT i SYMBOL_SWAP_MODE. Nie ma historii tych wartości — ani terminal, ani serwer jej nie przechowuje.

W praktyce znaczy to, że test transakcji sprzed pięciu lat jest obciążany kosztem finansowania obowiązującym dzisiaj. Stawki swapowe idą za stopami procentowymi, a te zmieniły się w ostatnich latach o kilka punktów procentowych. Dla strategii wewnątrzdniowej to bez znaczenia. Dla strategii trzymającej pozycje tygodniami koszt finansowania bywa większy niż cała zakładana przewaga.

Tryb decyduje o jednostce

Sama liczba nic nie znaczy bez SYMBOL_SWAP_MODE. Ta sama wartość bywa punktami, procentem w skali roku, kwotą w walucie depozytu albo w walucie zysku.

Odczyt stawek razem z jednostką
double swapDlugi  = SymbolInfoDouble(symbol, SYMBOL_SWAP_LONG);
double swapKrotki = SymbolInfoDouble(symbol, SYMBOL_SWAP_SHORT);
long tryby = SymbolInfoInteger(symbol, SYMBOL_SWAP_MODE);
long dzienPotrojny = SymbolInfoInteger(symbol, SYMBOL_SWAP_ROLLOVER3DAYS);

PrintFormat("%s: swap dlugi %.3f, krotki %.3f, tryb %d, potrojny w dniu %d",
            symbol, swapDlugi, swapKrotki, (int)tryby, (int)dzienPotrojny);

Przeliczanie tych liczb na pieniądze bez sprawdzenia trybu daje wynik losowy — opisaliśmy to przy SYMBOL_SWAP_LONG.

Potrójne naliczenie

Raz w tygodniu naliczany jest swap za trzy dni, żeby pokryć weekend. Dzień tygodnia podaje SYMBOL_SWAP_ROLLOVER3DAYS i zwykle jest to środa, ale nie u każdego brokera i nie na każdym instrumencie.

Strategia, która trzyma pozycje przez noc, ma w tym dniu trzykrotnie wyższy koszt. Jeśli twoja przewaga jest niewielka, to jeden dzień w tygodniu decyduje o znaku wyniku.

Jak sprawdzić wpływ swapu na własny wynik

Nie zgaduj, zmierz. OnTester ma dostęp do statystyk przebiegu, a historia transakcji do konkretnych naliczeń.

Udział kosztów w wyniku przebiegu
double OnTester()
  {
   double zysk = TesterStatistics(STAT_PROFIT);
   double sumaSwapow = 0.0;
   double sumaProwizji = 0.0;

   if(HistorySelect(0, TimeCurrent()))
      for(int i = 0; i < HistoryDealsTotal(); i++)
        {
         ulong bilet = HistoryDealGetTicket(i);
         if(bilet == 0)
            continue;

         sumaSwapow   += HistoryDealGetDouble(bilet, DEAL_SWAP);
         sumaProwizji += HistoryDealGetDouble(bilet, DEAL_COMMISSION);
        }

   PrintFormat("wynik %.2f | swapy %.2f | prowizje %.2f",
               zysk, sumaSwapow, sumaProwizji);

   return zysk;
  }

Powiązane