Testowanie historyczne systemów transakcyjnych dla kontraktów futures

Wstęp

Przed przeczytaniem niniejszej części instrukcji zalecane jest zapoznanie się z rozdziałem "Testowanie historyczne systemów transakcyjnych" ponieważ zwiera on niezbędne podstawy dotyczące testowania historycznego w programie AmiBroker.

Kiedy inwestor otwiera długą pozycję na akcjach, oznacza to, że kupuje on określoną liczbę akcji po ustalonej cenie. Kiedy po pewnym czasie je sprzeda, zysk inwestora równy jest różnicy cen kupna i sprzedaży przemnożonej przez liczbę akcji. Inaczej sytuacja wygląda w przypadku kontraktów terminowych; otwarcie pozycji na rynku futures wymaga jedynie wpłacenia depozytu zabezpieczającego (margin). Depozyt stanowi niewielką część wartości kontraktu (np. 10%) tak więc przy zajęciu długiej pozycji na 10 kontraktach inwestor wpłaca jako depozyt jedynie kwotę równą wartości jednego kontraktu. Taki sam depozyt zabezpieczający wnieść musi inwestor zajmujący króką pozycję. Duża dzwignia finansowa sprawia, iż ryzyko transakcji na rynku futures jest dużo większe niż na rynku akcji. Gdy cena kontraktu się zmienia, odpowiednio zmienia się również zysk inwestora. Jeśli mnożnik (wartość jednego punktu notowania) równy jest 1$ znaczy to, iż każda zmiana kursu kontraktu o 1 pkt. przekłada się na zmianę dochodu inwestora o 1$. W przypadku zaś, gdy mnożnik wynosi 5$ - tyle wynosić będzie zysk/strata inwestora, gdy kurs kontratu zmieni się o 1 punkt. Po zamknięciu pozycji depozyt zostaje zwrócony inwestorowi, tak więc całkowity zysk z transakcji na rynku futures równy jest różnicy wartości kursów kupna/sprzedaży przemnożonej przez mnożnik i pożniej pomnożonej przez ilość kontraktów w danej transakcji.

Tryb futures Testera Historycznego (Backtester)

W Testerze istnieją 3 ustawienia dotyczące tylko kontraktów futures:

Zaznaczenie pola wyboru "Tryb Futures (Futures Mode)" (podkreślone zieloną linią na rysunku powyżej) to czynność niezbędna przy testowaniu systemów transakcyjnych na kontraktach terminowych. Gdy pole to jest oznaczone, w obliczeniach uwzględniane są depozyty zabezpieczające i mnożnik.

TPozostałe dwa pola są ustalane indywidualnie dla danego sybolu i dostępne są w menu: Symbol->Information

Depozyt zabezpieczający

Depozyt zabezpieczający to ilość pieniędzy niezbędna do otwarcia pozycji w pojedynczym kontrakcie futures. Gdy Depozyt podany zostanie jako liczba dodatnia AmiBroker potraktuje to jako kwotową stawkę za jeden kontrakt. Natomiast gdy wpisana zostanie liczba ujemna, będzie znaczyć to, iż depozyt ustalany jest procentowo, w zależności od kursu kontraktu w momencie otwierania pozycji. Depozyt równy zero (czyli brak depozytu) używa się dla akcji. Wysokość depozytu może zostać także określona w formule za pomocą zmiennej MarginDeposit:

MarginDeposit = 675;

Gdy używany jest Tryb Futures, wysokość depozytu pozwala określić liczbę kontraktów, w których inwestor może zająć pozycję. Rozpatrzmy przykład, gdy kapitał początkowy wynosi $50.000, inwestor chce w jednej transakcji zainwestować do 20% kapitału a wysokość depozytu zabezpieczającego ustalona jest na poziomie $675. Przy takich założeniach "żądana" wielkość pozycji równa jest 50'000 * 0.2 = 10'000. Gdy liczba w polu "Minimalna liczba instrumentów" (round lot size) równa jest 1, tester "kupi" 10000/675 = (część całkowita z 14.8148) = 14 kontraktów , więc faktyczna wartość otwartej pozycji równa będzie $9450 (14*675), czyli 18.9% kapitału początkowego.

Aby zasymulować taką transakcję w programie AmiBroker, należy wprowadzić 50.000 w polu "Kapitał początkowy" (Initial Equity), włączyć "Tryb Futures" oraz następująco zdefiniować pozostałe parametry w treści formuły:

PositionSize = -20; // użyj 20% kapitału
MarginDeposit = 675; // ta opcja może być też określona w manu: Symbol->Information
RoundLotSize = 1; // ta opcja może być też określona w menu: Settings

Wszystkie pozostałe transakcje przeprowadzone zostaną w podobny sposób, lecz wielkość otwieranych pozycji zależeć będzie od skumulowanej wielkości kapitału na dany moment, a nie od wielkości kapitału początkowego (chyba, że w formule zostanie zdefiniowana stała wielkość otwieranych pozycji, np. PositionSize=10000).

Mnożnik (Point value)

Wartość mnożnika definiowana jest oddzielnie dla każdego symbolu (menu: Symbol->Information window (patrz: obrazek powyżej)). Mnożnik oznacza wartość pieniężną jednego punktu notowań kontraktu, czyli innymi słowy jest to wartość zysku (straty) osiąganego z jednego kontraktu, gdy notowanie zmieni się o jeden punkt. Przykładowo: miedź notowana jest w centach za 1 funt - cena 84.65 (lub 8465) oznacza 84 i 65/100 centa za funt miedzi. Zakładając, że mnożnik kontraktu wynosi $2.5 - zmiana ceny o +0.37 (bądź 37) da zysk w wysokości $2.5 * 37 = $92.50

Wartość mnożnika można również zdefiniować bezpośrednio z samej formuły, przy użyciu zniennej PointValue, na przykład:

PointValue = 2.5;

Uwaga: Po załadowaniu starej bazy danych Amibroker automatycznie zmienia wartość "Point Value" na 1 zatem 1 punkt odpowiada wartości 1 dolara (jednostki pieniężnej), zatem zmiana kursu o jeden punkt odpowiada zyskowi/stracie w wysokości 1 dolara. Pozwala to na otrzymanie poprawnych wyników nawet w momencie przypadkowego użycia trybu Futures na akcjach.

Uwaga 2: Pomimo faktu, iż wysokość mnożnika (Point value) wpływa na wysokość zysków/strat, nie jest uwzględniana przy obliczaniu wysokości poziomu aktywacji zlecenia STOP (gdyż są one obliczane tylko w oparciu o kurs danego instrumentu). Dlatego definiując Profit Target Stop na 10% należy pamiętać o tym, iż jeśli mnożnik wynosi 2.5 da w rezultacie 25% zysku z danej transakcji.

Proste przykłady

Test wartości punktowej (Points-only test)

Test ten jest odpowiednikiem handlu jednym kontraktem. Można to w prosty sposób osiądnąć dodając poniższą linię do formuły:

PositionSize = MarginDeposit = 1;

Transakcje ilością 'n' kontraktów

W podobny sposób można zdefiniować formułę, która będzie zawierać transakcję o wielkości np. 7 kontraktów. W tym celu wystarczy dodać do formuły poniższe linie:

NumContracts = 7;
PositionSize = NumContracts * MarginDeposit;