Właściwości strategii

Każda strategia napisana w Pine posiada szereg właściwości, które określają jej zachowanie: 

  1. Kapitał początkowy,
  2. Waluta bazowa,
  3. Wielkość zlecenia,
  4. Piramidowanie,
  5. Prowizja,
  6. Sprawdź cenę dla zleceń z limitem,
  7. Poślizg,
  8. Margin
  9. Przelicz ponownie

 Znajdziesz je w ustawieniach strategii, w zakładce Właściwości:


Każdy z parametrów określonych we właściwościach strategii może być zmieniony poprzez edycję argumentów wywołania funkcji strategy() w kodzie Pine odpowiedniej strategii:

strategy(title, initial_capital, currency, default_qty_value, default_qty_type, pyramiding, commission_type, commission_value, backtest_fill_limits_assumption, slippage, process_orders_on_close, margin_long, margin_short, calc_on_order_fills, calc_on_every_tick)

Przyjrzyjmy się teraz każdemu parametrowi wejściowemu w menu Właściwości i odpowiadającemu mu parametrowi w języku Pine:

1 - Kapitał początkowy (parametr: initial_capital) odpowiada za saldo początkowe strategii ustalone w Walucie bazowej. Wartość domyślna tego parametru to 100,000. W przypadku niektórych symboli może się okazać, że ta wartość musi zostać zwiększona, aby transakcje mogły być zrealizowane.

2 - Waluta bazowa (parametr: currency) określa walutę używaną do obliczeń. Wyniki pojawiające się w zakładce Tester Strategii (zysk, strata, obsunięcie kapitału itp.) są wyrażone w tej walucie. Dostępne opcje to:

Domyślnie, USD, EUR, AUD, GBP, NZD, CAD, CHF, HKD, JPY, NOK, SEK, SGD, TRY, ZAR. Jeśli wybrano opcję Domyślnie, strategia użyje domyślnej waluty dla tego symbolu i nie wystąpi przewalutowanie.

3 - Wielkość zlecenia (parametry: default_qty_value, default_qty_type). Należy podać wartość oraz tryb obliczania. Należy pamiętać, że obliczone wartości mogą podlegać ograniczeniom wynikającym z minimalnych wartości transakcji dla danego symbolu:

  • Kontrakty (argument: strategy.fixed) - strategia otworzy określoną liczbę kontraktów/akcji/lotów.
  • Kwota w walucie (argument: strategy.cash) - strategia otworzy pozycję, której wielkość określa wybrana kwota w walucie bazowej.
  • Procent kapitału (argument: strategy.percent_of_equity) - wielkość pozycji będzie obliczana jako procent dostępnego kapitału w momencie otwarcia transakcji.

4 - Piramidowanie (parametr: pyramiding) określa maksymalną liczbę dozwolonych kolejnych transakcji w tym samym kierunku. Kiedy piramidowanie jest wyłączone, strategia może otworzyć tylko jedną długą lub krótką pozycję, nawet jeśli warunki wejścia są spełnione. Piramidowanie wpływa tylko na transakcje dokonywane przy użyciu funkcji strategy.entry(). Parametr nie ma wpływu na zlecenia utworzone za pomocą strategy.order().

5 - Prowizja (parametry: commission_typecommission_value). To jest kwota prowizji do zapłaty za każdą transakcję. Należy podać wartość i sposób obliczania. Zwróć uwagę, że prowizja jest pobierana zarówno przy otwarciu jak i zamknięciu transakcji, a w przypadku użycia wartości procentowej, obliczona prowizja będzie się zmieniać w zależności od wartości transakcji:

  • Procent od wartości transakcji (argument: strategy.commission.percent) - nakłada prowizję od każdej transakcji w wysokości określonej wartości procentowej.
  • Waluta od kontraktu (argument: strategy.commission.cash_per_contract) - nakłada prowizję od każdego kontraktu.
  • Waluta od zlecenia (argument: strategy.commission.cash_per_order) - nakłada prowizję od każdego zlecenia.

6 - Sprawdź cenę dla zleceń z limitem (parametr: backtest_fill_limits_assumption) zaostrza warunki otwarcia pozycji przy użyciu zleceń z limitem ceny. Domyślnie wartość ta wynosi 0, co oznacza, że zlecenia z limitem ceny są realizowane na danych historycznych w momencie osiągnięcia ceny wskazanej w zleceniu. Jeżeli parametr nie jest równy zero, wówczas zlecenia z limitem ceny mogą zostać zrealizowane w ramach danego słupka tylko wtedy, gdy cena rynkowa przekroczyła poziom zlecenia z limitem ceny o określoną liczbę ticków.

7 - Poślizg (parametr: slippage) określa liczbę ticków, które są dodawane do ceny realizacji zlecenia typu market lub zlecenia stop. 

8 - Margin  dla pozycji długich/krótkich (parametry: margin_long, margin_short) określa depozyt zabezpieczający dla każdej transakcji, tj. procent pozycji, który inwestor musi sfinansować. Na przykład, jeśli Margin dla długich pozycji jest ustawiony na 25%, trader musi mieć wystarczające środki na pokrycie 25% otwartej transakcji i mogą potencjalnie wydać do 400% swojego kapitału na każdą transakcję. Jeśli transakcja została otwarta i zaczyna przynosić straty w zakresie, w którym środki inwestora nie wystarczą na pokrycie jego części transakcji, następuje wezwanie do uzupełnienia depozytu i przymusowo likwidowana jest część pierwotnej pozycji. Więcej informacji na temat tej funkcji i sposobu jej obliczania można znaleźć w tym artykule w Centrum pomocy.

9 - Przelicz ponownie pozwala określić, jak często strategia powinna być przeliczana. Domyślnie, strategia jest przeliczana na zamknięciu każdego słupka, ale używając poniższych opcji, może być również przeliczana:

  • Po realizacji zlecenia (parametr: calc_on_order_fills) - pozwala strategii na wykonanie dodatkowej kalkulacji wewnątrz słupka zaraz po realizacji zlecenia. Ta dodatkowa kalkulacja ma miejsce zarówno na słupkach historycznych jak i w czasie rzeczywistym.
  • Przy każdym ticku (parametr: calc_on_every_tick). Domyślnie strategie dokonują obliczeń wyłącznie na zamknięciu słupków w czasie rzeczywistym. Ten parametr pozwala strategii dokonywać obliczeń przy każdej aktualizacji słupka w czasie rzeczywistym, jak w przypadku wskaźnika. Zwróć uwagę, że po odświeżeniu strony wszystkie dane tickowe zostaną utracone, więc strategie korzystające z tej opcji będą podlegały zjawisku repaintingu. Ten parametr nie ma wpływu na zachowanie strategii na słupkach historycznych. Należy również pamiętać, że strategie używające tej opcji nie będą pokazywać realistycznych wyników na słupkach historycznych, ponieważ nie zawierają one danych tickowych.

10 - Wypełnianie zleceń:

  • Korzystając z bar magnifier (parameter: use_bar_magnifier) - kieruje Emulatorem Brokera do stosowania bardziej precyzyjnych, niższych cen przedziałów czasowych podczas weryfikacji historycznej w celu osiągnięcia bardziej realistycznych wyników. Więcej informacji na temat tej funkcji znajdziesz w Centrum Pomocy.
  • Na zamknięciu słupka (parameter: process_orders_on_close). Jeśli ma wartość true, strategia generuje dodatkową próbę realizacji zleceń po zamknięciu słupka i zakończeniu obliczeń strategii. Jeżeli zlecenia są zleceniami rynkowymi, emulator brokera realizuje je przed otwarciem kolejnego słupka. Jeżeli zlecenia są zależne od ceny, zostaną zrealizowane dopiero po spełnieniu warunków cenowych. Ta opcja jest przydatna, jeśli chcesz realizować zlecenia w tym samym czasie, w którym są one tworzone: domyślnie zlecenia są tworzone w momencie zamknięcia bieżącego słupka i realizowane w momencie otwarcia następnego; przy włączonym tym ustawieniu zostaną one wykonane w tym samym Zamknięciu, w którym zlecenie zostało utworzone. Należy pamiętać, że wprowadzenie pozycji w tym samym ticku, w którym tworzone jest zlecenie, może wprowadzić w błąd, ponieważ nie byłoby to możliwe w prawdziwym handlu.
  • Korzystając ze standardowego OHLC (parameter: fill_orders_on_standard_ohlc) zmusza strategię działającą na wykresach Heikin Ashi do realizacji zamówień przy użyciu rzeczywistych cen OHLC, aby uzyskać bardziej realistyczne wyniki. Domyślnie skrypty strategiczne wypełniają zamówienia przy użyciu cen wykresu, niezależnie od typu wykresu. W przypadku wykresów Heikin Ashi to ustawienie zapobiega stosowaniu cen syntetycznych, które mogą nie pokrywać się z rzeczywistością. Na przykład ta strategia, którą zastosowaliśmy w przypadku dziennego wykresu NASDAQ:AAPL Heikin Ashi, wypełniła zlecenie w dniu 2023-09-25 po syntetycznej cenie 175,61 USD. Jednak po włączeniu opcji „Używając standardowego OHLC” to samo zlecenie zostało zrealizowane po standardowej cenie wykresu wynoszącej 174,20 USD.