Pokazywanie postów oznaczonych etykietą forex. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą forex. Pokaż wszystkie posty

piątek, 13 czerwca 2014

Minority game

Jednym z najprostszych możliwych do wyobrażenia modeli rynku giełdowego (albo aukcyjnego, albo walutowego) jest minority game, czyli gra mniejszościowa. Polega ona na tym, że gracze podejmują decyzje równocześnie, niezaleznie, na podstawie danych historycznych, a wygrywają ci, którzy byli w mniejszości.

Rzeczywiście - na przykład rynek forex w przybliżeniu działa właśnie w ten sposób. Gracze decydują, czy kupić, czy sprzedać, a wygrywają ci, których było mniej.

Okazuje się, że badacze potrafili dojść do ciekawych wniosków konstruując tego typu modele [1]

Spróbujmy stworzyć minimalny nietrywialny model takiej gry. Najprostszy z najprostszych modeli składa się z trzech graczy (dwóch to za mało - musi być liczba nieparzysta, jeden to też za mało - zawsze przegrywa sam ze sobą, więc model jest trywialny) podejmujących decyzje zero-jedynkowe. Przykładowa partia gry wygląda np. tak:

WierszDecyzjaWynikPunkty
A B C A B C
1. 1 1 0 0 0 0 1
2. 1 0 0 1 1 0 1
3. 0 1 1 0 2 0 1
4. 0 0 0 1 2 0 1
5. 1 1 1 0 2 0 1
6. 1 0 1 0 2 1 1

Wygrał gracz A, bo aż dwa razy potrafił być w mniejszości: w wierszu 2. i 3.

Jak może wyglądać najprostsza możliwa taktyka gracza ? Może wykonywać zawsze ten sam ruch, może zmieniać je cyklicznie, może powtarzać wartość, która wygrała, powtarzać wartość, która przegrała, wybierać wartość, która najczęściej wygrała/przegrała w pewnym odcinku czasu itp itd. Intuicja mówi nam, że im dłuższą historię gracz bierze pod uwagę, tym lepiej będzie mógł przewidzieć wyniki. Wydaje się też, że bardziej wyrafinowany algorytm decyzji będzie wygrywał z prostymi strategiami.

Skupmy się na najprostszych taktykach. Wykonałem eksperyment obliczeniowy z czterema strategiami:

  1. strategia stałej decyzji 0
  2. strategia stałej decyzji 1
  3. strategia powtórzenia pozycji, która ostatnio wygrała
  4. strategia powtórzenia pozycji, która ostatnio przegrała

Skrypt jest tu:

#! /usr/bin/env python3

def  Player( mode ):
    """  Player( mode ) zwraca funkcję gracza w trybie mode, gdzie
         mode = 0, 1, 2, 3
         Dla mode=0,1 gracz powtarza zawsze 0 lub 1, dla mode=2,3
         gracza powtarza lub neguje poprzedni wynik

         Funkcja gracza wywoływana jest z poprzednim (historycznym)
         wynikiem gry (jako 0 lub 1), ma zwrócić decyzję gracza, jako 0 lub 1.
    """     
    def  pfun0( prev ):
        return 0

    def  pfun1( prev ):
        return 1

    def  pfun2( prev ):
        return  prev

    def  pfun3( prev ):
        return  1 - prev

    return (pfun0, pfun1, pfun2, pfun3)[mode]

def  game( a, b, c, len ):
    """  Wykonanie gry o dlugości len
         a, b, c - gracze
    """
    prev = 0
    score = [0, 0, 0]

    for i in range(0, len):
        bid1 = a( prev )
        bid2 = b( prev )
        bid3 = c( prev )

        count = 0
        if bid1: count += 1
        if bid2: count += 1
        if bid3: count += 1

        # Co wygrywa - prev = głos mniejszości
        prev = 1 if count<2 else 0

        if (bid1 == prev):
            score[0] += 1

        if (bid2 == prev):
            score[1] += 1

        if (bid3 == prev):
            score[2] += 1

    return score

if __name__=="__main__":
    total = [0, 0, 0, 0]

    for i in 0,1,2,3:
        for j in 0,1,2,3:
            for k in 0,1,2,3:
                score = game( Player(i), Player(j), Player(k), 41 )
                print( i, score[0] )
                print( j, score[1] )
                print( k, score[2] )

                total[ i ] += score[0]
                total[ j ] += score[1]
                total[ k ] += score[2]


    print( total )            


Okazuje się, że jeżeli obliczymy średnią efektywaność tych strategii we wszystkich kombinacjach (to znaczy - zakładając, że pozostali gracze stosują jedną ze strategii 1,2,3,4 z równym prawdopodobieństwem), to najlepsza jest strategia 3 - powtórzenia pozycji, która ostatnio wygrała.

Wyniki (w umownych punktach):

  1. strategia stała 0 : 672
  2. strategia stała 1 : 312
  3. strategia powtórzenia wygranej : 852
  4. strategia powtórzenia przegranej :132

Dociekliwy czytelnik zapyta, dlaczego strategie 1 i 2 mają różne wyniki, skoro są symetryczne. Wynika to z niesymetryczności skryptu (startuję zawsze od 0 - linia 30, można zamienić na 1 i wtedy będzie odwrotnie).

Można drążyć ten temat dalej - obliczeniowo lub googlowo - szukać narzędzi teorii gier, które mają tu zastosowanie. Ale jedne wniosek może się nasunąć od razu - na rynku forex i na giełdzie mogą występować trendy (przynajmniej w krótkiej skali czasowej) - powtórzenie ruchu wygrywającego ma szanse powodzenia.

[1] Challet, Damien, Matteo Marsili, and Yi-Cheng Zhang. "Modeling market mechanism with minority game." Physica A: Statistical Mechanics and its Applications 276.1 (2000): 284-315.

sobota, 6 czerwca 2009

Spread, lewar i pipsy na rynku Forex

Wszyscy co prawda wiedzą, co oznaczają pipsy, lewar i tym podobne pojęcia, ale może nie wszyscy potrafią wyciągać odpowiednie wnioski z tej wiedzy. Tymczasem na wyniki strategii stosowanej na rynku forex wpływa równocześnie wiele czynników: rozmiar pozycji (pipsy), stosowany lewar, skuteczność (prawdopodobieństwo) i oczywiście spread (koszty stałe transakcji).

Ponieważ jest to wpływ równoczesny, sytuacja jest złożona, mimo, że w istocie chodzi tu o matematykę na szkolnym poziomie.

Musisz koniecznie wiedzieć, co dokładnie dzieje się gdy wykonujesz traksakcję o danych parametrach. Wyobraź sobie, że dysponujesz kwotą 100 $, wchodzisz na rynek z lewarem 10, przy spreadzie 4 pipsy (umawiamy się dla celów tych rozważań, że 10 pipsów = 1 promil) ustawiasz poziom 'take profit' na wysokości 30 pipsów i po kilku godzinach zgarniasz kasę. Pytanie - ile ? Jeśli to rozumiesz i umiesz wyliczyć, to dobrze, ale spójrz niżej, zobacz, czy czegoś nie pomijasz.

Przy lewarze 10 handlujesz w rzeczywistości 1000 $, przy spreadzie 0.0004 i TP=0.003 zarabiasz 0.0026 * 1000 = 2.60 $, co daje czynnik 0.026 profitu. W razie straty przy SL=-0.003 tracisz 0.0034 * 1000 = 3.40 $ ponieważ spread działa zawsze na niekorzyść gracza. Dlatego zysk i strata nie są symetryczne, mimo, że ustawiliśmy poziomy TP i SL w równych odległościach.

Wyobraźmy sobie hipotetyczną metodologię, która dla danej pary umożliwia prognozowanie ruchy kursu o 50 pipsów. Jej skuteczność niech wynosi 70 %. Oto jak wygląda wartość porfela gracza, który wykonuje 20 transakcji stosując opartą o taką prognozę strategię przy spreadzie 4 pipsy, trafiając "take profit" 14 razy: W zależności od zastosowanego lewara gracz zarabia aż do 170 %, ale widać jasno, że LEWARA NIE MOŻNA BEZKARNIE ZWIĘKSZAĆ w nieskończoność: w pewnym momencie następuje nasycenie profitu ! Dla lewara 120 obserwujemy już stratę. Lewar wpływa bardziej na wahania, a mniej na wynik końcowy.

Odpowiedzialność za taki fatalny stan rzeczy ponosi spread (czyli broker, który zgarnia całą kasę zachłannego gracza, podobnie jak krupier w kasynie). Oto jak wygląda zależność zarobku w naszej hipotetycznej sytuacji od zastosowanego lewara przy różnych spreadach: Słabsze strategie są jeszcze bardziej podatne na te efekty i wręcz nie działają na dużych spreadach, mimo, że nie stosujemy lewara.

Co jeszcze warto wiedzieć ?

Występujące w przyrodzie spready nieprzypadkowo mają taką wielkość, że działające strategie musiałyby mieć dzielność rzędu 65% lub większą - dla wielkości pozycji przekraczającej około dziesięciokrotnie wartość spreadu. To jest maksymalny poziom trafności, jaki można osiągnąć stosując znane metody (włączając w to sieci neuronowe, algorytmy genetyczne, filtry bayesowskie i inne metody - określane jako standardowe, choć nie są one proste).

Istnieje jeszcze jedna pułapka na chciwych graczy: "margin call". O tym też trzeba pamiętać. Można po prostu stracić wszystko za jednym zamachem, jeśli przedobrzymy z lewarem.

Tak więc rację ma Oanda, twierdząc, że dla tradera to właśnie niskie spready są istotne, a nie duże lewary. W warunkach bojowych lewar większy od 10 to lichwiarska pułapka ! Na stronach Oandy dokładnie opisane są te sprawy, ten broker stara się uczciwie informować o podstawowych regułach gry.

poniedziałek, 12 stycznia 2009

Więc czy da się przewidywać kursy walut na forexie ?

Dane historyczne są dostępne w sieci, wyposażmy się więc w jakieś narzędzie (dla mnie najwygodniejszy jest bash i awk, ale równie dobrze może być to Excel) i popróbujmy prostych eksperymentów. Badając dane pary EURCHF z ostatnich kilku lat (moje dane były pobrane z rosyjskiego portalu forexite, próbkowane z rozdzielczością minutową) widzimy, że każdy ruch w jedną stronę poprzedza ruch w przeciwną stronę - ta obserwacja jest słuszna z dość dużym prawdopodobieństwem ! Prawdopodobieństwo to wynosi około 62 % dla danych minutowych. Dla danych próbkowanych 2 razy rzadziej analogiczna wielkość to 59 % Ogólnie rzecz biorąc, im dłuższe okresy badamy, tym ta korelacja (albo ściślej rzecz ujmując - antykorelacja) jest słabsza. Przybliżone wielkości prawdopodobieństwa "odbicia" dla pary EURCHF w zależności od długości ruchu przedstawia zestawienie:
 1    0.622234
 2    0.595226
 5    0.570834
10    0.557971
20    0.543762
60    0.538403
Widzimy, że dla długich okresów badana wielkość upodabnia się do danych losowych, dla których oczywiście prawdopodobieństwo to wynosi 50 %. Podobieństwo dotyczy oczywiście tylko tego jednego aspektu, należy pamiętać, że nasz eksperyment jest zbyt prosty, żeby w ogólności rozstrzygnąć o charakterze badanego procesu. Czy można jednak jakoś wykorzystać te zależności ? Okazuje się, że nie, że to za mało. Średnia względna wielkość ruchu ceny w zależności od wielkości kroku w badanych okresach wygląda tak:
 1      0.000158347
 2      0.000164155
 5      0.00024643
10      0.000328186
20      0.000444261
60      0.000738944
Zakładając, że broker zabiera nam 1 pips prowizji w postaci spread'u, co stanowi około 0.000066 wartości pozycji, mamy następujący średni profit na tak zaprognozowanej transakcji:
 1     -2.72892e-05
 2     -3.47364e-05
 5     -3.10888e-05
10     -2.79495e-05
20     -2.71165e-05
60     -9.24467e-06
Profit jest ujemny dla każdego z badanych przedziałów, co więcej, widać, że w zakresie małych ruchów jest prawie stały, spread równoważy prawie zysk związany z przewidywalnością ruchu, a więc można uznać, że jest to przewidywalność NIEZNACZĄCA, niwelowana przez prowizje. Nie powinniśmy jednak się poddawać ! Wykryty przez nas autentyczny fakt, polegający na MOŻLIWOŚCI przewidywania ruchów cen, którą można EKSPERYMENTALNIE UDOWODNIĆ powinien nas zachęcić do dalszych samodzielnych badań. W kolejnych odcinkach postaram się opisać, do czego ja doszedłem, w jaki sposób, a także jak używałem awk'a i jednolinijkowców do super ekstremalnie szybkiego programowania i obliczania różnych statystyk i prawdopodobieństw.

piątek, 2 stycznia 2009

Handel walutami - czy trendy istnieją

Od paru lat, na skutek upowszechnienia internetowych platform transakcyjnych, handel walutami na rynku międzynarodowym dostępny jest dla każdego, kto jest podłączony do sieci. FOREX zyskuje coraz większą popularność w kręgach domorosłych spekulantów ze względu na niskie koszty transakcji (rzędu 0.01 % !) i dostępne wysokie lewary (nawet do 200 x ). Każdy, kto chce rozpocząć przygodę z forexem powinien jednak najpierw zapoznać się ze specyfiką tego rynku, w przeciwnym razie szybko straci wszystkie zainwestowane środki. W tym artykule chcę pokazać, jak złudne są nasze przekonania co do natury kursów walut. Obalę mit o wyraźnych trendach , które rzekomo widoczne są gołym okiem na wykresach kursów. Poniżej przedstawiam wykres notowania pary EUR/USD na przestrzeni kilku lat: Końcowe załamanie to objaw obecnego kryzysu funansowego, który przerwał wyraźny trend rosnący Euro w stosunku do dolara amerykańskiego. Każdy widzi ten trend, a ja teraz pokażę, że to złudzenie. W tym celu wygeneruję sztuczne dane i pokażę ich wykresy. Poniżej przedstawiam pięć zestawów danych całkowicie losowych. Program generujący startuje z jedynki i losowo mnoży ją lub dzieli przez tę samą wartość (krok) równą 1.001. Skrypt, który wygenerował te dane wygląda tak:
awk 'BEGIN { x=1; p=1.001; 
     for (i=0; i<27783; i++) { 
        if (rand() < 0.5) x *= p; else x /= p; print x }
     }'
27783 to liczba punktów pierwotnego wykresu - chcę uzyskać dane tej samej długości. Oto, co uzyskuję: Wygenerowany wykres również zawiera wyraźny trend . Jedyne wyjaśnienie tego faktu to przypadek, albo złudzenie. Wygenerujmy więc kolejne cztery przebiegi czasowe i obejrzyjmy: Oprócz być może pierwszego z powyższych czterech sztucznie wygenerowanych wykresów, wszystkie posiadają odcniki wyraźnego trendu . Tłumaczy się to tym, że umysł ludzki cechuje skłonność do dopatrywania się porządku nawet tam, gdzie go wcale nie ma. Czy więc dane finansowe , takie jak notowania FOREXU czy giełdy, są nieprzewidywalnymi ciągami losowymi ? Czy więc cała analiza techniczna jest równoważna próbom znalezienia systemu wygrywania w totolotka ? Nawiasem mówiąc są tacy, którzy wierzą w systemy totolotka i nawet tacy, którzy je sprzedają ! W środowiskach akademickich do niedawna panowało przekonanie o efektywności rynków i co za tym idzie o niemożliwości przewidywania kursów. Od ostatnich kilku (czy też kilkunastu) lat pojawiają się jednak prace (znajdziemy je względnie łatwo używając http://scholar.google.com ) dostarczające solidnych argumentów zwolennikom analizy technicznej. Jedno jest pewne : dzisiejszy trader nie obejdzie się bez komputera, podstawowej umiejętności programowania i podstawowej znajomości statystyki matematycznej. O swoich dokonaniach na polu handlu FOREXOWEGO - o próbach znalezienia solidnych teoretycznych podstaw do praktycznego zarabiania pieniędzy - postaram się napisać w kolejnych postach.