Sveiki, mielieji Forex treideriai ir treiderės! Mūsų portalo puslapiuose mes ne kartą aptarinėjome Forex robotų testavimą, o dabar atėjo metas pakalbėti apie robotų optimizaciją istorijoje.
Treiderių nuomonės šiuo klausimu išsiskiria – vieni mano, kad optimizacija yra bereikalingas dalykas, nes robotas dirbtinai pritaikomas prekiauti pelningai pagal praėjusią istoriją, kiti gi tvirtina, kad optimizacija yra būtina esamoms rinkos sąlygoms. Labai į šias diskusijas nesigilinsime, šiame straipsnyje ir video pamokoje aš tiesiog papasakosiu, kaip optimizuoti robotus terminale Metatrader 4 ir tikiuosi, kad kažkam sutaupysiu laiko, o gal net ir depozitų.
Kas yra optimizacija?
Ne paslaptis, kad rankinės prekybos sistemos su laiku pasensta ir pradeda nebeduoti tokio pelno, kurį davė anksčiau. Paradoksalu, bet tuo pačiu senos nuostolingos sistemos staiga pradeda išsiskirti kaip pelningai veikiančios strategijos. Čia šuo pakastas tame, kad rinka veikia ciklais, kai su metais iš esmės pasikeičia rinkos sąlygos. Lygiai tas pats ir su Forex robotais. Rinkos sąlygos pradeda nebeatitikti tos strategijos, kuri yra įprogramuota į robotą kaip algoritmas ir robotas pradeda prekiauti į nuostolį.
Ką gi tokiu atveju daryti? Tiesiog ištrinti robotą ir jį pamiršti? Ne. Štai čia ir ateina į pagalbą robotų optimizacija. Kas tai yra? Paprastai kalbant – tai yra robote esančių parametrų pritaikymas pagal esamas rinkos sąlygas arba kitaip tariant, strategijos pritaikymas, jos adaptacija pasikeitus rinkai. Lygiai taip pat, kai treideriai koreguoja savo rankines prekybos sistemas prie esamos rinkos situacijos, taip pat ir robotų megėjai optimizuoja savo robotus. Koregavimas, adaptacija – tai yra neišvengiamas prekybos procesas ir tie, kas nepadaro reikiamų pakeitimų laiku, tiesiog lieka už borto, toks yra treiderio gyvenimas.
Nuo ko apskritai pradėti?
Taigi, mes pasiaiškinome, kad optimizacija vis tik dalykas svarbus ir net būtinas prekiaujant Forex robotais. Dabar atėjo laikas atsidaryti terminalą ir pabandyti atlikti optimizaciją. Įsijungiame Metatrader 4 terminalą ir spaudžiame „Strategy Tester” (mygtukas viršuje, įrankių juostoje).
Terminalo apačioje atsiras langas, pavadinimu „Tester„, čia pasirenkame robotą, kurį norėsime optimizuoti. Aš pasirinkau optimizuoti robotą „Voras„. Pasirenkame valiutų porą, laiko intervalą, reikalingą optimizuojamam robotui.
Toliau matome langelį „Model„(modelis) – čia mums reikia nuspręsti, kokį modeliavimo tipą mes pasirinksime. Apie tai keletas žodžių žemiau.
Modelio pasirinkimas
Kas jau yra testavęs kokį nors robotą, žino, kad egzistuoja trys testavimo modeliai, t.y. „pagal kainos atsidarymą (open price only)”, „pagal kontrolinius taškus (control points)” ir „visi tikai (every ticks)”. Aš rekomenduoju robotus optimizuoti pagal modelį „visi tikai”. Tai labiausiai tikslus modelis ir tikimybė, kad Jūs padarysite kažką ne taip taps mažesnė. Žemiau, kaip pavyzdys, yra visų modelių testų grafikai, kad susidarytumėt nuomonę patys:
Modelis „pagal kainos atsidarymą”
Modelis „pagal kontrolinius taškus”
Modelis „Visi tikai”
Taigi, kaip matome, rezultatai skiriasi, ypač atkreipkite dėmesį, kaip skiriasi pirmasis modelis nuo antrojo ir trečiojo. Testavimas su modeliu pagal „kontrolinius taškus” kardinaliai nesiskiria nuo modelio „visi tikai”, todėl optimizacija su šiuo modeliu gali būti naudojama taupant laiką. Iš esmės, geriausia yra patestuoti robotą su visais modeliais ir palyginus rezultatus, priimti sprendimą.
Modeliavimo tipas pasirinktas ir toliau spaudžiame mygtuką, pavadinimu „Expert properties” (roboto nustatymai), čia atsidarys langas su trimis polangiais: Testing (testavimas), Inputs (įvestys) ir Optimization (optimizacija) – apie kiekvieną jų kalbėsime atskirai.
1.Testavimo parametrai
Taigi, pirmas langas – Testing ir čia mus domina raudonai apibrėžti nustatymai.
Pozicija „Optimized parameter” (optimizuojamas parametras) leidžia mums pasirinkti pagrindinį išeities parametrą, pagal kurį bus vertinamas kiekvienas testas, o būtent:
- «Balance»— atranka daroma pagal galutinį depozito balanso dydį;
- «Profit Factor»— atranka daroma pagal galutinį santykį tarp bendro pelno ir bendro nuostolio. Profit Factor apskaičiuojamas taip: tarkime, bendras pelnas 6000$, o bendras nuostolis 3000$. 6000/3000 = 2.0 (t.y. minimalus pelningumas turi būti didesnis nei 1);
- «Expected Payoff»— atranka daroma pagal galutinę matematinę tikimybę, t.y. vidutinis pelno rodiklis viename sandoryje. (minimali matematinė tikimybė neturi būti lygi arba mažesnė už spredo dydį);
- «Maximal Drawdown»— atranka vykdoma pagal minimaliausiai pasiektą maksimalų nuosmūkį. Kitaip tariant, Maximal Drawdown — tai didžiausia suma, kurios dydžiu buvo sumažėjęs depozitas, kai rinka robotui buvo labiausiai nepalanki. Iš esmės, šis parametras sako, kokia yra reali rizika. Pavyzdžiui, jeigu maksimalus nuosmūkis viršija 70-80 %, verta peržiūrėti depozito dydį.
- «Drawdown Percent»— atranka vykdoma pagal santykinį nuosmūkį, t.y. maksimalaus nuosmūkio procentinė išraiška, sutinkamai su depozito dydžiu. Optimizacija pagal šį rodiklį naudinga tuomet, kai robotas prekiauja nefiksuoto loto dydžiais arba įjungta progresinio loto funkcija.
Taip pat matome, kad pirmajame lange uždėta varnelė ant „genetinio algoritmo” (Genetic algoritm). Įdomu tai, kad jei varnelę nuimsime, tai testeris ištestuos absoliučiai visas robotų nustatymų variantų kombinacijas. Tačiau tam prireiktų maždaug 100500 metų. Laimei, terminale yra optimalių parametrų paieškos galimybė būtent su genetinio algoritmo pagalba, kuris leidžia atlikti optimizaciją viso labo per keletą valandų ar dienų.
2. Optimizacijos parametrai
Šis langelis yra skirtas optimizacijos laiko taupymui. Čia galime išstatyti savo taisykles, kaip turėtų būti ribojami rezultatai. Pavyzdžiui, apriboti maksimalią nuostolingų sandorių seriją iki 4, o maksimalų nuosmūkį 10-čia procentų. Tada optimizacijos rezultatuose atsispindės tik tie rezultatai, kurie atitiks užduotus parametrus. Čia nieko nekeičiame.
3. Įvesties parametrai
Optimizuoti robotus, kaip ir testuoti juos, yra įprasta su išjungtu MM (rizikos ir kapitalo valdymu), dažniausiai su 0,01 lotu. Tam tikslui, roboto nustatymuose reikia surasti atitinkamą bloką ir išstatyti fiksuotą 0,01 dydžio lotą.
Toliau matome, kad įvesties parametrų lentelė yra sudaryta iš penkių stulpelių – pačio parametro pavadinimas (Variable), jo einamoji reikšmė (Value), pradinė reikšmė optimizacijai (Start), žingsnis (Step) ir galutinė reikšmė optimizacijai (Stop). Ką visa tai reiškia ir kaip teisingai nustatyti?
Pavyzdžiui, mes norime tam tikroje laiko atkarpoje (nuo 2015-06-01 iki 2015-10-01) parinkti robotui Voras optimalų Stop-Loss ir Take-Profit. Mes matome, kad pagal nutylėjimą roboto Voras SL yra 40 punktų, o TP – 60 punktų, tačiau šiandienės rinkos sąlygoms mes abejojame, ar tai geriausi parametrai, todėl kompiuteris parinks optimalesnius variantus.
Tam tikslui, mes užduodame pirminę stopo reikšmę (Start stulpelyje) , tarkime, 20 punktų (mažiau rašyti nelogiška, nes SL bus per mažas). Taip pat užduodame ir galutinę reikšmę, tarkime 200 punktų (jei nusprendėm, kad didesnis nei 200 punktų stopas jau yra nelogiškas). Žinoma, galima užduoti ir 1000 punktų, bet optimizuoti reikia protingai, nes tai labai padidina optimizavimo laiką. Ir paskutinis įvesties parametras – žingsnis. Jeigu mes nurodysime žingsnį, pavyzdžiui, 10, tai gausime tokius optimizavimo žingsnius: 10, 20, 30, 40, 50, 60. Čia irgi reikia mąstyti racionaliai – kokį žingsnį geriausiai išstatyti? 1, 10 ar 5? Gal visai pakaktų žingsnis 2, kas būtų gan tikslu ir sutaupytų optimizacijos resursų.
Taip pat, nepamištame uždėti varnelių ant MaxTP ir MaxSL, kad optimizacija vyktų pagal šiuos parametrus.
Viską nustatę, spaudžiame Start.
Optimizacijos metu mes nieko ypatingo nematysime, išskyrus žalią liniją apačioje bei keletą skaičių – t.y. kiek kombinacijų yra numatyta ir kiek jų jau yra atlikta. Dešinėje yra rodomas labai preliminarus laikas.
Kaip žiūrėti optimizacijos rezultatus?
Taigi, jei viską atlikome teisingai, gauname optimizacijos rezultatus – jie optimizuojant palaipsniui randasi langelyje Optimization Results.
Langelio viršuje, rezultatus galime išsirūšiuoti pagal: gautą pelną, sandorius, pelningumo faktorių (profit factor), matematinę tikimybę, ir nuosmūkius (pinigais ir procentais). Dešinėje matome, su kokiais parametrais yra optimizuotas variantas.
Kaip rinktis rezultatus, koks yra geriausias? Tai priklauso tik nuo pačio treiderio, t.y. būtent, kas jam yra svarbu, nes vieniems svarbu pelnas, kitiems, kad būtų mažesnis nuosmūkis, tretiems – pelningumo faktorius ir pan.
Išsirinkau geriausią variantą. Ką su juo daryti?
Jį reikia išsaugoti, kaip nustatymų failą. Su pele užeiname ant pasirinkto varianto, spaudžiame dešinį pelės mygtuką ir pasirenkame Set Input Parameters.
Po to, automatiškai roboto nustatymuose pasikeis optimizuoti parametrai. Dabar juos reikia išsaugoti. Vėl spaudžiame Expert Properties.
Matome, kad vietoj standartinių parametrų, stulpelyje Value atsirado nauji, kurios parinko optimizacija. Spaudžiame Save, kad juos išsaugoti.
Čia failą galime pavadinti taip, kaip norime, kad žinotume, kad tai yra būtent to ar kito roboto optimizuotų nustatymų failas. Pats failas yra .set tipo, jis ir saugos optimizuotus nustatymus ir bus panaudojamas visada, kai norėsite paleisti robotą prekiauti – visada galėsite greitai įkelti naujus, optimizuotus nustatymus.
O ką daryti, jei robotas turi labai daug nustatymų?
Kuo daugiau parametrų Jūs testuojate iškart, tuo optimizacijos procesas bus ilgesnis. Bet būna situacijų (robotų), kur parametrų būna tiek daug, kad terminalas tiesiog atsisako atlikti optimizaciją ir praneša apie tai į MT4 žurnalą. Tokiu atveju būtina visus parametrus išskirti į 4 grupes: parametrus, stipriai įtakojančius rezultatą, vidutinius, silpnai įtakojančius, ir neįtakojančius visai. Įtakos stiprumą galima nustatyti pabandant optimizuoti atskirai paimtą parametrą. Be abejo, pirmiausiai reikia optimizuoti tuos parametrus, kurie itin įtakoja rezultatus, vėliau pereinant prie mažiau svarbių. M
Daugiausia rekomenduojama užsakyti 4-5 parametrus vienu metu (kitaip optimizacija gali užtrukti labai ilgai).
Optimizacijos laikotarpio pasirinkimas
Čia yra daug nuomonių ir būdų. Aš manau, mažiausias laikotarpis turi būti bent keli metai laiko. Nėra tikslo optimizuoti trumpiau, nes kuo mažesnis laikotarpis, tuo labiau dirbtinai nustatymai yra pritaikomi prie esamų rinkos sąlygų ir tokie nustatymai vėl greitai pasensta. Svarbiausias dalykas, kai optimizacija yra baigta – pratestuoti robotą su naujais nustatytais parametrais tuo laikotarpiu, kurio optimizacija dar „nematė” (pridedant 20-30 % daugiau istorijos). Tarkime, jei mes optimizavome laikotarpį nuo 2015-06-01 iki 2015-10-01), tai būtina pratestuoti nuo 2015-01-01 iki šių dienų.
Internete yra nemažai būdų, kaip strategiškai atlikti optimizaciją. Pavyzdžiui, yra rekomenduotina optimizuoti ne mažiau kaip paskutinius 6 metus, o testuoti pridedant dar 2 iš anksčiau.
Yra ir dar profesionalesnis optimizavimas. Profesionalai (arba robotų autoriai), pavyzdžiui, optimizuoja tokiu būdu: imama istorija, tarkime 15 metų (ne mažiau 10 m.), nuo 2000 iki 2015. Šis laikotarpis suskaldomas į tokius periodus: 2000-2003 m. – šiame periode padaromas paprastas roboto testavimas, tada 2003 iki 2012 metų vykdoma optimizacija, o nuo 2012 iki 2015 metų vėl roboto testavimas. Po optimizacijos yra atrenkama 10-20 labiausiai sėkmingų variantų. Po to, su visais pasirinktais optimizuotais nustatymais robotas yra testuojamas per 2000-2003 m. ir 2012-2015 m. atkarpas ir lyginama su testais pagal nutylėjimą. Na, ir tie nustatymai, kurie atlaikė testavimą, paliekami kaip kandidatai tolimesniam palyginimui. Toliau yra testuojami likę variantai ir pabaigoje išrenkama vienintelė geriausia kombinacija.
Toks būdas jau yra labai išsamus ir profesionalus, be abejo, tai užims laiko, bet, kaip sakoma, greitai niekas nesidaro.
O jeigu reali prekyba skiriasi nuo testerio?
Taigi, mes gavome optimizacijos rezultatus, kuriuos išsaugojome .set faile. Tačiau įkėlinėti failą ant realios sąskaitos dar anksti. Iš pradžių reikia patikrinti robotą su naujais setais demo sąskaitoje. Iš esmės, 20-30 sandorių su viena valiutų pora pilnai užteks, kad suprasti, ar optimizacija pavyko. Be to, yra racionalu patikrinti, ar sutampa sandoriai demo sąskaitoje su sandoriais, kurie gauti testuojant tą patį laiko periodą testeryje. Tam tikslui yra daromas testas ir lyginama. Nebūtina, kad kiekvienas sandoris būtų punktas į punktą, jei sandoriai maždaug sutampa, tai yra normalu. Taip pat nebaisu, jei nėra vieno kito sandorio. Čia svarbu yra bendras vaizdas, bendras sutapimas.
Realioje prekyboje robotas visada šiek tiek skirsis nuo testerio – tai gali būti dėl praslydimų (reqoute), dėl paaukštinto spredo, ar dar ko nors. Be abejo, rezultatai negali skirtis kardinaliai. Jeigu testeryje Jūs matote visai kitą vaizdą nei realioje sąskaitoje, tai tokį robotą optimizuoti yra beprasmiška – kaip gerai bebūtų parinktas setas, robotas vistiek prekiaus kitaip.
Pabaigai
Šiandien sužinojome, kas yra forex robotų optimizacija ir kaip ją atlikti. Nežiūrint to, dar yra daugybė įvairių niuansų, apie kuriuos čia nėra galimybės pakalbėti viename straipsnyje. Tačiau pradžioje šios informacijos pilnai pakaks tam, kad optimizuoti Forex robotą, kad jis ilgalaikėje perspektyvoje neštų pelną. Optimizuokite robotus teisingai, ir tada, tikėtina, kad algoritminė prekyba taps daug patrauklesnis užsiėmimas.
Pagarbiai, Mykolas Kuzminskis
Sveiki Mykolai,
MT4 testeriu galima optimizuoti Forex robotą. O ar tas pats testeris tinka roboto testavimui?
Kai aš darau roboto optimizaciją, tai neretai MetaTrader prekybos žurnale randu įrašą a la "There were 81 passes done during optimization, 64 results have been discarded as insignificant". Kažkada MetaTrader kaip nereikšmingus nurašė netgi visus optimizacijos rezultatus. Kaip čia šitą suprasti?
Reiskia, kad 64 variantai buvo panaikinti, kaip nereiksmingi, ty blogesni.
Sveiki, gal zinote is kur gauti robota prekiaujanti per naujienas?
Yra pas mus forume, https://spekuliantas.com/forum/index.php?topic=92….
bet aš jo nečiupinėjau, todėl neklauskit manęs "kaip jis?"
ar pries optimizuojant robotus verta siustis tikus is tickstory?
ar del to nieko nepasikeis del tikslesniu rezutatu?
Labai reikalingas straipsnis, yra atsakymai į daugelį aktualių klausimų.