czwartek, 30 sierpnia 2012

Bliźniacy odwracają pozycje na rynku – arkusz i pierwsze wnioski z symulacji


Ostatnio przedstawiłem pierwsze symulacje działania strategii spekulacyjnych na zbiorze danych rozsądnej wielkości, co miało na celu dokonanie podstawowych spostrzeżeń na temat zachowania strategii w zależności od parametru determinującego jej działanie. Dzisiaj będziemy kontynuować te rozważania, pozostając oczywiście nadal przy empirycznej obserwacji jedynie pozycji zajmowanych przez graczy na rynku. Badania symulacyjne rozliczeń tych pozycji czyli zysków i strat zostawiamy na dalsze etapy.

Skoro mamy opracowane w arkuszu i omówione formuły determinujące pozycje gracza pro- i antytrendowego, odpowiednio w zakładkach Foll i Cont, to aż się prosi w tym momencie aby wykonać pierwsze podejście do badania strategii połączonej, w ramach idei wirtualnych inwestorów przedstawionej tutaj. Ostatecznie, jak podkreślam to często, koncepcja ta stanowi fundament, na którym są zbudowane poszczególne konkretne strategie działania. Proponuję zatem odpowiednio rozbudować bieżącą, roboczą wersję arkusza tak, aby można było prześledzić działanie spółki braci bliźniaków.

poniedziałek, 27 sierpnia 2012

Symulacje odwracania pozycji – proste spostrzeżenia na temat wpływu parametru


W poprzedniej części przedstawiłem formuły arkusza kalkulacyjnego wyznaczające odwrócenia pozycji w strategii antytrendowej. Wraz z analogicznymi formułami dla strategii podążającej za trendem pozwoliło to na skonstruowanie arkusza symulującego działania graczy dla przykładowych zbiorów rekordów OHLC i zadanych z góry, choć z możliwością modyfikacji, parametrów odległości odwrócenia. Skoro jest narzędzie, to proponuję teraz zobaczyć jak działa w praktyce a przy okazji wysnuć jakieś, miejmy nadzieję ciekawe, wnioski.

Bez zbędnego rozgadywania się przejdę do opisu danych służących do wykonania przykładowych obliczeń. Rozpatrujemy stale kurs funta brytyjskiego względem dolara amerykańskiego na interwałach tygodniowych, czyli GBPUSD10080. Horyzont czasowy obejmuje cały rok 2011 i pierwsze półrocze 2012, co łącznie daje zbiór rekordów w liczbie 78. Odpowiednie formuły we wszystkich opracowanych już i omówionych zakładkach arkusza zostają więc rozszerzone na odpowiedni zakres wierszy poprzez operację przeciągania. Tutaj drobna dygresja – przy siedmiu zakładkach staje się to już dość żmudną i irytującą czynnością, którą zatem w przyszłości warto będzie jakoś zautomatyzować. Ale na razie, przy pierwszych eksperymentach, jakoś musimy się przemęczyć.

czwartek, 23 sierpnia 2012

Odwracanie pozycji w strategii antytrendowej – arkusze z formułami odwróceń


W dzisiejszej części powrócimy do pracy z arkuszami kalkulacyjnymi. Ponieważ niedawno  został podjęty temat matematycznego sformalizowania odwracania pozycji w strategii antytrendowej, obecnie przedstawię implementację omawianych wzorów. Przy tym oczywiście będzie to realizowane już w wersji z neutralną pozycją początkową, której idea została omówiona tutaj.

Będziemy to realizować poprzez rozszerzenie ostatniej wersji arkusza roboczego. Jak pamiętamy, symulacja historii gracza podążającego za trendem została umieszczona w zakładkach FollL, FollS i, zawierającej wyniki uśrednione Foll. Dość naturalnym wydaje się zatem utworzenie analogicznych zakładek dla strategii antytrendowej, zwanej również kontrariańską. Z tego też powodu nazwy ContL, ContS i Cont przychodzą chyba na myśl automatycznie.

Sama struktura tych zakładek jest analogiczna do ich odpowiedników z alternatywnej strategii . Większość komórek to wręcz kopie jeden do jednego. Tym co stanowi nowość to oczywiście formuła determinująca pozycję na końcu interwału – również w wersji iteracyjnej. Jak pamiętamy wartości odpowiednich komórek odwołują się do komórek o jeden wiersz wyższych.

poniedziałek, 20 sierpnia 2012

Zyski i straty w strategii antytrendowej – wzory matematyczne


W poprzednim odcinku został podjęty wątek wyprowadzania matematycznych wzorów, tym razem w wersji dla strategii antytrendowej. Podane i omówione były wzory określające zmiany pozycji z interwału na interwał. Obecnie proponuję pozostać przez chwilę jeszcze przy rozważaniach teoretycznych i kontynuować formułowanie wzorów, tym razem w celu wyznaczenia zysków lub strat wynikających ze stosowania tego typu strategii.

Poprzednio podane wzory jak zwykle miały postać warunkową – odwrócenie lub nieodwrócenie pozycji na przeciwną zależy od spełnienia warunków przekroczenia odpowiednich poziomów. Wspomniałem również że łatwo zauważyć analogiczną strukturę tych wzorów w porównaniu do strategii podążającej za trendem. Charakteryzują się one wręcz pewną symetrią. To powoduje, że wzory na rozliczenia pozycji również powinny mieć zbliżony charakter. Dzięki temu nie powinny być one trudne do zrozumienia i interpretacji.

Zatem proponuję przejść do omawiania samych wzorów. Rozważamy oddzielnie dwie sytuacje, zaczynając od zlecenia mającego na celu odwrócenie pozycji długiej na krótką. Oczywiście poprzez połączone TakeProfit oraz SellLimit. Warunki określające odwrócenie zostały już omówione przy okazji wzorów na pozycje, zatem nie ma co się nad nimi rozgadywać.

czwartek, 16 sierpnia 2012

Wzory na odwrócenia pozycji w strategii antytrendowej



W bieżącym odcinku proponuję wrócić na krótko do rozważań teoretycznych. Wcześniej  omówione zostały wzory definiujące warunki odwrócenia pozycji w strategii gracza podążającego za trendem i pozostającego stale na rynku. Obecnie przedstawię analogiczne formuły dla strategii antytrendowej, zwanej czasami kontrariańską.

Podstawowe założenia dotyczące strategii pozostają niezmienione – odwrócenie pozycji następuje poprzez jednoczesną realizację zleceń zamknięcia bieżącej i otwarcia nowej na tym samym poziomie. Poziom ten jest ustalany w określonej odległości od kursu początkowego w danym interwale czasowym, a odległość ta jest parametrem strategii. Tym, co stanowi różnicę jest sposób odwracania – teraz odbywa się to na zasadzie zleceń z limitem ceny.

Przypomnijmy krótko: zmiana pozycji długiej na krótką następuje gdy kurs przekroczy pewną odległość powyżej kursu początkowego. A z długiej na krótką – w przypadku gdy zejdzie poniżej odpowiedniego poziomu. Na tych poziomach zatem będą oczekiwać zlecenia TakeProfit oraz odpowiednio SellLimit lub BuyLimit.

Podobnie jak poprzednio wzory są sformułowane w postaci wyrażenia warunkowego. Jak zwykle symbol n oznacza indeks bieżącego interwału czasowego. Oczywiście wartość o indeksie n-1 oznacza pozycję na końcu interwału poprzedzającego.



Przypadki 1 i 3 oznaczają brak odwrócenia pozycji. W przypadku pozycji długiej sprowadza się to do nieprzekroczenia przez kurs maksymalny zadanego limitu. Symetrycznie, dla pozycji krótkiej kurs minimalny nie schodzi wystarczająco nisko. Natomiast przypadki 2 i 4 oznaczają osiągnięcie lub przekroczenie (odpowiednio w górę lub w dół) poziomu i realizację odpowiednich zleceń.

Jak widać na pierwszy rzut oka, konstrukcja tych wzorów ma charakter analogiczny, a można wręcz powiedzieć - komplementarny do tych dla strategii podążania za trendem. Z tego też powodu konstrukcja arkusza implementującego je na potrzeby symulacji będzie sprowadzać się do prostej modyfikacji wersji przedstawianej niedawno. Arkusz rozszerzony o odpowiednie zakładki zostanie przedstawiony i omówiony w ramach kolejnych części. A potem przejdziemy do zagadnienia właściwego (i bardziej złożonego) czyli symulacji pozwalającej wyznaczać zyski i straty z zajmowanych w kolejnych interwałach pozycji.

poniedziałek, 13 sierpnia 2012

Symulacja strategii podążania za trendem z neutralną pozycją początkową


Ostatnio poruszyłem temat znaczenia pozycji początkowej w symulacji systemu transakcyjnego. Omówione zostało podejście polegające na zajmowaniu stale określonej pozycji na rynku Forex. Jednak w opozycji do tego założenia została przedstawiona metoda, w której początkowa pozycja gracza jest neutralna, symbolizowana przez liczbę 0. Został zasygnalizowany poważny problem niemożności jednoznacznego określenia wejścia na pozycję (długą lub krótką) w przypadku gdy w danym interwale czasowym oba warunki determinujące wejście są spełnione. Jako rozwiązanie tego problemu proponuję wykorzystać metodę symulacji działania 2 wirtualnych inwestorów.

Metoda jest banalnie prosta. Nawiązując do idei 2 braci bliźniaków proponuję zasymulować efekt działania 2 graczy, z których każdy rozpoczyna działanie na rynku w przeciwnej pozycji do drugiego. Jeden rozpoczyna od pozycji długiej, a drugi od krótkiej. Oczywiście – jak proponowałem wcześniej – zyskami dzielą się po połowie. Zatem historia ich wspólnego rachunku będzie utworzona jako średnia arytmetyczna trajektorii generowanych przez każdego z osobna.

A teraz przejdźmy do konkretów – pora na arkusz ilustrujący proponowane przeze mnie podejście. Jak pisałem poprzednio, zakładka quotes w arkuszu zawiera dane podstawowe: w kolumnach od B do J znajdują się daty początków interwałów czasowych oraz notowania OHLC w wersjach BID i ASK. Przy okazji rozszerzenia symulacji proponuję też modyfikację arkusza o automatyczne zadawanie parametrów odległości poziomu odwrócenia pozycji od kursu początkowego.

W komórkach A12 i A14 odpowiednio zostają określone: minimalna wartość progu odwrócenia pozycji nazywana initThresh oraz krok threshStep – wartość o którą będzie ten poziom zwiększany w kolejnych kolumnach obrazujących wersje strategii. Poniżej przedstawiam fragment arkusza obrazujący tę ideę.


 
A teraz część właściwa: symulacja działania strategii uśredniającej start z pozycji długiej i krótkiej. Na te potrzeby utworzyłem 2 nowe zakładki: FollL i FollS. Ich nazwy są intuicyjnie zrozumiałe – są one kopiami zakładki Foll (przedstawionej poprzednio) w wersjach, gdy pozycja początkowa jest określona za pomocą wartości odpowiednio +1 i -1. A obecna zakładka Foll zawiera średnie arytmetyczne wartości pozycji zajmowanych przez gracza w obu wersjach. Widok tej zakładki wraz z przykładową formułą definiującą uśrednienie pozycji obu wirtualnych inwestorów przedstawiam poniżej:


 
Natomiast cały arkusz dostępny jest pod tym adresem.

Sens zastosowania omówionej powyżej metody będzie jaśniejszy, kiedy dotrzemy do formuł definiujących rozliczenia pozycji dla różnych wartości parametrów i obu początkowych pozycji. Zostanie to przedstawione w jednym z kolejnych odcinków.

czwartek, 9 sierpnia 2012

Znaczenie pozycji początkowej w podążaniu za trendem


W poprzedniej części rozpocząłem omawianie konstrukcji arkusza symulującego efekty działania prostej strategii transakcyjnej. Omówiona została kluczowa formuła, definiująca zajmowane przez gracza pozycje. Jak wspominałem, jest ona zdefiniowana w postaci iteracyjnej. Obecnie chciałbym krótko skupić uwagę na znaczeniu wartości początkowej pozycji na rynku.

W pierwszej wersji arkusza jej wartość została arbitralnie ustalona jako +1, czyli przyjęto pozycję długą. Dlaczego by jednak nie miała mieć wartości przeciwnej? Pamiętajmy że na Forex, w przeciwieństwie do rynków akcji czy obligacji, żadna z tych wartości nie jest w jakikolwiek sposób naturalnie wyróżniona. Wzrost kursu pary walutowej może być równie dobry (lub zły) jak jego spadek – to, co nas interesuje to trendy, ich siła i czas trwania.

Oczywiście nic nie stoi na przeszkodzie, aby wykonać obliczenia zmieniając w odpowiednim wierszu liczbę +1 na -1. Pytanie tylko brzmi: jaka będzie wartość poznawcza tak przeprowadzonych symulacji? Każdej z osobna – moim zdaniem niewielka. Warunki początkowe powinny być neutralne. Ten dość naturalny postulat można byłoby zrealizować wprowadzając możliwość przyjmowania w odpowiednich kolumnach wartości 0. Wprawdzie kłóci się to nieco z założeniem o stałej obecności gracza na rynku, jednak nie na tym polega największy problem.

poniedziałek, 6 sierpnia 2012

30.Odwracanie pozycji w podążaniu za trendem – arkusze z formułami odwróceń



No i wreszcie przyszła pora na formuły definiujące zmiany pozycji w strategii podążania za trendem. Omówimy zatem teraz arkusz który symuluje zachowanie strategii pod kątem warunków przy których następuje zmiana pozycji z długiej na krótką i vice-versa. Jak pisałem w poprzednim odcinku dane wejściowe zgromadzone są w zakładce quotes. Zarówno kursy BID – podstawowe dane dostępne w plikach OHLC, jak i wartości kursów ASK, powstające poprzez dodanie do tych poprzednich wartości spreadu.

Do arkusza dodałem zakładkę prezentującą zachowanie strategii podążania za trendem, zatem jej nazwa Foll jest intuicyjnie dość zrozumiała. W pierwszej kolumnie znajdują się wartości daty początku interwału czasowego. Ponieważ początkowe eksperymenty będą przeprowadzane na interwałach tygodniowych, na razie nie ma potrzeby dodawania informacji o godzinie rozpoczęcia interwału – takie dane będą potrzebne przy innych symulacjach.

W kolejnych kolumnach znajdują się wartości pozycji zajmowanych przez gracza, który stosuje strategię podążania za trendem i odwracania pozycji w ustalonej odległości od kursu początkowego (Open) interwału czasowego. Ta odległość, stanowiąca parametr strategii, jest określona w pierwszym wierszu zakładki Foll. Oczywiście, musi ona zostać pomnożona przez elementarny krok zmian kursu – parametr tick omawiany poprzednio.

To, co jest najistotniejsze, to formuła definiująca pozycję na końcu interwału czasowego. Jest ona naturalnie determinowana przez odległość odwrócenia i pozycję na końcu poprzedniego interwału. To powoduje, że formuła ta musi mieć charakter iteracyjny –wartości w kolejnych interwałach zależą od poprzednich, a wartość początkowa musi być ustalona arbitralnie. W omawianym przykładzie przyjmiemy tę wartość jako odpowiadającą pozycji długiej, czyli +1.

Zatem teraz najtrudniejsza część, czyli sama formuła

=IF(
OR(
AND(B2=1;$quotes.$E3<=$quotes.$C3-B$1*$quotes.$A$4);
AND(B2=-1;$quotes.$H3>=$quotes.$G3+B$1*$quotes.$A$4));
-1*B2;B2)

Prawda, że wygląda dość przerażająco? Ale bez obaw, omówimy ją krok po kroku, wraz z towarzyszącymi jej wzorami na rozliczenia pozycji. Wcześniej jednak zaprezentuję graficznie fragment arkusza realizującego obliczenia.


 
W kolejnych wierszach znajdują się wartości pozycji zajmowanych przez gracza, natomiast kolumny (począwszy od B) odpowiadają wartościom parametru odległości odwrócenia. Znaki $ występujące w formule jasno determinują które adresy komórek są ustalone na sztywno, a które są uaktualniane przy operacji przeciągania.

Całość arkusza można znaleźć pod tym adresem.

Jak nietrudno zauważyć, odpowiednio duża wartość parametru odległości powoduje, że początkowa pozycja pozostaje niezmieniona w całym zakresie symulacji – oczywiście w podanym przykładzie jest on krótki, obejmując jedynie kilka tygodni. Jednak zjawisko to ma charakter ogólny. Będziemy je omawiać wraz z kolejnymi etapami symulacji działania systemów transakcyjnych odwracających pozycję.

piątek, 3 sierpnia 2012

29. Odwracanie pozycji w podążaniu za trendem – pierwsze arkusze kalkulacyjne



W ostatnich tekstach pojawiło się kilka formuł definiujących warunki odwróceń pozycji w strategii podążania za trendem, jak również kwoty rozliczeń pozycji w różnych przypadkach. Przyjęto założenia o stałej obecności gracza na rynku, jak również o odwracaniu pozycji na poziomie determinowanym przez ustaloną odległość od kursu otwarcia. Pora teraz na konstrukcję arkusza kalkulacyjnego, który pozwoli prześledzić zachowanie strategii dla zbioru danych wejściowych – notowań par walut w formacie OHLC. Zaczniemy od najprostszego zagadnienia – implementacji wzorów na odwrócenia pozycji.

Z całą pewnością należy w pierwszej kolejności określić dane wejściowe – kursy pary walutowej. Jak pisałem w odcinku poświęconym formatowi danych OHLC, pliki pobierane z serwisów brokerskich zawierają jedynie notowania w wersji BID. Aby otrzymać kursy ASK (niezbędne do implementacji formuł) należy dodać do nich wartość spreadu. W ten sposób zatem powstają pierwsze formuły – proponuję umieścić je na oddzielnej zakładce arkusza (nazwałem ją quotes), a niezbędne parametry wypisać w jej pierwszej kolumnie. Oto one:

spread – wyrażony w jednostkach minimalnego kroku notowań (zwanych dalej tick-ami)

tick – wspomniana wyżej jednostka; dla większości par walut, notowanych z dokładnością do 1/100-ej centa (lub eurocenta, grosza, itd. w zależności od waluty) jej wartość wynosi 0.0001

unit – wartość otrzymywana poprzez pomnożenie dwóch liczb opisanych powyżej; ta właśnie liczba będzie stanowić różnicę pomiędzy wartościami kursów ASK i BID

pointVal – mnożnik określający realną wartość zysków lub strat wynikających z utrzymywanej pozycji; jak wspomniałem wcześniej, można tutaj przyjąć po prostu wartość 1 i zajmować się zyskami elementarnymi

currency – pole tekstowe, które umieściłem na ostatniej pozycji; ma ono wyłącznie wartość informacyjną – służy do przypominania, w jakiej walucie są rozliczane utrzymywane pozycje; dla przykładowej pary GBPUSD będzie to oczywiście dolar amerykański

Poniżej obrazek ilustrujący wygląd pierwszej kolumny arkusza:


 
A kolejne kolumny zawierają notowania BID (zostały wklejone z pliku CSV) oraz ASK – obliczone na podstawie tych pierwszych. Wygląda to tak:


 
Formuły definiujące notowania w kolumnach od G do J są bardzo proste i powstają poprzez dodanie wartości unit do odpowiednich kursów BID:

G2 = C2+$A$6 (askOpen)
H2 = D2+$A$6 (askHigh)
I2 = E2+$A$6 (askLow)
J2 = F2+$A$6 (askClose)

A w kolejnych wierszach oczywiście analogiczne formuły, powstające poprzez operację przeciągnięcia odpowiednich komórek. Warto zwrócić uwagę na symbol $ znajdujący się przed indeksami, tak wierszy jak i kolumn, dla komórki określającej wartość unit. Dzięki temu adres tej komórki jest niezmienny, natomiast pozostałe są dynamicznie uaktualniane.

Przedstawione powyżej formuły stanowią dopiero zalążek arkusza służącego do właściwej symulacji działania strategii. W kolejnym odcinku zamieszczę jego rozwinięcie z wykorzystaniem podanych wcześniej wzorów na odwrócenia pozycji.