Pierwsza strategia się wykonała. Teraz sprawdzisz, czy symulowane transakcje faktycznie wynikają z reguł i co oznaczają wyświetlane wyniki.

Dane demonstracyjne to sztuczny szereg cen. Wynik pozwala sprawdzić działanie programu, nie określa oczekiwanej stopy zwrotu rzeczywistego rynku.

Najpierw obejrzyj jedną transakcję

Uruchom crossover_strategy.py z długościami 5 i 20. Poczekaj na koniec i wybierz Trades pod wykresem. Zamknięty panel otworzysz strzałką po prawej.

Tabela podaje wejście i wyjście transakcji. Dla longa wejście jest kupnem, wyjście sprzedażą.

KolumnaCo pokazuje?
TradeNumer transakcji i identyfikator wejścia
Entry timeCzas realizacji wejścia
Entry priceCenę realizacji wejścia
Exit timeCzas realizacji wyjścia
Exit priceCenę realizacji wyjścia
QtyIlość
ProfitWynik pieniężny zamkniętej transakcji
Profit %Wynik procentowy transakcji
Pod wykresem strategii PyneIDE otwarta tabela Trades pokazuje czasy, ceny i wyniki transakcji.
Tabela Trades pozwala osobno sprawdzić zrealizowane wejścia i wyjścia.

Kliknij transakcję i znajdź jej okres na wykresie. Sprawdź przecięcie przed wejściem i to, które wywołało zamknięcie.

Pierwotny program nie podawał commission_value ani slippage, więc przebieg bazowy nie uwzględnia kosztów, które zaraz dodamy. Najpierw w tej prostej wersji sprawdź kierunek, czas i ilość.

Policz prostą transakcję

Kupno jednostki po 100 i sprzedaż po 103 daje różnicę 3. Przy wartości punktu 1 i bez kosztów jest to także wynik pieniężny.

Ogólnie wynik cenowy longa:

(cena wyjścia − cena wejścia) × ilość × wartość punktu

Wartość punktu należy do metadanych rynku. Określa pieniężną wartość ruchu ceny o jednostkę przy jednej jednostce pozycji. W danych DEMO wynosi 1.

Prowizje zmniejszają wynik netto. Poślizg zmienia cenę realizacji, więc już jest ujęty w różnicy cen. Nie odejmuj go ponownie od zmodyfikowanych cen.

Widok Performance

Performance pokazuje kapitał całego przebiegu. Znajdziesz pola:

  • Cumulative P&L: zmianę kapitału wobec początkowego;
  • Max drawdown: największy spadek od wcześniejszego szczytu badanej krzywej;
  • Final equity: kapitał na ostatniej przetworzonej świecy;
  • Max run-up: największy wzrost od wcześniejszego dołka kapitału.
Widok Performance PyneIDE zawiera Cumulative P&L, Max drawdown, Final equity i krzywą kapitału.
Performance pokazuje krzywą kapitału i podsumowanie całego przebiegu.

Equity może obejmować zmienną wartość otwartej pozycji. Ostatni kapitał nie musi więc równać się początkowemu plus zyski zamkniętych transakcji. Sprawdź też pozycję pozostawioną na końcu.

Oglądaj przebieg krzywej, nie tylko punkt końcowy. Ten sam wynik może wymagać innych obsunięć i długich okresów strat.

Widok Stats

Stats pokazuje szczegółową statystykę końcową. Total Trades pomaga sprawdzić liczbę zamkniętych transakcji, Net Profit ich łączny wynik netto.

Profit Factor to łączny zysk podzielony przez bezwzględną łączną stratę. Bez transakcji stratnych iloraz nie jest zwykłą skończoną liczbą do porównań.

Skuteczność określa, jaka część zamkniętych transakcji była zyskowna. Sama nie wyznacza łącznego zysku: kilka dużych strat może przeważyć wiele małych zysków.

Przy małej liczbie transakcji łatwo o mylące podsumowanie. Zawsze oceniaj ich liczbę obok wskaźników i sprawdzaj pojedyncze straty.

Koszty w Properties

Kołem Strategy properties w dolnym panelu otwórz ustawienia strategii i wybierz Properties. Możesz tam zmienić kapitał początkowy, ilość i koszty.

Dwa kolejne przebiegi są ćwiczeniem porównawczym. Koszty należą do przykładu; dla prawdziwego rynku ustawiasz je osobno.

  1. Sprawdź Initial capital 10000 oraz Order size 1 Contracts.
  2. W Commission ustaw 0,1 i jednostkę % of order value. Możesz wpisać 0.1.
  3. Slippage ustaw na 2 ticki.
  4. Kliknij Save, uruchom Run Pyne code i poczekaj na zakończenie.
Ustawienia strategii pokazują Properties z polami Commission i Slippage.
Properties podaje prowizję w procentach, a poślizg w tickach.

0,1 procent nie oznacza 10 procent: pole jest w jednostkach procentowych. Dla realizacji o wartości 100 daje 0,1 prowizji. Wejście i wyjście są realizacjami, każda może mieć koszt.

Tick to najmniejszy krok ceny rynku. W DEMO wynosi 0,01, więc dwa ticki to ruch o 0,02. Poślizg przesuwa cenę zlecenia rynkowego w niekorzystnym dla strategii kierunku.

Na innym rynku tick i wartość punktu mogą się różnić. Nie przenoś interpretacji kosztów DEMO automatycznie na inny instrument.

Ustawienia realizacji też są częścią eksperymentu

On bar close w Fill orders wpływa na czas realizacji zleceń rynkowych. Dla bazowej strategii pozostaw wyłączone, żeby zlecenie sygnału realizowało się na następnym otwarciu.

After order is filled może żądać przeliczenia po realizacji. Using bar magnifier może badać realizacje wewnątrz świecy dokładniejszymi danymi z niższego interwału. To inne warunki wykonania; podczas porównania z bazą pozostaw je wyłączone.

Nawet jedna zmiana ustawienia tworzy nowy wynik. Zmieniając naraz długość, ilość, koszt i model realizacji, nie ustalisz przyczyny różnicy.

Zachowaj opis porównania

Przycisk Open trades output CSV na pasku wykresu otwiera eksport transakcji. Open plot output CSV otwiera tabelę rysowanych wartości. Pliki znajdziesz też w Output projektu.

Przed ponownym uruchomieniem skopiuj potrzebny eksport pod inną nazwę. Nazwa wyniku nie identyfikuje wszystkich ustawień.

We własnych notatkach zapisz przynajmniej:

PrzebiegDaneSzybka/wolna długośćIlośćProwizjaPoślizg
BazowyDEMO5 / 201 jednostka0%0 ticków
Z kosztemDEMO5 / 201 jednostka0,1%2 ticki

Dopisz rzeczywiście otrzymane wyniki. Wypełnij tabelę w swoich notatkach na podstawie uruchomień.

Spróbuj samodzielnie

Porównaj tę samą transakcję bez kosztów i z kosztami. Sprawdź wejście, wyjście i zysk. Co się zmieniło, a co w regule sygnału pozostało identyczne?

Rozwiązanie zadania

Średnie i przecięcia nie wynikają z prowizji ani poślizgu, więc sygnały bazowe się nie zmieniają. Ceny wejścia i zamknięcia mogą być mniej korzystne z powodu poślizgu. Prowizja dalej zmniejsza wynik netto.

Bezpośrednie porównanie wymaga tych samych wejść, ilości, danych i trybu realizacji oraz możliwości wykonania zleceń w obu przypadkach.

Wybór innych danych

Po demonstracji możesz pobrać własne dane rynkowe w PyneIDE. Mogą mieć inne ceny, tick, limity ilości i transakcje. Najpierw obejrzyj dane, dopiero potem porównuj wyniki.

  1. W lewym widoku Pyne najedź na nagłówek Data. Kliknij Download Data…, ikonę chmury ze strzałką w dół. Otworzy się Symbol Browser. To samo znajdziesz pod prawym przyciskiem nagłówka Data.
  2. Wybierz Provider. Ilustracja używa ccxt; wtedy w Broker wybierasz konkretne źródło.
  3. W filtrze wpisz nazwę rynku. Na ilustracji wybieramy spot BTC/USD ze źródła coinbase. Zwracaj uwagę na pełny symbol: podobne początki mogą oznaczać różne rynki.
  4. Timeframe ustaw na 1D, From na 365 days back. now w To oznacza dane do chwili pobrania.
  5. Kliknij Download i poczekaj na koniec.
Symbol Browser PyneIDE ma wybrany dzienny rynek spot BTC/USD źródła coinbase dostawcy ccxt.
Źródło, rynek, interwał i okres wspólnie określają pobierane dane w Symbol Browser.

W informacjach po prawej mintick to krok ceny, pointvalue wartość punktu, mincontract najmniejsza ilość. Sprawdź je dla własnych danych. Dostępność i wymagane uprawnienia zależą od dostawcy; pobranie tych danych nie oznacza korzystania z rachunku transakcyjnego.

Dane trafiają do Data projektu. Kliknięcie nazwy rynku na górze wykresu strategii otwiera wybór danych, gdzie możesz wskazać nowe. Wykres się przeliczy; nadal sprawdź wejścia i właściwości strategii.

Zakres czasu nie gwarantuje liczby świec: zależy od dostępnej historii, dni handlu i braków. Ponowne pobranie może zmienić serię, więc do porównań zachowaj plik danych i jego metadane.

Interpretacja przebiegu

Backtest liczy na podstawie reguły, danych i modelu realizacji. Pomaga sprawdzić zgodność kodu z opisem i zachowanie w modelu. Przyszłych danych w wyniku nie ma.

Wielokrotna zmiana parametrów na tych samych danych może znaleźć regułę dopasowaną do nich. Osobny okres nieużywany do strojenia odpowiada na inne pytanie. Dlatego projekt końcowy osobno sprawdza poprawność programu i porównanie ustawień.