piątek, 24 sierpnia 2012

Optymalizacja systemu transakcyjnego – wskaźniki jakości i funkcja celu

Wskaźniki jakości wprowadzone (a raczej przypomniane) przy okazji omawianego elementarnego systemu, jak już wspomniałem, będą podstawą jego optymalizacji. Ponieważ ich opis miał charakter słowny i ilustracyjny, chciałbym ten wpis przeznaczyć na uporządkowanie ich w postaci wzorów. Jest to o tyle istotne, że statystyki będące podstawą do optymalizacji systemu powinny być formalnie i precyzyjnie sformułowane, tak aby można było na ich podstawie jednoznacznie opracować algorytm i jego implementację.

Zacznijmy od oznaczeń danych wejściowych. Dla wskaźników zysku i ryzyka danymi tymi są zyski (lub straty) osiągane w poszczególnych interwałach czasowych. Przy tej okazji zresztą nadmieniam, że nie ma sensu pisać za każdym razem tej frazy „lub straty” - ostatecznie strata to też zysk tylko ze znakiem minus. Więc będę od tej pory mówić o zyskach, jednostkowych lub skumulowanych, w sensie uogólnionym. A ich ciąg oznaczam tutaj literami z wraz z odpowiednimi indeksami. Indeksy, wzorując się na każdym porządnym języku programowania, proponuję numerować od liczby 0.

Wzór na skumulowany zysk jest oczywisty i banalny, więc nie warto się nad nim specjalnie rozpisywać. Dodam tylko że, ponieważ rozpatrywany elementarny system (jak również wszystkie inne omawiane w dalszej przyszłości) jest determinowany parametrem, został on uwzględniony jako drugi argument wskaźnika i oznaczony literą p. W przypadku naszego pierwszego prościutkiego systemiku jest to parametr determinujący poziom odwrócenia pozycji, ale w ogólnym przypadku może mieć dowolny sens. Co więcej, może mieć nawet charakter wielowymiarowy, czyli wyrażać się poprzez wektor a nie pojedynczą liczbę. A oto i sam wzór:

Drugim ze wskaźników, które chcę podać w formalnej postaci, jest maksymalne obsunięcie:


Jak widać, wzór ten odwołuje się do poprzedniego, co jest zrozumiałe i wynika z sensu tego wskaźnika, wyrażanego przez skumulowane zyski w chwilach poprzedzających bieżącą. Warto jeszcze dodać że wewnętrzne wyrażenie, czyli to zawierające maksimum liczone po zmiennej s, określa chwilowe obsunięcie kapitału, mierzone w interwale o indeksie t.

Zatem możemy już sformułować zadanie optymalizacji, którego wynikiem będzie optymalna (przynajmniej w sensie empirycznym) wartość parametru p. Jako funkcję kryterium proponuję przyjąć wielkość, która stanowi rosnącą funkcję miary zysku i malejącą względem miary ryzyka. Najbardziej naturalnym wyborem wydaje się ich iloraz.


Pozostaje określić zakres argumentów p, który przeszukujemy. Dolne ograniczenie pmin nie sprawia problemów, gdyż można przyjąć liczbę 0. Z punktu widzenia praktyki i realizmu warto dobrać liczbę wynikającą z minimalnych wymagań brokera w zakresie odległości poziomów zleceń od bieżącego kursu notowań. Natomiast górne ograniczenie pmax teoretycznie jest równe nieskończoności, natomiast ze względu na ograniczone historyczne wahania kursów w obrębie interwałów czasowych, proponuję dobór empiryczny za pomocą prostej formuły:


Przedstawione powyżej wzory pozwalają na wyznaczenie optymalnej, w sensie przyjętej funkcji celu, wartości parametru metody. Ponieważ dotyczy to ustalonego zbioru wyników jej działania, indeksowanych od 0 do n, ten proces określam mianem optymalizacji statycznej. Ostatnim krokiem niezbędnym do konstrukcji kolejnej, już bardziej zaawansowanej wersji systemu jest opracowanie procesu optymalizacji w wersji dynamicznej, co przedstawię wkrótce.

Kontynuacja wątku tutaj.

6 komentarzy:

  1. Mała tylko dygresja a propos porządnych języków programowania. Kilka lat temu byłem na wykładzie profesora Wirtha, który wciąż twierdzi, że jego dzieło jest lepsze. Operator przypisania (:=) jest bardziej intuicyjny niż znak równości, który powinien być zarezerwowany dla warunków. Dziecko indeksuje od 1 a nie od 0, bo tak jest wygodniej procesorowi. A cała ta obiektowość to zwykłe struktury ze wskaźnikami na funkcje...

    OdpowiedzUsuń
    Odpowiedzi
    1. Zdanie o "porządnych językach" oczywiście należy traktować z przymrużeniem oka :)

      Usuń
  2. Myślę, że z punktu widzenia inwestora bardziej interesującą wielkością od skumulowanego zysku jest skumulowany zysk na jednostkę czasu. Najczęściej roczny, nazywany CAGR. Takie obrazowanie zysku pozwala też na porównywanie dwóch strategi przetestowanych na danych o różnej długości.

    Co do maksymalnego obsunięcia to też inwestor powinien go obliczać trochę inaczej. Maksimum kapitału powinno być brane tylko w momentach zawierania transakcji, bo tylko w tych momentach inwestor będzie rozpoczynał inwestycję. Raczej nie będzie dołączał do sygnału w połowie jego trwania.

    OdpowiedzUsuń
    Odpowiedzi
    1. Druga uwaga jest niesłuszna, z wzorów wynika właśnie to co zasugerowałeś.

      Usuń
    2. W pierwszej kwestii: jak najbardziej miara na jednostkę czasu jest bardziej realistyczna, jednak jest to istotne w przypadku systemów docelowych. Optymalizacja systemów, którą wkrótce zaproponuję, stanowi jedynie etap pośredni. Wszystkie strategie elementarne działają na zbiorze rekordów tej samej długości. Interesuje nas tylko porównanie wyników pomiędzy nimi, więc nie musimy sobie zaprzątać uwagi przeliczaniem jednostek czasowych.

      Usuń
    3. Co do obsunięcia, to zacznę od przyznania się do błędu we wzorze, który dopiero teraz zauważyłem. Błędnie rozstawione nawiasy, a poza tym nieodpowiednie indeksy dolne mogły zmylić czytelnika. Właśnie naniosłem poprawki.
      A sprawa ewentualnego "dołączania" gracza do systemu pomiędzy chwilami odwróceń pozycji jest na tyle złożona i ciekawa, że zasługuje na oddzielny wpis, i to raczej niejeden.

      Usuń