Rozdział 11.doc

(608 KB) Pobierz

Zawieranie transakcji zgodnie z Trybem Cyklu

Rozdział 11

 

Zawieranie transakcji zgodnie z Trybem Cyklu

 

              W tym rozdziale przedstawimy całkowicie automatyczny system transakcyjny Maximum Entropy Spectral Analysis (MESA), oparty na zasadach przedstawionych w poprzednich rozdziałach. Naszym sposobem podejścia do tego zagadnienia jest ustalenie okresów dla Trybu Trendu i Trybu Cyklu oraz zawieranie transakcji zgodnie z Trybem Cyklu, stosując tylko Sinewave Indicator. Kupujemy i sprzedajemy na podstawie przecięcia się tych dwóch linii, z których składa się ten wskaźnik. System transakcyjny stosujący Tryb Trendu i Tryb Cyklu łącznie, można rozwinąć i ulepszyć. Zamiarem tego rozdziału jest przedstawienie niektórych technik ulepszających teoretyczne sygnały Trybu Cyklu w czysto mechanicznym systemie transakcyjnym zgodnie z którym, przeprowadzane są transakcje na rzeczywistych rynkach.

              Program przedstawiony na Rysunku 11.1 jest kompletnym systemem transakcyjnym stosującym zasady, ściśle oparte na podstawach teoretycznych. Jest on absolutnie nie do zastosowania w rzeczywistych sytuacjach transakcyjnych lub dla poszczególnych indywidualnych papierów wartościowych.

 

 

              inputs:              Price(Close),

                                          Window(1),

                                          RegCode(„LPJDPDTBHB”);

 

              vars:              dc(0),

                                          SmoothPrice(0),

                                          DCPeriod(0),

                                          count(0),

                                          RealPart(0),

                                          ImagPart(0),

                                          DCPhase(0),

                                          DCSine(0),

                                          LeadSine(0),

                                          ITrend(0),

                                          IntPeriod(0),

                                          Trendline(0),

                                          Trend(0),

                                          DaysInTrend(0);

 

              DefineDllFunc: „c:\mesadll\mesa2kd.dll”,int,”INIT”,int; 

             

 

Rysunek 11.1 Teoretyczny system transakcyjny Trybu Cyklu.

 

 

              DefineDllFunc: „c:\mesadll\mesa2kd.dll”,int,”DomCycle”,

                            Int,float,float,float,lpfloat;

              DefineDllFunc: „c:\mesadll\mesa2kd.dll”,int,

”MATRIX”,lpstr;

 

              if currentbar = 1 then begin

                                          init(1);

                                          Matrix(regcode);

              end;

 

              DomCycle(Window,Price,H,L,&dc);

 

              {Compute Dominant Cycle Phase}

              SmoothPrice = (4*Price + 3*Price[1] +

                            2*Price[2] + Price[3]) / 10;

              DCPeriod = IntPortion(dc + .5);

              RealPart = 0;

              ImagPart = 0;

              For count = 0 To DCPeriod – 1 begin

                                          RealPart = RealPart +

                                                        Cosine(360*count / DCPeriod)*

                                                        (SmoothPrice[count]);

                                          ImagPart = ImagPart +

                                                        Sine(360*count / DCPeriod)*

                                                        (SmoothPrice[count]);

              End;

              If AbsValue(RealPart) > 0.001 then

                            DCPhase = Arctangent(ImagPart / RealPart);

              If AbsValue(RealPart) <= 0.001 then

                            DCPhase = 90*Sign(ImagPart);

              DCPhase = DCPhase + 90;

              If RealPart < 0 then DCPhase =

                            DCPhase + 180;

 

              {Compensate for one bar lag of the Weighted

Moving Average}

              If dc <> 0 then DCPhase = DCPhase + 360 / dc;

 

              {Don’t let phase exceed 360 degrees in a cycle}

              If DCPhase > 360 then DCPhase = DCPhase – 360;

 

              {Force phase wrap at 315 degrees to avoid

                            full scale wrap at 0-360 boundary}

              If DCPhase > 315 then DCPhase = DCPhase – 360;

 

              {Compute the Sine and LeadSine Indicators}

              DCSine = Sine(DCPhase);

 

 

Rysunek 11.1 Ciąg dalszy.

 

              LeadSine = Sine(DCPhase + 45);

 

              {Compute Trendline as simple average over

                            the measured Dominant Cycle period}

              ITrend = 0;

              IntPeriod = IntPortion(dc + .5);

              For count = 0 to IntPeriod – 1 begin

                            ITrend = ITrend + Price[count];

              End;

              If IntPeriod > 0 then ITrend =

                            ITrend / IntPeriod;

              Trendline = (4*ITrend + 3*ITrend[1] +

                            2*ITrend[2] + ITrend[3]) / 10;

              If CurrentBar < 12 then Trendline = Price;

 

              {Assume Trend Mode}

              Trend = 1;

 

              {Measure days in trend from last crossing

                            of the Sinewave Indicator lines}

              If LeadSine Crosses Over DCSine or LeadSine              Crosses

Under DCSine then begin

                                          DaysInTrend = 0;

              End;

              DaysInTrend = DaysInTrend + 1;

              If DaysInTrend < .5*dc then Trend = 0;

 

              If AbsValue((SmoothPrice Trendline)/

                            Trendline) >= .015 then Trend = 1;

 

              If Trend = 0 then begin

                                          If LeadSine Crosses Over DCSine

                                                        then Buy(LSine”) on Open;

                                          If LeadSine Crosses Under DCSine

                                                        then Sell(„SSine”) on Open;

              End;

 

               

Rysunek 11.1 Teoretyczny system transakcyjny Trybu Cyklu.

 

              Program rozpoczyna się od zdefiniowania funkcji MESA Dynamic Linked Library (DLL), inicjowania DLL i następnie obliczania Cyklu Dominującego (dc) za pomocą DLL. Następna część programu mierzy fazę i oblicza Sinewave Indicator dokładnie tak, jak to zrobiliśmy w Rozdziale 8. Następnie obliczana jest gładzona Chwilowa Linia Trendu dokładnie tak, jak w Rozdziale 8. Zakładamy, że rynek ma większą skłonność do przebywania w Trybie Trendu i przyjmujemy Tryb Trendu jako stan domyślny. Następnie przyjmujemy warunek Trybu Cyklu. Tryb Cyklu na pewno istnieje, gdy LeadSine przecina DCSine wskaźnika Sinewave Indicator. Ponadto, Tryb Cyklu istnieje przez połowę Cyklu Dominującego po wystąpieniu tego przypadku. Podążając śladem liczby słupków od czasu wystąpienia przecięcia i porównując ten czas do połowy Cyklu Dominującego, możemy oznaczyć okresy aktywności Trybu Cyklu. Jednakże, bardzo często można zauważyć, że cena mocno odchyla się od Chwilowej Linii Trendu. W takich przypadkach jest wysoce nieprawdopodobne, aby cena gładzona (SmoothPrice) przecięła Chwilową Linię Trendu, tak jak należy spodziewać się tego w Trybie Cyklu. A zatem, ustanawiamy inną arbitralną regułę, że jeśli SmoothPrice jest większa niż 1.5 procent od Chwilowej Linii Trendu, to rynek jest w Trybie Trendu. Nasz system jest prosty. Zawieramy transakcje tylko wtedy, gdy rynek jest w Trybie Cyklu. Kupujemy na otwarciu przy następnym słupku, gdy LeadSine przetnie w górę DCSine. Sprzedajemy na otwarciu przy następnym słupku, gdy LeadSine przetnie w dół DCSine. Przedstawaimy także stop zabezpieczający w przypadku, gdy nasze sygnały Trybu Cyklu są błędne i rynek rozpoczyna Tryb Trendu przeciwko nam. Zajętą pozycję utrzymujemy aż do momentu, gdy padnie sygnał jej odwrócenia lub osiągnięta została wartość ustawionego stopu loss.

              Jako przykład, program najpierw zastosowano dla kontraktów futures Treasury Bonds, ponieważ Treasury Bonds poruszją się cyklicznie w pewnych granicach. To jest, inaczej niż kontrakty futures S&P i Nasdaq, Treasury Bonds nie mają odchyleń w postaci długoterminowych trendów. Takiej selekcji dokonano dlatego, ponieważ system zawiera transakcje, tak długie jak i krótkie, z równomierną częstotliwością, dzięki czemu nie ma potrzeby dostosowania się do odchyleń systemu. Utworzono kontynuacyjny kontrakt, począwszy od 9 lipca 1984 r., a skończywszy na 29 września 2000 r., tj. 15.88 lat. (Kontynuacyjny kontrakt utworzono, wiążąc kolejne kontrakty w jedną całość i regulując wszystkie ceny w poprzednich kontraktach za pomocą różnicy ceny w stosunku do dodanego kontraktu. Czynność tę powtarzamy dla każdego nowego poprzedzającego kontraktu). Dodając 1.000$ jako stop zarządzający, otrzymamy wynik przedstawiony w Tabeli 11.1.

 

Tabela 11.1 Wyniki początkowe systemu transakcyjnego Trybu Cyklu

__________________________________________________________________________________________

 

Całkowity zysk netto                                                                      24,125.00$

Liczba transakcji                                                                                    262

% zyskownych transakcji                                                                      41.2%

Średni zysk na transakcji                                                                      92.08$

Współczynnik zysku                                                                      1.18

Maksymalne osunięcie kapitału                                                        (18,625.00$)

 

              Wynik nie jest szczególnie dobry. Maksymalne osunięcie kapitału jest prawie takie jak zysk netto, współczynnik zysku (stosunek sumy zysków ze wszystkich transakcji do sumy strat ze wszystkich transakcji) jest niski. W tym przypadku większe znaczenie ma prowizja wynosząca 30$ za jedną transakcję, 1 tick poślizgu przy zawieraniu transakcji wynoszący 31.25$ oraz 1 tick poślizgu przy wychodzeniu z rynku. Okaże się wtedy, że nasz średni zysk z jednej transakcji jest w przybliżeniu równy naszym kosztom transakcyjnym. To jest, powinniśmy przestać korzystać z takiej pomocy. Można jednak włożyć wysiłek w ulepszenie rezultatów systemu transakcyjnego.

              Pierwszym krokiem w ulepszeniu systemu transakcyjnego jest zrozumienie, że nie uwzględniliśmy naruszenia teorii. Nasze wejścia na rynek zależą od przecinania się linii LeadSine i DCSine. Ich wzajemne przecinanie się zależy od mierzonej fazy. Przypuszczalnie doświadczamy większego opóźnienia niż oznaczyliśmy je teoretycznie. Na przykład, zawieranie transakcji w następnym dniu na otwarciu, po przecięciu się LeadSine i DCSine, jest równoznaczne z tym, że dodajemy jeden dzień opóźnienia. Możemy skompensować to opóźnienie, korygując obliczenie fazy. Konkretyzując, optymalna kompensacja wynosi 3 słupki i taką też kompensację fazy wprowadzamy do programu.

 

 

{Kompensacja opóźnienia czasowego}

If dc <> 0 then DCPhase = DCPhase + 3 * 360 / dc;

 

              Taka kompensacja ulepsza rezultaty systemu transakcyjnego, co przedstawia Tabela 11.2. W szczególności, prawie podwaja zysk netto.

 

Tabela 11.2 Wyniki systemu transakcyjnego Trybu Cyklu po kompensacji fazy

__________________________________________________________________________________________

 

Całkowity zysk netto                                                                      39,625.00$

Liczba transakcji                                                                                    334

...

Zgłoś jeśli naruszono regulamin