Z
powyższych dywagacji wprost wynika, że ogólna formuła omawianej
funkcji kryterium i związany z nią schemat optymalizacji parametru
można opisać następującym wzorem:
Wyjaśnienia
może wymagać pojawiający się tutaj parametr oznaczony grecką
literą theta wraz z symbolem przynależności do zbioru,
zamiast wcześniejszego parametru odwrócenia pozycji p.
Oznacza to jednak po prostu, że formuła ta ma charakter
uniwersalny, a parametr podlegający optymalizacji może mieć
dowolną interpretację. Również zakres wartości przezeń
przyjmowanych nie zawsze musi stanowić przedział – może być
zbiorem dowolnie określonym.
Powyżej
opisane uogólnienie jest w zasadzie dość naturalnym wnioskiem,
który można wysnuć po przejrzeniu kilku konkretnych przykładów
takich funkcji. Powodem, dla którego poświęcam temu tematowi cały
wpis jest propozycja jeszcze dalszego rozwinięcia tej idei. Opiera
się ona na spostrzeżeniu, że jakkolwiek funkcja kryterium o
powyższej konstrukcji spełnia podstawowy postulat – tzn.
maksymalizacji zysku i minimalizacji ryzyka – to nie zadaje w jawny
sposób proporcji pomiędzy tymi czynnikami. Innymi słowy, nie
umożliwia określenia przez podmiot wydający polecenie
optymalizacji (gracza-człowieka bądź też element systemu na
wyższym poziomie hierarchii) jaki stopień ważności ma być
przypisany mierze zysku a jaki ryzyka.
Od
razu warto zauważyć, że pomnożenie licznika i/lub mianownika
przez stałą nie rozwiązuje problemu, ponieważ stałe te mogłyby
zostać wyniesione przed symbol operatora maksymalizacji, a w
konsekwencji nie miałyby żadnego wpływu na wynik operacji.
Konieczne jest zatem użycie bardziej złożonej funkcji – tutaj z
pomocą przychodzi funkcja potęgowa. Z powodów, które będziemy
szerzej omawiać w dalszych rozważaniach, praktyczne jest
zastosowanie następującej, uogólnionej funkcji
gdzie
symbol w oznacza wykładnik funkcji potęgowej i jest ustaloną
liczbą nieujemną. Na obecną chwilę najprostszym argumentem na
rzecz zastosowania funkcji potęgowej w mianowniku jest fakt, że
miara ryzyka przyjmuje z definicji wartości nieujemne, a pomijając
przypadki zdegenerowane, można przyjąć, że nawet ściśle
dodatnie, co było szerzej dyskutowane tutaj.
Natomiast
wprowadzenie zaproponowanego uogólnienia implikuje natychmiastowe
pojawienie się kwestii doboru parametru w. Jak pamiętamy z
rozważań dotyczących zdolności uogólniania liczba
parametrów strategii powinna być możliwie jak najmniejsza, aby
zapobiegać zjawisku nadmiernego dopasowywania do zbioru danych.
Mając na uwadze ten postulat, do zagadnienia uogólniania funkcji
kryteriów należy podchodzić z należytą rozwagą.
Miary z w>1 wydają się dość ryzykowne, załóżmy przez chwilę, że dla wszystkich wartości optymalizowanego parametru mamy CG<0 (sytuacja wcale nie niemożliwa). W takim przypadku wybrana zostanie najgorsza opcja np. CG=-1,MDD=1 przegra z CG=-1,MDD=2.
OdpowiedzUsuńCo gorsza ta właściwość stawia pod znakiem zepytania sens wyznaczania średniej i mediany...
Usuń...na kolejnym poziomie adaptacji.
UsuńChyba nawet każde w>0 ma tę wadę. Np. dla w=1/2 dla podanych liczb będzie -1/1 < -1/sqrt(2)
UsuńTo jest ogólny problem kiedy miarę ryzyka umieszczamy w mianowniku. Rozwiązać można to w ten sposób, że kiedy mamy dla wszystkich wartości parametru zysk ujemny, to zmieniamy kryterium na przeciwne, czyli minimalizujemy zamiast maksymalizować.
Może dałoby radę dzielenie zamienić na:
Usuńsignum(CG)*log(abs(CG)) - log(MDD)
Też o tym myślałem - logarytm jest faktycznie dobry, bo zamienia model multiplikatywny na addytywny. Ale z tymi znakami to chyba nie będzie tak prosto, szczególnie w przypadku okolic zera. No bo weźmy (dla ustalenia uwagi logarytm niech będzie dziesiętny) CG = 0.01 w zestawieniu z CG = -0.01 , MDD niech będzie dowolne, i tak się uprości. Wtedy dla dodatniego zysku mamy:
Usuń+1 * log( 0.01 ) = -2
a dla ujemnego
-1 * log( |-0.01| ) = -1 * log( 0.01 ) = -1 * -2 = 2
i kicha - strata dominuje nad zyskiem pod względem funkcji celu :(
Zyski w okolicach 1 dolara nie są aż tak częste, ale dla poprawności:
Usuń(abs(CG)<1 ? -1 : 1)*signum(CG)*log(abs(CG)) - w * log(MDD)
Teraz już chyba dobrze:
OdpowiedzUsuńsignum(CG)*log(abs(CG)+1) - w * log(MDD)
A co powiecie na zmianę funkcji celu na tego typu:
OdpowiedzUsuńFc = Zk/MDD, gdzie Zk = Kk/Kp, Kk to kapitał końcowy, Kp to kapitał początkowy.
Zk jest odpowiednikiem CG z tą różnicą, że zawsze przyjmuje wartości dodatnie a strata wyrażana jest w wartościach mniejszych od 1 - tj. z przedziału (1,0>.
Do moich zastosowań słabo pasuje, bo nie można po tym policzyć porównywalnej średniej, ale w ogólności nie widzę przeciwskazań.
UsuńNie wiem też jak by miało wyglądać uogólnienie tego na inne przedstawione propozycje funkcji jakości, które w liczniku miały średnią i medianę?
Usuńad. 1)
UsuńO jakiej porównywalnej średniej piszesz? A jakbyś ją policzył po tradycyjnym wzorze tj. Fc = CG/MDD?
Funkcja jak funkcja - bardziej mi chodziło o rozwiązanie problemu zmiany kierunku optymalizacji funkcji -> w poprzednim wzorze, gdy zysk był dodatni to się funkcję maksymalizowało, a gdy zysk był ujemny to minimalizowało. Natomiast w tej zaproponowanej przeze mnie funkcję się tylko maksymalizuje - niezależnie czy jest zysk czy strata.
ad. 2)
Ponownie nie rozumiem co masz na myśli pisząc o uogólnieniu tego na inne przedstawione propozycje funkcji. To jest kolejna koncepcja funkcji - nie porównujesz jej z innymi funkcjami.
Widzę, że dyskusja się dynamicznie rozwinęła :)
UsuńCo do funkcji dzielącej przez kapitał początkowy, to niestety nie w tym modelu - no bo jak go określić, skoro na tym etapie badamy tylko skumulowane zyski nominalne z pojedynczej pozycji? W tym sensie kapitał początkowy wynosi zero, a to na pewno nie nadaje się na dzielnik :(
Czyli rozumiem, że te "zyski" są wyrażone w pipsach - jako różnica między ceną zakupu a sprzedaży? Bo ja zyski bardziej kojarzyłem jako Kk - Kp z optymalizowanego okresu.
UsuńPrzepraszam, że trochę mieszam, ale czytam trochę w pośpiechu (bodajże przedwczoraj odkryłem tego bloga i chcę to jak najszybciej odrobić) i trudno mi to wszystko tak na raz ogarnąć.
Teraz znowu trochę strzelam, bo ciągle mam wiele wątpliwości, czy dobrze to rozumiem, ale:
Jeśli chodzi o obliczanie skumulowanych zysków z pojedynczej pozycji tj. bez uwzględniania kapitału to można rozważyć również zamiast obliczania zysku w postaci sumy z (Ask - Bid - spread), iloczyn z (Ask - spread)/Bid.
Wówczas nie będzie potrzebne uwzględnianie kapitału a wyjdziemy chyba mniej więcej na to samo. Oczywiście to nie będzie "zysk" w takiej formie jak wcześniej ale będzie miał własności, które rozwiążą przynajmniej jeden problem - zmianę kierunku optymalizacji przy ujemnym zysku. Oczywiście to należy traktować jako oddzielny wskaźnik.
Z drugiej strony i tak optymalizacja polega na przeszukaniu wszystkich rozwiązań i wybraniu tej "optymalnej" więc to nie musi być takim dużym problemem - każde rozwiązanie z dodatnim (nawet małym) zyskiem i dużym MDD będzie bardziej optymalne od rozwiązania z małym ujemnym zyskiem i dużym/małym MDD.
Reasumując szukam nieistotnego rozwiązania :)
ad. 1)
UsuńNa blogu zaczyna pojawiać się definicja systemu z dwoma poziomami adaptacji. O ile na pierwszym poziomie adaptacji Twoja propozycja (z modyfikacją którą zaraz podam) mogłaby się sprawdzić do porównywania alternatyw, to przy dwóch poziomach mamy dwuwymiarową macierz jakości i musimy z niej wybrać jakąś kolumnę. Samo się narzuca by wybrać tą z największą średnią. CG/MDD też słabo się nadaje stąd przejście na logarytmy.
Modyfikacja mogłaby wyglądać następująco (MaxCG+CG+1)/MDD, MaxCG i tak wyznaczamy do MDD.
ad. 2)
Powyższe problemy dotyczą też innych funkcji, logarytm jest rozwiązaniem uniwersalnym.