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.
Kontynuacja wątku tutaj.
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ń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.
Usuń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.
Fajnie wyczerpany teamt.
OdpowiedzUsuńCiekawy artykuł. Pozdrawiam.
OdpowiedzUsuń