Monte Carlo ale tym razem nie o hazardzie

Było wcześniej zapytanie o Monte Carlo więc jedziemy z tym tematem. Postaram się napisać na tyle przystępnie by nie rozbolały wszystkim mózgi 😉

Najprościej rzecz nazywając – Monte Carlo to technika, która przy użyciu losowych prób i rachunku prawdopodobieństwa ma pomóc w zredukowaniu niepewności w oszacowaniu wyników przyszłych zdarzeń. Jej twórcą był Polak z pochodzenia – Stanisław Ulam, który współpracował przy powstaniu bomby wodorowej. Nazwa powstała w wyniku obserwacji zachowań jego wuja, nałogowego hazardzisty. W finansach jest stosowana do kompleksowych, nieliniowych modeli typu wyliczanie ryzyka zarządzania, wyceniania derywatów, zarządzania portfelami, planowania projekcyjnego i strategicznego itd. W przypadku naszych strategii komputerowych symulacja Monte Carlo jest najczęściej używana praktycznie w procedurze szacowanie ryzyka strategii na podstawie historycznych wyników.

Są dostępne odrębne programiki tylko do takiej symulacji, prosty symulator można stworzyć w excelu, wbudowany programowo jest również w soft służący do budowania mechanicznych systemów – taką właśnie zabawkę ma zaimplementowany świetny program Trading Blox, współtworzony przez Curtisa Faitha, jednego z grupy traderów The Turtles. I to właśnie procedury używane przez Trading Blox będzie bazą do poniższych wyjaśnień.

Symulator, dostając zestaw wszystkich wyników transakcji z naszego systemu, zestawia ich sekwencję w nowej kolejności, w sposób losowy wybierając kolejną z naszego zbioru i dodając do nowo tworzonego szeregu. Takie losowania powtarza się w masowej ilości cyklach, im więcej tym lepszy efekt końcowy dla oceny. Dla strategii komputerowych 1000 takich cykli losowań to przyzwoite minimum. Wynik końcowy każdego z nich to nowa krzywa kapitału. Mamy więc 1000 nowych equity w naszym przykładzie, zestawionych z tych samych ?klocków” co oryginalna ale przebieg ich jest teraz nieco inny – inne są obsunięcia (i jeśli chodzi o czas trwania i zasięg), inne run-upy (ciągi zyskowne), inne szczyty kapitału. Sam dobór losowy w każdym cyklu może odbywać się na 2 sposoby:

A/ Zmiana kolejności

Symulator losowo wybiera KAŻDĄ z historycznych transakcji tylko raz aż do wyczerpania zbioru (jeden pełen cykl).

Taką właśnie sytuację mamy na wykresie poniżej. Został on wyciągnięty z manuala do wspomnianego wcześniej Trading Bloxa:

montecarloequitygraph.png

Źródło: http://tradingblox.net/

Niebieska equity to oryginalna krzywa zmieniającego się kapitału, powstała w teście systemu. Wszystkie pozostałe (szare) to wyniki kolejnych cykli symulacji Monte Carlo. Proszę zauważyć, że mimo różnych przebiegów, wszystkie kończą się w jednym miejscu. To dlatego, że zysk/strata są liczone procentowo (CAGR% – procent składany) więc przestawienie kolejnej cyfry w przypadku mnożenia nie zmienia wyniku końcowego.

B/ Losowanie z podmienieniem

Symulator losowo wybiera dowolną transakcję ze zbioru DOWOLNĄ ilość razy.

W tym przypadku niektóre transakcje historyczne mogą zostać wylosowane wiele razy, inne – wcale. I tutaj wynik końcowy będzie już za każdym razem różny gdyż nie użyto dokładanie takiej samej ilości pojedynczych ?klocków” do symulacji co w oryginalnej equity.

Jak interpretować wynik owych symulacji? Otóż zakłada się, że rozkład zysków i strat (ich wielkość) będzie podobny w przyszłości do tego w testowanym systemie na danych historycznych (autokorelacja) choć kolejność ich powstawania będzie nieco inna. Teoretycznie im większa ilość danych i większa ilość symulacji, tym dokładniejsze przybliżenie przyszłości otrzymamy. A chodzi głównie o wielkość maksymalnych obsunięć (maxDD), jakie mogą się pojawić czyli o kwestię największego ryzyka dla naszej strategii. Na wykresie powyżej widać, że jedna z equity doświadcza hipotetycznego zjazdu kapitału o 50%. Monte Carlo ma odpowiedzieć nam na pytanie: z jakim prawdopodobieństwem dojdzie do takiego zdarzenia? W jej wyniku otrzymujemy statystyczną informację o poziomie ufności co do maksymalnego obsunięcia. Np. jeśli w symulacji 95% nowych equity nie doznało większego maxDD niż 40% to teoretycznie można założyć, że z podobnym prawdopodobieństwem zagra nasz system w kolejnych latach. Słabym punktem jest owe pozostałe 5%, które oznacza, że z takim właśnie prawdopodobieństwem zjazd większy niż 40% wystąpi. Niestety, co do praktyki to nie zapomnijmy jeszcze o prawie Murphy’ego, które mówi, że jeśli coś może pieprznąć to pozostaje tylko kwestia czasu , kiedy to nastąpi ;-).

–* Kathay *–

[Głosów:3    Średnia:2.7/5]

13 Komentarzy

  1. p.

    Mam wrażenie, że opisana metoda działa tylko wtedy, kiedy każda decyzja o transakcji w systemie nie zależy od poprzednich. Jeśli np. system miał by ograniczenie na maksymalne zaangażowanie na krótkiej pozycji, taka zamiana transakcji miejscami nie miała by sensu.
    Druga sprawa to maksymalne możliwe obsunięcie – mam wrażenie, że przy opisanych założeniach można je wyliczyć po prostu sumując wartości wszystkich przegranych transakcji. Ze zbioru transakcji można wyliczyć średnią, odchylenie standardowe i inne statystyczne własności "zmian" krzywej kapitału.
    Więc pytanie: w czym metoda Monte Carlo jest tutaj lepsza od "liczenia na piechotę" ?

  2. kathay

    Ponoć rynek ma pamięć i kolejne transakcje są w jakimś stopniu zależne od poprzednich. Ale nie znalazłem na to do dziś dowodu choć intuicyjnie również czuję, że jakis tam rodzaj pamięci istnieje. Monte Carlo zakłada niezaleźność transakcji i tak się to traktuje w finansach.
    Obliczenie sumy wszystkich obsunięć na piechotę jest możliwe w pierwszym sposobie gdzie zmienia się kolejność. Natomiast nic nam to nie mówi o prawdopodobieństwie wystąpienia takiego scenariusza mega maxDD w przyszłości – Monte Carlo natomiast to szacuje.

  3. riScal

    @p.
    .. Mam wrażenie, że opisana metoda działa tylko wtedy, kiedy każda decyzja o transakcji w systemie nie zależy od poprzednich

    TBlox jako zmienną losową przyjmuje zmiany względne na equity, a nie wyniki poszczególnych transakcji. Ponadto umożliwia uwzględnienie autokorelacji krzywej, czyli występowanie zależności między transakcjami.

    .. Druga sprawa to maksymalne możliwe obsunięcie – mam wrażenie, że przy opisanych założeniach można je wyliczyć po prostu sumując wartości wszystkich przegranych transakcji. Ze zbioru transakcji można wyliczyć średnią, odchylenie standardowe i inne statystyczne własności "zmian" krzywej kapitału.

    Takie liczenie jest możliwe przy założeniu rozkładu normalnego wyników; gdy rozkład jest mniej "standardowy" MC jest lepszym rozwiązaniem

    Ogólnie wyniki symulacji MC są poprawne przy założeniu, że dany proces byłby stacjonarny. W realnym tradingu charakterystyki strategii zmieniają się, a tym samym wynikajace z MC prawdopodobienstwa 🙁

  4. JacekS

    Moim zdaniem za pomocą symulacji MC (wariant A) można oszacować ryzyko wystąpienia maxDD tylko w przypadku transakcji systemu ustawionego bez MM, czyli np. na grę cały czas jednym kontraktem. W przeciwnym wypadku takie tasowanie transakcji nie bardzo ma sens – kiedy obok siebie mogą być transakcje na 2 szt i 25 szt. co w realu nie może mieć miejsca. A mając zyskowny system, w którym equity wspina się na nowe szczyty kto będzie grał cały czas jednym kontraktem ? ..
    A może chodzi tu o coś innego ?

  5. kathay

    Rzeczywiście powinienem dodać, ze Trading Blox miesza owartą equity czyli wyniki dzień po dniu a nie tylko same wyniki zamknięć transakcji – dzięki riScal
    Nie jestem zwolennikiem Monte Carlo przez to właśnie że używa się tego zakładając rozkłady normalne. Bardziej jako ciekawostka niż użyteczne narzędzie. To już szybciej zaakceptuje MC użyte w Wealth Lab dla szukania optymalnych parametrów drogą eliminacji słabych wyników.
    Jacek- symulacje MC robi się dla systemów z konkretnym MM. De facto wniosek powinien brzmieć tak: z 95% prawdopodobieństwem nasz system ryzykujacy 2% equity w transakcji nie doswiadczy maxDD większego niż 40%.

  6. JacekS

    to chyba można byłoby też wyliczyć z jakiegoś wzoru bez symulacji MC ?

  7. riScal

    .. to chyba można byłoby też wyliczyć z jakiegoś wzoru bez symulacji MC ?

    no właśnie nie można. gdyby byl to rozklad normalny to znajac srednia i odchylenie sprawa bylaby prosta.
    Niestety rozkład stóp zwotu systemów(strategii) jest bardzo czesto znacznie rozny od normalnego(np. dla trend-following jest prawoskośny i ma grube "ogony"), a własnie symulacje MC mają ten rozkład możliwie dokladnie przyblizyc.

  8. Jacek

    chyba się pomyliłem z "risk of ruin" – to zdaje się można wyliczyć bez takich symulacji ?

  9. Mike

    Autor Amibrokera dodał takie narzędzia do którejś aktualizacji w tym roku. Monte Carlo Optimizer plug-in,
    Ma ktoś może jakieś doświadczenia we wdrożeniu i stosowaniu tego w Ami?
    Chętnie poczytam 🙂

  10. AB Tech Support

    @Mike

    Wspomniany plugin służy do innych, niz omawiane na blogu, zastosowań. Począwszy od wersji 5.12beta – AmiBroker pozwala na użycie innych niż standardowa (przeszukująca wszystkie możliwe kombinacje) metod optymalizacji parametrów systemu. Głównym celem zastosowania takich "inteligentnych" metod optymalizacji jest skrócenie czasu całego procesu, przy zachowaniu relatywnie dużych szans znalezienia globalnego optimum.

    Dodatkowo w AB 5.12 został udostępniony interfejs dla programistów chcących zaimplementowac własne algorytmy optymalizacji. Plugin MonteCarlo (wraz z jego kodem źródłowym) należy zatem traktować jedynie jako najprostszy przykład, jak taki plugin stworzyć, a jego działanie to tylko _losowy_ dobór wartości – zatem efekty optymalizacji z dużą dozą prawdopodobieństwa nie będą najlepszym zestawem parametrów. Znacznie lepsze rezultaty osiągniemy korzystając z innych dostarczonych pluginów, w szczególności CMAE. Szczegółowe informacje na ten temat dostępne są w pliku README dostarczanym z wersją beta programu:
    http://www.amibroker.com/devlog/2008/08/01/amibroker-5160-beta-released/

    Oczywiście – jeśli ilość kroków optymalizacji jest niewielka i jej czas akceptowalny – możemy w dalszym ciągu korzystać ze standardowej metody optymalizacji sprawdzającej wszystkie wartości parametrów.

    pozdrawiam
    Marcin Górzyński
    amibroker.com

  11. Kibic

    Kathay czy nie zastanawiałeś, żeby poprowadzić kurs/warsztaty na temat tworzenia systemów mechanicznych. Chodzi mi zwłaszcza o taki dla laików który pokazuje podstawy, metodologię działań. W książkach nie zawsze wszystko się dokładnie zrozumie, co jedynie sprawia że tracisz czas na wychwytywanie błędów które inni już popełnili;)). Przeglądałem pod tym kątem internet, i okazało się że poza gotowymi płatnymi systemami(;))), nie ma takiej oferty. Może znasz jakiś godny polecenia kurs

  12. kathay

    Szczerze mówiąc nie, nigdy nie wpadło mi to do głowy, zupełnie nie czuję się predysponowany do prowadzenia tego rodzaju kursów.
    Ale nic straconego bo Grzesiek Zalewski czasem prowadzi tego typu warsztaty w ramach Parkietu

  13. DOCIEKLIWY

    Symulacja MC ma sens jeżeli wyniki transakcyjne są dopasowane(trzeba samemu dopasować) do odpowiedniego rozkładu lub syntezy rozkładów teoretycznych. Uwzględnia się tu również macieże korelacji.Programem,który liczy w ten sposób jest STATISTICA. Wesja próbna 30 dni,wersja podstawowa na 1 stanowisko >5000zł.Powiem tylko,że mając 160 sekwencji zysk strata dysponowałem historycznym max DD o 50% niższym niż w symulacji.Nie muszę chyba mówić,że taka różnica musi mieć wpływ na lewarowanie transakcji.Pzdr.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Proszę podać wartość CAPTCHA: *