Rozdział 8.doc

(1944 KB) Pobierz

Wskaźnik Sinewave

Rozdział 8

 

Wskaźnik Sinewave

 

              Wskaźnik Sinewave jest wyjątkowy w swojej możliwości przewidzenia punktów zwrotnych cyklu. Jego wyjątkowość polega na tym, że na ogół nie generuje sygnałów, gdy rynek jest w trybie trendu, co zmniejsza ryzyko zawarcia błędnej transakcji. Dodatkowo, wskaźnik Sinewave posiada mniej zakłóceń niż pierwotna funkcja ceny, ponieważ wąskie pasmo filtrowania stosowane jest do pomiaru Cyklu Dominującego a nie do funkcji impetu, które zawierają więcej zakłóceń. Istnienie wskaźnika Sinewave jest możliwe, ponieważ dysponujemy pomiarem okresu Cyklu Dominującego.

              W Rozdziale 4 wykazaliśmy, że wszystkie średnie ruchome posiadają opóźnienie. W Rozdziale 5 wykazaliśmy, że funkcje impetu nigdy nie mogą wyprzedzić zmian pierwotnego kształtu fali. Wszystkie przyczynowe filtry opierają się na kombinacji średnich ruchomych i funkcji impetu. Tak więc, przyczynowe filtry nigdy nie mogą przewidzieć przyszłych zdarzeń. Za pomocą wskaźnika Sinewave tworzymy nieprzyczynowy filtr – filtr, który może przewidzieć zwrotny punkt cykli rynkowych. Przewidywanie punktów zwrotnych cykli jest główną zaletą wskaźnika Sinewave w porównaniu do innych oscylatorów, takich jak Relative Strength Index (RSI) i Stochastic, które muszą czekać na potwierdzenie.

              Stosując algorytm MESA, możemy mierzyć okres dominującego cyklu rynkowego dla każdego słupka w serii danych liczbowych. Jednakże, ten pomiar nie powie nam gdzie znajdujemy się w obrębie cyklu. Aby zlokalizować pozycję cyklu musimy zmierzyć fazę Cyklu Dominującego. Znając fazę Cyklu Dominującego, możemy zastosować sinus mierzonej fazy do utworzenia wskaźnika oscylacyjnego. Możemy także kompensować każde opóźnienie powstałe w wyniku procesu pomiaru fazy. W tym celu możemy łatwo dodać 45 stopni do mierzonej fazy aby utworzyć symulowaną falę wyprzedzającą. Jeśli rynek jest w Trybie Cyklu, możemy przyśpieszyć fazę zakładając, że mierzony cykl istniejący w nieodległej przeszłości będzie istnieć w bliskiej przyszłości. Zwiększając fazę o 45 stopni i biorąc sinus zwiększonego kąta fazowego, otrzymamy oscylator w kształcie fali, który wyprzedza pierwotną sinusoidę o jedną ósmą cyklu. Jednakże, te dwie sinusoidy przecinają się o jedną szesnastą cyklu przed szczytem punktu zwrotnego cyklu i przed dołkiem punktu zwrotnego. Dla 16-słupkowego Cyklu Dominującego daje to idealnie 1 słupek wyprzedzenia ostrzegawczego bezwzględnego punktu zwrotnego Cyklu Dominującego. Dla 48-słupkowego cyklu wyprzedzenie wynosi 3 słupki. Dla 8-słupkowego Cyklu Dominującego wyprzedzenie wynosi teoretycznie tylko 0.5 słupka.

              Nasz uproszczony model rynku składa się z Trybu Cyklu i Trybu Trendu. Z pewnością są dodatkowe składniki, jednakże w tym uproszczonym modelu pomijamy je. Najwyższą amplitudę cyklu nazywamy Cyklem Dominującym. Opierając się na doświadczeniu przyjmujemy robocze założenie, że obecny jest pojedynczy Cykl Dominujący. Ale jeśli rynek zmierza w kierunku czystego trendu, nie istnieje żaden cykl. W takim przypadku dwie fale sinusoidalne wskaźnika Sinewave nie mogą się przeciąć. Jeśli dwie sinusoidy nie mogą się przeciąć, wskaźnik Sinewave nie tworzy cyklicznych sygnałów kupna lub sprzedaży. To unikanie fałszywych sygnałów jest zauważalną przewagą w porównaniu do tradycyjnych oscylatorów. W praktyce, faza nie znika nagle. Podczas zaniku fazy kształt wskaźnika staje się zauważalnie różny od typowej fali sinusoidalnej, która powstaje gdy rynek jest cykliczny. Sinusoidy są poszarpane, nieregularne. Przypadkowe przecięcia linii wskaźnika Sinewave, gdy rynek jest w Trybie Trendu powstaje z powodu „rozwierania” się kąta fazowego. Ale w takich przypadkach linie wskaźnika Sinewave nie są sinusoidalne w sąsiedztwie przecięcia. Dlatego też, te przypadkowe złe sygnały przecięcia są łatwe do zidentyfikowania.

              Na podstawie tych obserwacji, faza kształtu fali może być wskaźnikiem dla zawierania transakcji.

              Wskaźnik Sinewave jest częścią  pakietu komercyjnego wskaźnika MESA. Kod EasyLanguage do pomiaru Cyklu Dominującego przedstawiony jest na Rysunku 8.1 i jeśli zechcesz, możesz wprowadzić własne zmiany w tym wskaźniku.

 

 

inputs: Price(Close),

                                                        Window(1),

                                                        RegCode(„LPJDPDTBHB);

 

              vars: dc(0)

                                          SmoothPrice(0),

                                          DCPeriod(0),

                                          RealPart(0),

                                          ImagPart(0),

                                          count(0),

                                          DCPhase(0);

 

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

              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);

 

 

              Rysunek 8.1 Obliczanie fazy Cyklu Dominującego.

 

 

              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;

 

              {Dont 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;

 

              Plot1(DCPhase, Phase”);

 

             

Rysunek 8.1 Ciąg dalszy.

 

              Początkowa część kodu obliczająca Cykl Dominujący (zmienna dc) stosowana jest w programie komercyjnym MESA dla Tradestation 2000i oraz Tradestation 6.0. Czytelnik może utworzyć swój własny kod obliczania dc na podstawie opisu, przedstawionego w Rozdziale 7. Część kodu dotycząca obliczania fazy, rozpoczyna się od linii komentarza w nawiasie. Pierwszym krokiem jest gładzenie danych liczbowych. Wszystkie składniki posiadające okres cyklu krótszy niż 6-słupków nie są pożądane i powinny być usunięte przed rozpoczęciem obliczeń. Ponieważ jesteśmy bardzo wyczuleni na opóźnienie w naszych obliczeniach, usuwane są one przy pomocy 4-słupkowej ważonej średniej ruchomej (WMA). WMA wprowadza 1-słupkowe opóźnienie, które zostanie później usunięte przez kompensację obliczeń. Następnie wygładzona dana liczbowa jest mnożona przez rzeczywisty (cosinus) składnik Cyklu Dominującego i niezależnie przez urojony (sinus) składnik Cyklu Dominującego. Wyniki są sumowane dla całego jednego Cyklu Dominującego. Kąt fazowy obliczany jest jako arctang rozpiętości urojonej części do części rzeczywistej. Faza wzrasta od lewej do prawej strony wykresu. Niezbędne jest 90 stopniowe przesunięcie, tak więc sinus kąta fazowego wynosi zero dla wartości fazy wynoszącej zero. Następnie musimy usunąć 1-słupkowe opóźnienie powstałe w wyniku gładzenia ceny. Wykonujemy to dodając fazę odpowiadającą 1-słupkowemu opóźnieniu gładzonego Cyklu Dominującego.

              W końcu, faza zakłócająca usuwana jest w tych przypadkach, w których część urojona jest mniejsza od zera, otrzymując 360 stopniową reprezentację fazy. Normalnie myślimy o fazie jak o zmieniającej się od zera do 360 stopni i powtarzającej to samo w następnym cyklu. Jednakże stosujemy powtarzanie cyklu przy 315 stopniach, ponieważ faza ma tendencję do przyjmowania wartości około zera stopni, gdy rynek jest w trendzie malejącym. Jeśli faza wynosi około 360 stopni, wahnięcie od dna wykresu do szczytu powinno być mniejsze, niż rozpiętość ekranu. Nie wpływa to na wskaźnik Sinewave, ale wpływa na wyświetlanie fazy.

              Kreśląc sinus mierzonego kąta fazowego, otrzymujemy wskaźnik Sinewave. Otrzymamy oscylator, który zawsze waha się pomiędzy ograniczeniami –1 i +1. Wzmacniamy użyteczność tego wskaźnika kreśląc sinus kąta fazowego przesuniętego o 45 stopni. W rezultacie otrzymujemy dwie linie, tak jak na Rysunku 8.2.

 

 

 

 



Rysunek 8.2 Fazor i zakres czasu wskaźnika Sinewave.

 

              Dodając 45 stopni bezspornie przesuwamy fazor od 45-stopniowego nachylenia do pozycji pionowej. To przesunięcie fazy oznacza, że kształt fali LeadSine będzie posiadać szczyt przed szczytem fali Sine. Linie LeadSine i Sine przecinają się przy 22.5 stopniach, lub też inaczej mówiąc przy jednej szesnastej cyklu, przed osiągnięciem punktu zwrotnego cyklu. Jeśli rynek posiada cykl 16-słupkowy, to jest to natychmiastowy sygnał wejścia lub wyjścia. Jeśli rynek posiada dłuższy cykl, to jest to solidna podstawa do przewidzenia czasu przeprowadzenia transakcji.

              W porównaniu z typowymi oscylatorami, takimi jak Stochastic lub RSI, wskaźnik Sinewave posiada dwie główne zalety:

·         wskaźnik Sinewave antycypuje punkt zwrotny Trybu Cyklu, a nie czeka na potwierdzenie,

·         faza nie zmienia się, gdy rynek jest w Trybie Trendu, a zatem, wskaźnik Sinewave ma tendencję do unikania podawania fałszywych sygnałów, gdy rynek jest w Trybie Trendu.

 

Dodatkową zaletą jest to, że antycypujący sygnał otrzymywany jest dokładnie do matematycznie ustalonej fazy. Impet nie jest potrzebny. Tak więc, sygnały wskaźnika Sinewave nie są bardziej wytłumione niż oryginalny sygnał.

Na Rysunku 8.3 przedstawiono program do obliczania i wyświetlania wskaźnika Sinewave.

 

 

inputs: Price(Close),

                                                        Window(1),

                                                        RegCode(„LPJDPDTBHB);

 

              vars: dc(0)

                                          SmoothPrice(0),

                                          DCPeriod(0),

                                          RealPart(0),

                                          ImagPart(0),

                                          count(0),

                                          DCPhase(0);

 

 

Rysunek 8.3 Program w języku EasyLanguage do obliczania wskaźnika Sinewave.

 

 

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

              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;

 

              {Dont 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;

 

              Plot(Sine(DCPhase),”Sine);

 

   ...

Zgłoś jeśli naruszono regulamin