Jak symulować handel z dźwignią?

Podstawy

Wszystkie skrypty strategii napisane w Pine Script™ v4 i  wersjach nowszych natywnie obsługują symulację handlu lewarowanego, czyli pożyczania od brokera w celu otwierania większych pozycji przy mniejszych kwotach kapitału.

Dzięki handlowi z dźwignią inwestorzy mogą składać zlecenia o większych rozmiarach, niż pozwalałoby na to saldo ich konta, o ile na rachunku inwestora utrzymuje się wymagany margines do podtrzymania pożyczki.

UWAGA: Handel dźwignią zwiększa potencjalne zyski i straty. Inwestorzy powinni zawsze zachować ostrożność i dokładnie ocenić swoją tolerancję poziomu ryzyka przed wykorzystaniem dźwigni w handlu na rachunku rzeczywistym.

Strategie Pine Script™ określają wielkości dźwigni stosowane do symulowanych długich i krótkich transakcji za pomocą danych wejściowych „Margin dla długich pozycji” i „Margin dla pozycji krótkich” w zakładce „Właściwości” w ustawieniach skryptu. Wejścia te określają minimalny procent wartości pozycji wymagany w saldzie rachunku, aby strategia symulowała otwarcie i utrzymanie pozycji.

Na przykład wartość „Margin dla pozycji długich” wynoszący 20% oznacza, że symulacja będzie wymagać pokrycia 20% dowolnej pozycji długiej przez dostępne saldo strategii, a pozostałe 80% pokryje emulowany broker. Ponieważ każda pozycja długa wymaga zasilenia konta jedynie jedną piątą jej wartości, strategia może symulować pozycje długie o wartości do pięciokrotności dostępnego salda. Innymi słowy, ten poziom marży (1:5) zwiększa dźwignię strategii do 5:1.

Jeśli transakcja z takim poziomem depozytu zabezpieczającego spowoduje utratę ilości środków tak wysokiej, aby narazić fundusze brokera na ryzyko, emulowany broker uruchomi zdarzenie Margin Call i zlikwiduje część lub całość otwartej pozycji, aby uwolnić kapitał. Aby uzyskać więcej informacji, zobacz poniższe sekcje.

UWAGA: Programiści mogą definiować domyślne wartości marginesów w swoich skryptach strategii za pomocą parametrów `margin_long` i `margin_short` funkcji `strategy()`. 

Szczegóły

Kiedy trader 'bierze pożyczkę' od brokera, aby zwiększyć swoją siłę nabywczą, broker będzie wymagał od niego posiadania minimalnej kwoty kapitału na swoim rachunku do wykorzystania jako zabezpieczenie, zwanej inaczej depozytem zabezpieczającym. Innymi słowy, depozyt zabezpieczający to część pozycji, którą trader musi pokryć własnym kapitałem, aby broker mógł pokryć resztę.

Depozyt zabezpieczający przydzielony do transakcji jest iloczynem wartości rynkowej pozycji i współczynnika marży (tj. odwrotności pożądanego współczynnika dźwigni).

Załóżmy, że aktualny kurs EURUSD wynosi 1,05 i chcemy symulować zakup standardowego lota (100 000 jednostek) bez pożyczania środków od brokera (tj. przy użyciu dźwigni 1:1). W tym przypadku ustawiamy „Margin dla długich pozycji” na 100%, instruując strategię, aby składała zlecenia wykorzystując wyłącznie dostępne środki. Dlatego na koncie musi znajdować się co najmniej 105 000 USD (1,05 * 100 000), aby umożliwić handel.

Załóżmy teraz, że chcemy symulować tę samą transakcję z dźwignią 20:1. W tym przypadku współczynnik marży wynosi 1:20 (5%). Ustawienie „Marginu dla długich pozycji” na 5% określa, że saldo konta musi wynosić co najmniej 5% wartości pozycji, aby symulować otrzymanie pozostałych 95% od brokera. Minimalne saldo konta (margin) wymagane do ułatwienia tej transakcji wynosi 5% ze 105 000 (5250 USD).

W przeciwieństwie do przykładu, który nie opiera się na funduszach brokerskich, otwarcie pozycji z dźwignią 20:1 w warunkach rzeczywistych niesie ze sobą ryzyko straty dla posiadacza rachunku i brokera. Jeśli otwarta pozycja straci więcej, niż saldo konta może pokryć, broker albo zażąda od inwestora większej ilości środków, albo przymusowo zlikwiduje część/całość otwartej pozycji, aby pokryć straty. Tester strategii przedstawia scenariusze wymuszonej likwidacji jako zdarzenia „wezwania do uzupełnienia depozytu”.

Nasz Emulator Brokera obsługuje te scenariusze w wynikach strategii, likwidując czterokrotność kwoty wymaganej do pokrycia straty w symulacji, zapobiegając ciągłym zdarzeniom Margin Call na kolejnych słupkach wykresu.

UWAGA: Krótkie pozycje zazwyczaj obejmują pożyczanie akcji, jednostek itp. od brokera i sprzedaż ich później po innej cenie. Wartość pozycji reprezentuje koszt zakupu równoważnej liczby udziałów, jednostek itp. w celu ich zwrotu. W związku z tym transakcje krótkie powodują straty pieniężne, gdy ceny rosną. W przeciwieństwie do pozycji długich, potencjalna strata na pozycji krótkiej nie jest ograniczona, ponieważ nie ma określonego ograniczenia co do tego, jak bardzo może wzrosnąć cena instrumentu. Dlatego nawet przy 100% marży krótka pozycja jest narażona na ryzyko przymusowej likwidacji.

Strategie mogą również symulować niekonwencjonalne wymagania dotyczące depozytu zabezpieczającego. Na przykład można zastosować wartość „Margin dla długich pozycji” wynoszącą 200%, co oznacza, że symulowane konto musi mieć co najmniej dwukrotność wartości pozycji, aby ułatwić handel i utrzymać pozycję. To ustawienie skutecznie ogranicza maksymalną wielkość pozycji do 50% kapitału strategii.

Należy zauważyć, że ustawienia depozytu zabezpieczającego w skrypcie strategii pozwalają na sprawdzenie wielkości pozycji. Po wyłączeniu wymagań dotyczących depozytu zabezpieczającego poprzez ustawienie ich na 0%, skrypt może symulować pozycje o dowolnej wielkości, niezależnie od rzeczywistego kapitału dostępnego w symulacji, co może dawać mylące wyniki. Dlatego nie zalecamy ustawiania wartości „Margin dla długich pozycji” lub „Margin dla pozycji krótkich” na 0%.

Kończą się środki

Podstawowym zastrzeżeniem dotyczącym handlu dźwignią jest to, że zwiększa ryzyko wyczerpania środków. Pozycje przymusowo zamknięte przez brokera znacznie ograniczają zdolność tradera do odrabiania strat i mogą przyspieszyć wyczerpywanie się środków na rachunku. Tester strategii przedstawia pozycje zamknięte na siłę jako zdarzenia „wezwania do uzupełnienia depozytu”, czyli "Margin Call".

Formuła regulująca moment wystąpienia zdarzenia wezwania do uzupełnienia depozytu jest następująca:

CurrentEquity <= MarginRequired

Wartość CurrentEquity to ilość kapitału, jaki posiada symulowana strategia w określonym momencie, włączając zysk lub stratę z otwartej pozycji. Wymagany depozyt zabezpieczający to kapitał potrzebny na koncie do utrzymania pozycji. Gdy CurrentEquity nie wystarczy do sfinansowania otwartej pozycji, nastąpi wezwanie do uzupełnienia depozytu zabezpieczającego.

Wzór na CurrentEquity to PriceChange * Direction * PointValue * AbsPositionSize + IndividualCapital + NetProfit, gdzie:

  • PriceChange to różnica pomiędzy ceną bieżącą a ceną wejścia otwartej pozycji.
  • Direction wynosi 1, jeśli pozycja jest długa lub -1, jeśli jest krótka.
  • PointValue to ilość środków oznaczana przez zmianę ceny w postaci liczby całkowitej. Dla większości symboli wartość wynosi 1, głównym wyjątkiem są kontrakty futures, gdzie zmiana ze 100 na 101 może oznaczać, że wartość zmieniła się o 50 USD zamiast o 1 USD, a w tym przypadku PointValue będzie wynosiło 50. 
  • AbsPositionSize to rozmiar bieżącej pozycji. Ta wartość jest zawsze dodatnia, nawet jeśli skrypty strategii przedstawiają krótkie transakcje z liczbami ujemnymi na wykresie. 
  • InitialCapital + NetProfit to całkowita kwota kapitału strategii przed otwarciem bieżącej pozycji.

Wzór na MarginRequired to LastPrice * PointValue * AbsPositionSize * (MarginPercent / 100), gdzie LastPrice to cena na wykresie do obliczeń, a (Margin Percent / 100) to współczynnik, przez który mnożymy, aby otrzymać wymaganą przez posiadacza rachunku część otwartej pozycji. 

Aby zobrazować te obliczenia, wyobraźmy sobie, że symulujemy strategię z 1000 USD jako „Kapitałem początkowym” i „Marginem na długie pozycje” o wartości 20% (dźwignia 5:1), aby kupić 40 akcji NASDAQ:GOOG po cenie 100 USD.

Jeśli cena akcji spadnie do 95 USD, CurrentEquity wyniesie PriceChange * Direction * PointValue * AbsPositionSize + IndividualCapital + NetProfit = (95 - 100) * 1 * 1 * 40 + 1000 + 0 = 800, a Wymagany Margin wynosi LastPrice * PointValue * AbsPositionSize * (MarginPercent / 100) = 95 * 1 * 40 * 0,2 = 760. Strategia może nadal utrzymać pozycję otwartą po tej cenie, więc nie nastąpi żadne wezwanie do uzupełnienia depozytu zabezpieczającego (Margin Call).

Następnie załóżmy, że cena spadła dalej do wartości 90 USD. Nowa wartość CurrentEquity to (90 - 100) * 1 * 1 * 40 + 1000 + 0 = 600, a wartość MarginRequired wynosi teraz 90 * 1 * 40 * 0,2 = 720. Ponieważ CurrentEquity nie wystarcza już na pokrycie MarginRequired, strategia tworzy zdarzenie Margin Call i przymusowo likwiduje część pozycji. 

Wizualizacja ceny marży

Najłatwiejszym sposobem zwizualizowania ceny, po której może wystąpić zdarzenie Margin Call, jest użycie wbudowanej zmiennej `strategy.margin_liquidation_price` w Pine Script strategii™ kod źródłowy. Dodanie tej linii kodu do dowolnego skryptu Pine Script™ Strategia v5 wyświetli cenę likwidacji w postaci niebieskiej linii na wykresie:

plot(strategy.margin_liquidation_price)

Jeżeli zaistnieje potrzeba ręcznego obliczenia ceny, można przekształcić równanie z poprzedniego rozdziału do następującego wzoru:

MarginLiquidationPriceRaw = ((InitialCapital + NetPofit) / (PointValue * AbsPositionSize) - Direction * EntryPrice) / (MarginPercent / 100 - Direction)

Wynikowa wartość MarginLiquidationPriceRaw jest następnie zaokrąglana w górę (dla pozycji krótkich) lub w dół (dla pozycji długich) do najbliższej ceny podzielnej przez minimalną wartość zaznaczenia symbolu. 

Zauważ, jak całe wyrażenie jest podzielone przez (MarginPercent / 100 - Direction). Jeśli kierunek jest długi, a MarginLong% wynosi 100, dzielnik wyniesie 0, a wynikowa wartość MarginLiquidationPriceRaw nie będzie osiągalna ze względu na dzielenie przez zero. Takie zachowanie jest zgodne z poglądem, że broker nie może na siłę zlikwidować pozycji długiej z marżą wynoszącą 100%.

W przypadku hipotetycznej strategii opisanej w poprzedniej sekcji, obliczenia te dają: ((1000 + 0) / (1 * 40) - 100) / (20 / 100 - 1) = 93,75, co jest pierwszą ceną, która uzasadnia wezwanie do uzupełnienia depozytu zabezpieczającego. Ponieważ liczba 93,75 jest podzielna przez wielkość ticka GOOG wynoszącą 0,01, zaokrąglanie w oparciu o minimalną wartość ticka nie ma w tym scenariuszu żadnego wpływu.

Nie ma gwarancji, że zdarzenie Margin Call zostanie wywołane po tej obliczonej cenie podczas symulacji.

Obliczanie wielkości likwidacji

Dokładna kwota pozycji zlikwidowanej w wyniku Margin Call zależy od ceny, po której występuje. Jak zauważono powyżej, emulator brokera likwiduje czterokrotność kwoty wymaganej do pokrycia straty, zapewniając poduszkę zabezpieczającą, aby zdarzenia te nie następowały po sobie w krótkim odstępie czasu. Do obliczenia kwoty likwidacji stosujemy następujący algorytm:

1. Oblicz Wydane środki, czyli kapitał wydany na otwarcie pozycji.

Rozmiar pozycji * Cena wejścia

2. Oblicz wartość rynkową papieru wartościowego (MVS).

Rozmiar pozycji * Aktualna cena

3. Oblicz otwarty zysk. Jeśli kierunek handlu jest krótki, a Open Profit jest liczbą dodatnią, wynik nadal powinien być ujemny, dlatego wartość bezwzględną z naszych obliczeń mnożymy przez -1.

ABS(MVS - Money Spent) * -1

4. Oblicz Equity, czyli kapitał dostępny w symulacji.

Kapitał początkowy + Zysk netto + Zysk otwarty

5. Konwertuj procent marży na współczynnik marży.

Procent Marginu / 100

6. Oblicz Margin, czyli kwotę wymaganą na koncie, aby pokryć część otwartej pozycji inwestora.

MVS * Współczynnik Marginu

7. Oblicz dostępne środki, tj. kwotę straconych pieniędzy, której inwestor nie jest w stanie pokryć swoim bieżącym kapitałem.

Equity - Margin

8.Oblicz całkowitą kwotę środków, jaką stracił trader.

Dostępne Środki / współczynnik Marginu.

9. Oblicz, ile akcji, jednostek itp. strategia musiałaby zlikwidować, aby pokryć stratę. Obcinamy wartość do tego samego miejsca po przecinku, co minimalna wielkość kontraktu dla bieżącego symbolu.

TRUNCATE(Krok#8 / Current Price)

10. Oblicz, ile akcji, jednostek itp. broker upłynni, aby pokryć stratę. Nasz emulowany broker sprzedaje czterokrotność niezbędnej kwoty, aby zapewnić, że Margin Call się nie uruchomi, jeśli straty będą się utrzymywać. Wartość ta będzie dodatnia w przypadku krótkich transakcji, ponieważ broker kupuje jednostki w celu pokrycia straty, zamiast je sprzedawać.

Krok #9 * 4

Aby szczegółowo zbadać to obliczenie, dodajmy wbudowaną strategię Supertrend do wykresu NASDAQ:TSLA w przedziale czasowym „1D” i ustawmy „Wielkość pozycji” na 300% kapitału własnego oraz „Margin dla pozycji długich” na 25% :

Pierwsze wejście miało miejsce po cenie otwarcia słupka w dniu 16 września 2010 r. Strategia kupiła 682 438 akcji (wielkość pozycji) po cenie 4,43 USD (cena wejścia). Następnie, 23 września 2010 r., kiedy cena spadła do 3,9 (cena bieżąca), emulator przymusowo zlikwidował 111 052 akcji poprzez Margin Call.

1. Wydane środki: 682438 * 4,43 = 3023200,34

2. MVS: 682438 * 3,9 = 2661508,2

3. Otwarty Zysk: −361692.14

4. Equity: 1000000 + 0 − 361692,14 = 638307,86

5. Współczynnik Marginu: 25 / 100 = 0,25

6. Margin: 2661508,2 * 0,25 = 665377,05

7. Dostępne Środki: 638307,86 - 665377,05 = -27069,19

8. Utracone Środki : -27069,19 / 0,25 = -108276,76

9. Akcje na pokrycie straty: TRUNCATE(-108276,76 / 3,9) = TRUNCATE(-27763,27) = -27763

10. Rozmiar Margin Call: -27763 * 4 = - 111052