wtorek, 28 sierpnia 2012

Inicjowanie pozycji przy dynamicznej optymalizacji systemu transakcyjnego

Niedawno opisana i graficznie zilustrowana koncepcja dynamicznej optymalizacji  parametrów systemu transakcyjnego wykorzystuje ideę symulacji działania elementarnego systemu na pewnym skończonym zbiorze rekordów a następnie wykorzystania jej wyników dla późniejszych interwałów czasowych. Systemy oparte na tej koncepcji będę dalej często określał mianem hierarchicznych, ze względu na ich wielopoziomowy charakter. System elementarny, służący do „roboczego” wyznaczania parametrów działa tutaj na pierwszym poziomie. Z kolei system przeznaczony do właściwej gry, który korzysta z wyników tego pierwszego, jest umiejscowiony na drugim, wyższym poziomie w hierarchii.

Niezależnie od tych dywagacji terminologicznych, chciałbym teraz zwrócić uwagę na pewne szczegóły, wymagające doprecyzowania. Bez tego wyjaśnienia opisana struktura nie jest jeszcze gotowa do realizacji poprawnych i dających jednoznaczne wyniki obliczeń. Pierwszym elementem, którego brakuje, jest na przykład określenie pozycji początkowej w symulacji systemu na pierwszym poziomie, czyli optymalizacji parametru.

Przy opisie pierwszego przykładu elementarnego systemu, pozycję początkową przyjmowano zawsze jako długą, jednak było to uproszczenie zastosowane wyłącznie dla skupienia uwagi na właściwym algorytmie i regułach działania. Natomiast teraz, poruszając kwestię pozycji początkowej w symulacji systemu, odsyłam czytelnika do szerokiego omówienia tego zagadnienia (podzielonego na część pierwszą i drugą) na moim innym blogu, o bardziej elementarnym charakterze. Czynię tak, aby niepotrzebnie nie powielać treści już raz rozpatrywanych. Natomiast oczywista konkluzja z tych rozważań jest taka, że pozycja początkowa przy optymalizacji parametru powinna być neutralna, czyli symbolicznie reprezentowana przez liczbę 0.

To jest pierwszy, ale nie ostatni brakujący element układanki. Kwestia inicjowania pozycji przy przetwarzaniu sekwencji rekordów uwidacznia się w kontekście iterowania indeksu rekordów na drugim poziomie hierarchii. Poniżej postaram się precyzyjnie sformułować ten problem.

Wyobraźmy sobie sytuację, kiedy w realnej grze po zakończeniu interwału (n-1)-szego zajmowana jest pozycja krótka. Jednak po odpowiednim przesunięciu indeksów i optymalizacji okazuje się, że sekwencja wyznaczona na pierwszym poziomie i obejmująca jako ostatni interwał n-ty ma taki przebieg, że gracz rozpoczyna w nim działanie będąc na pozycji długiej. Jest to możliwe, ponieważ nowy, przesunięty zbiór danych wejściowych jest różny od poprzedniego, jakkolwiek znacząca ilość rekordów stanowi ich część wspólną.

Logiczne i sensowne jest przyjęcie postulatu, że sekwencja opisująca pozycje zajmowane przez system na drugim poziomie w kolejnych interwałach powinna mieć własność „ciągłości”. Innymi słowy, znak symbolizujący pozycję na początku danego interwału powinien być zawsze równy znakowi pozycji na końcu interwału poprzedniego. Realizacja tego postulatu nie jest trudna, jednak w celu jego formalnego ujęcia proponuję wprowadzenie rozszerzonej i bardziej precyzyjnej symboliki.

W celu uproszczenia zapisu wprowadzono oznaczenie pozwalające jednym wyrażeniem opisać sekwencję rekordów OHLC. Pierwszy indeks dolny w tym symbolu to numer ostatniego rekordu, a drugi indeks informuje o ilości rekordów w sekwencji.


Na sekwencjach tego typu realizujemy działania odpowiadające przyjętej strategii. Nie ma przy tym znaczenia, jakiego typu jest to strategia: pro-, antytrendowa czy jakakolwiek inna. Zapis ma charakter uniwersalny. Wprowadzamy zatem operator T (oznaczenie ma przywodzić na myśli system Transakcyjny), który przeprowadza taką sekwencję rekordów w sekwencję zysków stanowiących rozliczenia pozycji.


Powyżej wprowadzona symbolika nie jest specjalnie złożona, jednak wymaga chwili refleksji w celu oswojenia się z nią. Zatem dalsze wzory, już w nowej konwencji zapisu, przedstawię w kolejnej części.

Kontynuacja wątku tutaj.

Brak komentarzy:

Prześlij komentarz