Dlzka obchodu: 5 minut
Obchodujeme vsetko - vysledok = 1 174 918
Nahodne vygenerovana postupnost typu boolean pre zobratie/nezobratie obchodu (1000 iteracii)
tournament selection a populaci 10 jedincov n size 2
Upraveny vyber podla parametru bestSelection a populaci 20 jedincov n size 10, vyber 6
Skontrolovat vsetky mozne nastavenia kniznice ECJ pre vyber jedincov do dalsej populacie. (kvoli obcasnemu zhorsovaniu fitness funkcie v priebehu casu).
Upraveny vyber podla parametru tournament selection a populaci 20 jedincov n size 7
Oproti randomnemu vygenerovaniu booleanovskeho pola sa vysledok vylepsuje skor symbolicky, nedochadza k vyraznemu zlepseniu po jednotlivych generaciach. Vstupne data poskytnute externou firmou su optimalizovane.
Vektor pre genetickú mutáciu má tvar
Povolené hodnoty [Int Int Int Int Int]
od - do [-1 → 0, 5 → 100,-1 → 0, 5 → 100,-1 → 0, 1 → 120] Prvá hodnota znamená či tento výstup budeme používať, druhá hodnota potom konkrétne nastavenie výstupu.
19. generácia
Kedže pracujeme s tickovými datami, musíme si ich vhodným spôsobom upraviť. Technické indikátory sa vypočítavajú pre danú periódu. Napríklad perióda 14 znamená pri 5 minútovom grafe posledných 80 minút. Kedže pri tickových datach nemame takýto graf musíme si vhodne data zgrupiť. Parametrický nastavíme veľkosť okna napríklad 5 a nasleduje prepočet.
Pre každý tick vypočítame otváraciu cenu, najvyššiu cenu, najnižšiu cenu a zatváraciu cenu posledných 5 tickov.
Príklad tickové data 3 4 5 8 2 1 5 4 6 7 Pre tick s hodnotou 2 na pozíci 5 si budeme evidovat low high open close cenu predošlých 5 tickov. open=3, high=8, low=2, close=2 Tj odteraz si nebudeme pamätať pri tickových datach iba
ale dôjde k rozšíreniu na
S týmito dátami sme potom schopný pracovať pri skoro všetkých technických indikátoroch.
V predošlej verzi programu sa pri evolúci vykonával výpočet aj pre kombináciu parametrov, ktoré sme už niekedy v predošlých generáciach vyhodnotili. Preto si každú novú kombináciu pamätám aj spolu s výsledkom a vkladám do HashMap-y. Pred samotným výpočtom kontrolujem, či sa kombinácia paramtrov nenachádza v HashMap-e. Ak áno nie je dôvod výpočet vykonať znova a použijem predošlé vyhodnotenie.
Tickové dáta program dokáže zgrupovať podľa počtu tickov napr. x = 100 alebo podľa časového intervalu napr. y =5 minút.
Pre rýchlejšiu prácu je zavedený pomocný vektor, kde sú tieto zgrupené dáta ukladané. Záznam vektoru je objekt typu Candlestick (moja vlasná trieda), ktorý uchováva cenu open, high, low, close za konkrétne obdobie.
Pri veľkosti zgrupovania 100 tickov, máme v pomocnom vektore práve 1 záznam na každých 100 tickov. Pri časovom okne je to zgrupovanie podľa času nie počtu tickov.
Indikátory potrebujú pre výpočet väčšinou x posledných candlestickov, kde x určuje periódu. V zgrupenom vektore dát sa pohybujeme podľa toho, kde sa nachádzame v timestampe tickových dát.
Napríklad sme na 1457 ticku. Pri zgrupení po 100 tickoch máme v candlestick vektore 14 záznamov. Pre výpočet ale potrebujeme aj aktuálny 1457. tick
Pri ticku 1457 vidíme aj štatistiku open, high, low, close pre rozmedzie tickov 1400 - aktuálny tick(1457) Pre výpočet pri perióde 14 použijeme aktuálny tick (ktory obsahuje aj udaje o extremoch medzi tickmi 1400-1457) + 13 záznamov v candlestick vektore.
Každý indikátor vyžaduje pre výpočet iné údaje ale s pomocou ceny Open, High, Low, Close sme schopný vzpočítať drvivú väčšinu informcií.
Okrem výslednej sumy teda uchovávame aj tzv MAE/MFE analýzu.
1126456. zaznam v ticks.csv
rozdiel medzi 2 tickmi 99405 sekund tj. cca 27,61 hodiny
Nezrovnalost bola odhalena pri zahrnuti statistiky o maximalnom stratovom a ziskovom obchode. Pri nastaveni stop-loss na 20 pipsov bola najvyssia strata (zisk) okolo 100 pipsov. Tento casovy a cenovy rozdiel medzi 2 tickmi sposobil mierne skreslenie vysledkov, ktore sa pri mnozine x > 90 000 obchodov prejavilo na vysledkoch iba kozmeticky.
Profit pre danu strategiu je v pipsoch a nie v dolaroch resp. eurach. Pre lepsiu orientaciu 1 pips predstavuje pri EUR/USD pohyb 10$. Vysledny ucet bude firma uvazovat v eurach, preto je vysledok obchodu este prekonvertovany.
Neplati teda jednoduchy vztah profit = 10*zisk_v_pipsoch
Vysledny vztah profit = (10*zisk_v_pipsoch ) / (kurz EUR/USD)
Testovane pre Profit-target 10..150 pispov Stop-loss 10..200 pipsov.
V štatistike sú zahrnuté stratégie, ktoré v priebehu vývoja dosiahli postupne najväčší profit a stali sa aktuálne najlepším jedincom. Pri tejto evolúci vstupovali o hry 3 parametre: Max zisk na obchod, maximálna strata a maximálne zotrvanie v obchode v minutách. Parametre sa ľubovoľne kombinovali aj s nastavením hodnoty aj nastavením príznaku, či ich použijeme.
Pouzijeme: -1, TakeProfit: 197, Pouzijeme: -1, StopLoss: 184, Pouzijeme: -1, Cas v minutach: 989
StrategyStatistics{ profit= 1250826.3099999414, profitFactor= 1.1942990191613283, rrr= 0.8527708353906494, winRatio= 0.5834187907684826, avgPlus= 139.321591918091, avgMinus= 163.37518373769032, bestTrade= 736.98, worstTrade= -760.4, bestProfit= 1299769.1199999347, worstProfit= -14525.949999999997, sumPlus= 7688462.049999853, sumMinus= 6437635.73999995, countPlus= 55185.0, countMinus= 39404.0, }
Pouzijeme: 0, TakeProfit: 37, Pouzijeme: 0, StopLoss: 114, Pouzijeme: -1, Cas v minutach: 253
StrategyStatistics{ profit= 9144163.980000224, profitFactor= 1.7370698835860954, rrr= 0.3195854460003994, winRatio= 0.8446091372711176, avgPlus= 270.524670039296, avgMinus= 846.4862008733586, bestTrade= 815.6, worstTrade= -955.4, bestProfit= 9144163.980000224, worstProfit= -88989.67999999998, sumPlus= 2.1550265740000356E7, sumMinus= 1.2406101759999944E7, countPlus= 79661.0, countMinus= 14656.0 }
Pouzijeme: 0, TakeProfit: 37, Pouzijeme: 0, StopLoss: 125, Pouzijeme: -1, Cas v minutach: 253
StrategyStatistics{ profit= 1.0263994600000137E7, profitFactor= 1.8712268378920376, rrr= 0.2926566562959114, winRatio= 0.8647539680015268, avgPlus= 270.2894318362991, avgMinus= 923.5717897460145, bestTrade= 815.6, worstTrade= -1036.05, bestProfit= 1.0263994600000137E7, worstProfit= -100428.24999999999, sumPlus= 2.2045076350000393E7, sumMinus= 1.178108175000016E7, countPlus= 81561.0, countMinus= 12756.0 }
Pouzijeme: 0, TakeProfit: 37, Pouzijeme: 0, StopLoss: 197, Pouzijeme: -1, Cas v minutach: 253
StrategyStatistics{ profit= 1.1760934980000446E7, profitFactor= 2.0566041392174035, rrr= 0.18723517308387852, winRatio= 0.9165558905856542, avgPlus= 269.92519597208303, avgMinus= 1441.637228338292, bestTrade= 815.6, worstTrade= -1507.23, bestProfit= 1.1760934980000446E7, worstProfit= -2957.4900000000002, sumPlus= 2.2891816020000417E7, sumMinus= 1.1130881039999953E7, countPlus= 84808.0, countMinus= 7721.0 }
Pouzijeme: 0, TakeProfit: 72, Pouzijeme: 0, StopLoss: 197, Pouzijeme: -1, Cas v minutach: 253
StrategyStatistics{ profit= 1.8981877090000063E7, profitFactor= 1.9904755319787604, rrr= 0.3607777587873309, winRatio= 0.8465593816692623, avgPlus= 519.8174666139898, avgMinus= 1440.8245906322863, bestTrade= 928.76, worstTrade= -1507.23, bestProfit= 1.8981877090000063E7, worstProfit= -141250.35000000003, sumPlus= 3.814628497000103E7, sumMinus= 1.916440788000004E7, countPlus= 73384.0, countMinus= 13301.0 }
Pouzijeme: 0, TakeProfit: 81, Pouzijeme: 0, StopLoss: 197, Pouzijeme: -1, Cas v minutach: 253
StrategyStatistics{ profit= 2.0857381140000056E7, profitFactor= 1.99844323777157, rrr= 0.4049381561291506, winRatio= 0.8315131517799051, avgPlus= 583.3070125751082, avgMinus= 1440.4841918356265, bestTrade= 928.76, worstTrade= -1507.23, bestProfit= 2.0857381140000056E7, worstProfit= -139670.92, sumPlus= 4.174728289000049E7, sumMinus= 2.0889901750000253E7, countPlus= 71570.0, countMinus= 14502.0 }
Pouzijeme: 0, TakeProfit: 89, Pouzijeme: 0, StopLoss: 197, Pouzijeme: -1, Cas v minutach: 216
StrategyStatistics{ profit= 2.1027350679999538E7, profitFactor= 1.9045179432981536, rrr= 0.4440334966185906, winRatio= 0.8109330334129997, avgPlus= 639.6367283076678, avgMinus= 1440.5145854505063, bestTrade= 928.76, worstTrade= -1507.23, bestProfit= 2.1027350679999538E7, worstProfit= -138376.02000000002, sumPlus= 4.427437506000015E7, sumMinus= 2.324702438000027E7, countPlus= 69218.0, countMinus= 16138.0 }
Pre lepsie analyzovane chovania evolucie je potrebne spustat ju na tych istych datach s roznym pociatocnym seedom. Kazda evolucia pozostavala z 30 jedincov a pocet generaci bol kvoli velkej casovej narocnosti testov obmedzeni na 150 generacii.