niedziela, 26 sierpnia 2012

Dynamiczna optymalizacja systemu transakcyjnego

Przedstawione niedawno rozważania na temat wskaźników jakości pozwoliły sformułować je w postaci konkretnych wzorów nadających się do implementacji. Dodatkowo zaproponowałem prostą funkcję jakości, wyrażaną w postaci ilorazu skumulowanego zysku i maksymalnego historycznego obsunięcia kapitału, przy założeniu utrzymywania stale pojedynczej pozycji. To jest w zasadzie wystarczający zbiór narzędzi aby podjąć się optymalizacji parametru strategii. Jednak należy zauważyć, że jeśli optymalizacja dokonana będzie dla zamkniętego, historycznego zbioru rekordów notowań, to uzyskana wartość parametru też będzie mieć własność optymalności jedynie w odniesieniu do danych z przeszłości. A naszym postulatem jest uzyskanie zadowalających wyników dla danych przyszłych, czyli maksymalizacja omawianej niedawno zdolności uogólniania.

Oczywiście problem ten jest od dawna znany, znane są też narzędzia pomocne w ocenie jakości procesu optymalizacji. Jednym z nich jest test walk-forward. Nie będę tutaj się rozpisywać na temat jego definicji i własności, przechodząc od razu do pomysłu na zastosowanie tego podejścia do rozwiązania naszego zadania. Idea jest prosta i bynajmniej nie stanowi „odkrycia Ameryki”. Skoro po zakończeniu procesu optymalizacji przesuwamy zbiór rekordów o określony okres czasu w przód, to nic nie stoi na przeszkodzie, aby wybrany rekord z tak uzyskanego zbioru wykorzystać do realnej gry.

Ta koncepcja rozbudowy systemu jest bardzo prosta, natomiast niełatwo jest precyzyjnie opisać jej istotę. W myśl powiedzenia, że „jeden obraz jest warty tysiąca słów”, proponuję prześledzić jej działanie na poniższym schemacie, gdzie czerwonymi literami oznaczono kolejne etapy działania metody dynamicznej adaptacji systemu.


Punktem startowym jest zbiór rekordów OHLC indeksowany liczbami naturalnymi, przy czym indeks n oznacza bieżący interwał czasowy. W pierwszym etapie (a) wyznaczane są wyniki działania systemu dla określonych z góry wartości parametru p na podstawie zbioru m rekordów poprzedzających interwał bieżący, oczywiście z wyłączeniem tego ostatniego. W kolejnym kroku (b) realizowana jest optymalizacja parametru odwrócenia p na tym właśnie zbiorze danych. W jej wyniku otrzymujemy zoptymalizowaną wartość parametru, którą następnie (c) zastosujemy do symulacji działania strategii na zbiorze rekordów przesuniętych o jeden interwał w przód. W tym nowym zbiorze nie występuje już rekord najstarszy, czyli o indeksie n-m, natomiast pojawia się rekord bieżący, czyli o indeksie n.

I to jest sedno proponowanego przeze mnie udoskonalenia systemu. Wynik działania strategii dla tego ostatniego rekordu (d) może być traktowany jako wyjście systemu transakcyjnego wyższego poziomu, który tym się różni od elementarnej wersji, że nie wymaga zadawania explicite parametru odwrócenia, ponieważ został on wyznaczony na drodze adaptacji.

To jest trzon koncepcji dynamicznego systemu transakcyjnego, na którym chciałbym skupić uwagę przez najbliższy czas. Z dokładnością do pewnych detali i niuansów, które omówię w najbliższych wpisach, system ten już postrzegam jako nadający się do realnych zastosowań. Niezależnie od tego, proponuję badania nad różnymi kierunkami jego rozwoju, które też będę tutaj pokazywać.

Kontynuacja wątku tutaj.

4 komentarze:

  1. Metoda ma dość dużą złożoność obliczeniową i wymagania pamięciowe, no i przy implementacji trzeba zastosować bufory cykliczne, żeby to miało sens. Za to wciąż mamy tylko jeden parametr do optymalizacji, ale teraz m zamiast p.

    OdpowiedzUsuń
    Odpowiedzi
    1. Dokładnie tak. Co do złożoności obliczeniowej, to na tym poziomie rozbudowy algorytmu jeszcze jest akceptowalna przy obecnych mocach obliczeniowych komputerów, nawet klasy standard. Implementacja w językach ogólnego przeznaczenia, typu C++,C# albo Java zapewnia np. dla dziennych notowań FW20 że przy m rzędu 100-200 sesji optymalizacja parametru p na kolejną sesję trwa ułamek sekundy. Dzięki temu dla ustalonego m można symulować historię działania systemu za ostatnie kilka lat i obliczenia nie przekraczają kilku minut.
      A co do tego, że parametr p został zastąpiony parametrem m, to dokładnie "wstrzeliłeś się" w kontynuację tego tematu :) I teraz pozostaje odpowiedzieć na pytanie, czy nie jest to "zamiana siekierki na kijek". Argumenty muszą być oczywiście poparte faktami, czyli empiryczne.

      Usuń