Forex programozás › Fórum › Kérdések az MQL4 programozási nyelvvel kapcsolatban › Optimalizáció
Címkézve: Optimalizáció, visszatesztelés
-
SzerzőBejegyzés
-
Szia Radu!
Azon kezdtem el agyalni, hogy nagyon sokat tesztelünk és optimalizálunk, viszont az optimalizálás során közel sem ad elég információt az egyes lefutásokról.
Azt szeretném megtudni, hogy van-e olyan lehetőség MT4-ben, hogy a tesztelés során megkapott összesítést (vagy még többet is) kinyerjük optimalizáció során is? Sokkal jobban el lehetne dönteni az egyes beállítások eredményét.
Előre is nagyon szépen köszönöm a segítséged!
Sajnos az MT4 egyáltalán nem kényezteti el a tesztert ilyen szempontból. A legjobb esetben is csak a CSV táblázatok mentése, vagy a copy-paste marad: nincsen megfelelő (előre beépített) funkció az optimalizálás során kapott eredmények kultúrált és egyszerű kinyerésére.
Sajnos ez a platform kötöttsége – ezt áthidalni meglehetősen körülményes, nekem még nem volt annyi életkedvem hogy megoldjam.
Tehát akkor csak úgy oldható meg, hogy optimalizáció közben egyes lefutott tesztek adatainak kinyerésére meg kell írni a kódot és külön-külön fájlban tárolni? Akkor is csak úgy lehet megoldani, ha teszt időszak utolsó vagy utolsó előtti napján kiírom a globális változókból az általam gyűjtött adatokat? Nem lehet hozzáférni a MT bizonyos számításaihoz?
Az MT saját számításaihoz nem férsz hozzá. Lehet, hogy Win32 trükkökkel igen de az már nem natív megoldás.
A deinit() részben a saját kigyűjtött adataidat természetesen eléred, hiszen minden egyedi teszt végén a deinit le fog futni.
Ohh tényleg! Nagyon sokat segítettél, köszönöm szépen! :-)
Elhatároztam, hogy megcsinálom. Elképzelésem az, hogy egy csv file-ba írja ki. A számításokat a gyertyák utolsó percében hajtsák végre. És mivel az optimalizálás során az éppen aktuális teszt sorszámát nem ismerem, a lokális idővel lehet majd sorba állítani. A szokásos teszt-végi adatok lesznek kiszámoltatva. Egyetlen függvény lesz külön headerben+a deinit().
Amennyiben elkészül meg szeretném osztani itt, ha van rá mód (az egyértelmű bemásoláson kívül).
Ez a terv, de ötleteket és tanácsokat szívesen veszek bárkitől. :-)Az alapot meg is csináltam…kiírja, minden tesztet (optimalizáció közben is) új sorba. Jöhetnek az új ötletek. :-)
Van egy rossz hírem: a lokális idő backtesztben megegyezik a szimulált szerveridővel, így az mindig ugyanaz lesz a deinitkor.
Folyamatosan növekvő szám a fájlnévben megteszi, amit a fájlnévből kiolvasva tudsz ellenőrizni és növelni.
Vendégposzt lehet belőle, ha gondolod – egyelőre nézzük meg, hogy mennyire univerzális amit kreálsz ;)
Hát igen, én is megfigyeltem a teszt során, ezért inkább kihagytam míg találok rá megoldást. A fájlnévben nem akarok számolni, mert az azt jelenti, hogy optimalizáció során minden egyes lefutott teszt új fájlt hoz létre. Az elképzelés, hogy dátum alapján hozza létre a fájlokat, esetleg kiegészítve az EA nevével (ez utóbbi EA név megint segítségednek köszönhetően pattant ki a fejemből: köszi!) .
Viszont úgy gondolom az beválhatna, ha (mivel sorokat számoló függvény nincs) csinálnék egy olyat, hogy az első sor a ‘0’ és ezt a sor végére írnám. Amúgy is a sor végére kell ugorni ahhoz, hogy a soron következő teszt eredményeit beírjam, így a végén ki is tudom olvasni, majd egyet felléptetni.
Amúgy eddig úgy fest, hogy nem a gyertyák végén számolgattam, hanem mindent a deinit()-ben. Így csak egyszer fut le és még véletlenül sem zavarja a kereskedést. Globális és külső változókat nem használ, hogy bármelyik EA-ba beilleszthető legyen.
Van esetleg ötlet, hogy mit lehetne még kiszámoltatni az alap tesztadatokon kívül, vagy esetleg hogyan lehetne a már meglévőeket jól kiértékelni? Esetleg van valakinek ilyenben tapasztalata? (gondolok grafikon, stb.)Nagyjából testet öltött külalakra is. A várt eredménynél valami nem jó, de még nem foglalkoztam vele.
A dátum a fájlnévnek dolgot is kipróbáltam többféleképpen, de létrejöttek olyan fájlok is, amik nem a szimuláció végén jöttek létre, így az adatok nem egyazon fájlba kerültek. Érdekes jelenség, nem tudom miért lehet. Szerintem marad az expert neve fájlnévnek. Csak ezzel az a baj, hogy ha az optimalizáció után módosítunk valamit és megint optimalizálni akarunk, akkor folytatja az előző szimulációs adatbázist. Jó lenne valami megoldás erre, ugyanis az emberi feledékenység (hogy átnevezze, vagy kimentse az előző optimalizáló eredményeit) miatt sok gondot okozhatunk magunknak.Elakadtam. Hogyan tudnám kiolvasni az utolsó sor végére kiírt integert? Sok mindent kipróbáltam már, de valahogy nem látom át, hogy ezek a fajta műveletek hogyan is működnek.
Köszi!Az MT a backtest során (nekem) 2-3 évre visszamenőleg végzi el a tesztet.
Kérdés:
Van-e mód arra, hogy a történelmi adatokat kibővítsem?
vagy
Van-e olyan internetes(web) szolgáltatás, ahova az [ea]-t feltöltöm, és leteszteli megadott paraméterekkel?Tehát létrehozza a fájlt, a tesztelési adatokat az adott tesztidőszak végén írja ki, egy sorban pontosvesszővel elválasztva. Létre akartam hozni egy utolsó bejegyzést a sor végére az éppen aktuális tesztelés sorszámával. Ezt az optimalizálás során a MT saját magának generálja és nem is lehet hozzáférni. Én úgy kívántam megoldani, hogy a címsorban elhelyezem a nullát, és mivel csak a tesztelés végén fut le, ezért kiolvassa az utolsó bejegyzést az utolsó sorban és azt megnöveli egyel. Az aktuális teszt sorszáma ez lenne.
A probléma ott kezdődik, hogy akárhogyan próbálkoztam, nem sikerült kiolvasnom az adott bejegyzést és nem is látom, hogy hogyan lehetne megtenni. Reméltem, esetleg te mint tapasztaltabb, tudsz ebben is segíteni nekem. :-)
Jelenleg ezt a részét hanyagoltam. Úgy áll, hogy a dátum a fájl névben azért volt jó ötlet, mert így csak azok kerülnek be a tesztidőszak utolsó napján amelyik rendesen végig tudott futni. Így véleményem szerint egy csomó negatív és fals pozitív eredménytől meg lehet óvni a létrehozandó fájlunkat. Ennek hátránya, hogy amikor össze kéne illeszteni a statisztikai adatokat az optimalizáció során változtatott bemenő adatokkal, akkor nem lehet pontosan megállapítani, hogy melyik-mihez tartozik. Ezért lenne fontos a sorszámozás.
más: Esetleg van rá mód, hogy az optimalizáció során változtatott bemeneteket kinyerjük? Ha jól sejtem nem, és marad a ctrl+c/ctrl+v.
más: A relative DD számítása a leírásod alapján nem volt egyértelmű (máshol nem igazán találtam képletet), ezért nem tettem bele. Ezt hogy is lehet pontosan meghatározni? A maximális lehívás leírásánál is túl bonyolult volt a képlet – sokat lehet egyszerűsíteni rajta. (már, ha jól értelmeztem a képlet elemeit)
Bocsi, hogy megint ilyen hosszú voltam!
Előre is köszi mindent!A fájlnévben szereplő szám automatikus növelését javaslom, a következő módon:
– a fájlneved utolsó eleme legyen a counter, a kiterjesztés előtt (tesztelesi_adataim-0.csv, tesztelesi_adataim-1.csv, stb.)
– egy ciklussal nullától leellenőrzöd, hogy az adott fájl létezik-e. Ha igen, akkor mész tovább, ha nem akkor pedig ez a szám lesz az aktuális fájlnévben és megszakítod a ciklust.Természetesen ebbe a megoldásba is bőven bele lehet kötni, de alapvetően szerintem a célnak bőségesen megfelel.
Az optimalizáció során változtatott bemeneti paraméterekkel kapcsolatos kérdésedet helyesen megválaszoltad :)
A maximális lehívás képletének egyszerűsítését megosztanád velem? Lehet, hogy kicserélném a cikkben is.
A relatív DD kiszámítása kapcsán: a lényeg, hogy az aktuális rel. lehívási százalékod a mindenkori egyenleg alapján számolódik, ily módon pozitív és negatív irányba is változhat.
-
SzerzőBejegyzés
- Be kell jelentkezni a hozzászóláshoz.