Właściwości strategii
Każda strategia napisana w Pine posiada szereg właściwości, które określają jej zachowanie:
- Kapitał początkowy,
- Waluta bazowa,
- Wielkość zlecenia,
- Piramidowanie,
- Prowizja,
- Sprawdź cenę dla zleceń z limitem,
- Poślizg,
- Margin
- 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_type, commission_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 i krótkich (parametry: margin_long, margin_short) określa margin dla każdej transakcji, tj. procent pozycji, którą musi sfinansować trader. Na przykład, jeśli Margin dla pozycji gługiej jest ustawiony na 25%, trader musi mieć wystarczającą ilość środków, aby pokryć 25% otwartej transakcji i potencjalnie może wydać do 400% swojego kapitału na każdą transakcję.
Jeśli transakcja została otwarta i zaczyna być stratna do tego stopnia, że środki tradera nie wystarczają na pokrycie jego części transakcji, pojawia się wezwanie do uzupełnienia depozytu zabezpieczającego i przymusowo likwidowana jest część pierwotnej pozycji. Dokładna liczba jednostek, które zostaną zlikwidowane, to 4-krotność kwoty potrzebnej na pokrycie straty. Obliczyć to można za pomocą następującego algorytmu:
1. Oblicz Środki Wydane, ilość pieniędzy, jaką trader wydał na otwarcie pozycji.
Wielkość Pozycji * Cena Wejścia
2. Oblicz Wartość Rynkową Papieru Wartościowego (Market Value of Security - MVS).
Wielkość Pozycji * Aktualna Cena
3. Oblicz Zysk Otwarty (Open Profit). Jeśli pozycja jest krótka, a Open Profit to liczba dodatnia, wynik nadal powinien być ujemny, więc mnożymy wartość bezwzględną naszego obliczenia przez -1.
ABS(MVS - Środki Wydane) * -1
4. Oblicz Equity, czyli pieniądze dostępne dla tradera w danym momencie.
Kapitał początkowy + Zysk netto + Zysk otwarty
5. Przelicz Margin Percent(procent depozytu zabezpieczającego) na Margin Ratio(współczynnik depozytu zabezpieczającego).
Margin Percent / 100
6. Oblicz Margin, czyli dokładną kwotę potrzebną do pokrycia ich części otwartej pozycji.
MVS * Margin Ratio
7. Oblicz Dostępne Środki, czyli ilość utraconych pieniędzy, których trader nie może pokryć swoim bieżącym kapitałem.
Equity - Margin
8. Oblicz całkowitą kwotę pieniędzy, którą stracił trader.
Available Funds / Margin Ratio
9.Oblicz, ile jednostek musiałby sprzedać trader, aby pokryć stratę. Wartość jest obcinana do tego samego miejsca dziesiętnego, co minimalna wielkość kontraktu dla bieżącego symbolu.
TRUNCATE(Krok #8 / Aktualna Cena)
10. Oblicz, ile jednostek sprzeda broker, aby pokryć stratę. Nasz hipotetyczny broker sprzedaje 4 razy więcej jednostek niż to konieczne, aby upewnić się, że wezwanie do uzupełnienia depozytu zabezpieczającego nie będzie stale uruchamiane, jeśli kontynuowane będą straty. Ta wartość będzie dodatnia dla krótkich transakcji, ponieważ broker kupuje jednostki, aby pokryć stratę, zamiast je sprzedawać.
Krok #9 * 4
Aby szczegółowo zbadać te obliczenia, dodajmy wbudowaną strategię Supertrend do wykresu NASDAQ:TSLA w przedziale czasowym 1D. Ustaw Wielkość zlecenia na 300% equity, a Margin dla pozycji długich na 25%.

Nasze pierwsze wejście miało miejsce na otwarciu słupka 16 września 2010 roku. Kupujemy 682438 jednostek (Wielkość pozycji) za 4.43 USD (Cena wejścia). Później, 23 września 2010, kiedy cena wynosi 3.9 (Aktualna cena), 111052 jednostki zostały przymusowo zlikwidowane poprzez wezwanie do uzupełnienia depozytu zabezpieczającego (margin call).
1. Pieniądze wydane: 682438 * 4.43 = 3023200.34
2. MVS: 682438 * 3.9 = 2661508.2
3. Zysk otwarty: −361692.14
4. Equity: 1000000 + 0 − 361692.14 = 638307.86
5. Margin Ratio: 25 / 100 = 0.25
6. Margin: 2661508.2 * 0.25 = 665377.05
7. Dostępne Środki: 638307.86 - 665377.05 = -27069.19
8. Środki Stracone: -27069.19 / 0.25 = -108276.76
9. Udział na pokrycie straty: TRUNCATE(-108276.76 / 3.9) = TRUNCATE(-27763.27) = -27763
10. Wielkość Margin Call: -27763 * 4 = - 111052
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.