Jó minőségű adatok előállítása

Kedves látogató!

Ennek az oldalnak a tartalma már idejétmúlt.

Ide kattintva eljuthatsz a 2017-ben frissített  Jó minőségű adatok tartalomhoz.

Több cikk szólt már itt a blogon a pontos adatok beszerzésének és használatának folyamatáról, de most itt az idő hogy bejelentsem: új és egyszerűbb mód nyílik erre!

Az eredeti cikk írója új információkat közölt saját blogján, melyet ismét “magyarítok”. Ez azt jelenti, hogy a fordítás mellett saját tapasztalataimmal is kiegészítem az anyagot.

Szeretném felhívni azon olvasók figyelmét, akiknek az előző cikksorozat során esetlegesen kudarcélménye volt vagy problémája akadt, hogy az új út az adatokhoz lényegesen egyszerűbb és könnyebben kivitelezhető, mint az eddigiek.

Frissített információk!

A témával kapcsolatban összefoglaló oldalt itt találsz. Ez az oldal tartalmazza majd az új frissítéseket, információkat a jó minőségű backteszt adatok készítésével és alkalmazásával kapcsolatban!

Összefoglalás

Azoknak, akik még nem olvasták el a korábbi cikkeket azt javaslom, legalább fussák át az alábbi cikkeket:

Pontosabb adatok használata a backtesztek során – ez a cikk arról szól, hogy miért jobb pontosabb adatokkal tesztelni, mint amiket a MetaTrader History Centere alapból biztosít. A letöltéstől a php-val történő konvertáláson át a felhasználásig egy vagon információt tartalmaz a cikk. A mostani cikkben részben ezen információk kiegészítése, részben frissítése, részben más megoldások bemutatása történik meg.

Kiegészítés az egyénileg elkészíthető adatokhoz

Az eredetileg közölt cikk után új verzió jelent meg a 4-es MetaTraderből. A cikk erről, illetve a módosítható tőkeáttét lehetőségéről szól.

Betöltő 228 és 229 build számú MetaTraderhez

Mivel a betöltőprogramok egyedileg egy-egy verzióhoz készülnek, ezért a 228-as és 229-es verziók esetében működő betöltőket közöltem ebben a posztban.

Új módszer az adatok beszerzésére (egyszerűbb)

Akit a korábbi cikkekben olvasható php-s módszertől kiver a víz, annak szól az új poszt. A Dukascopy nevű brókercég saját kereskedési felületén lehetőség nyílik az egyes instrumentumok visszamenőleges adatainak letöltésére. Szerencsére a platform a fájlok összefűzését is megteszi helyettünk, így kvázi leegyszerűsödik egy lépés számunkra.

A Dukascopy platformjának neve: JForex. Ez egy Java alapú platform, azaz Java Runtime Environmentre mindenképpen szükségünk lesz a futtatáshoz.

Regisztráljunk egy demó vagy éles számlát! A bejelentkezési adatokat és a webcímet e-mailben kapjuk meg, szóval érdemes arra ügyelni hogy levelezőrendszerünk nehogy spamként kezelje a Dukascopy automatikus levelét.

Az automatikus levélben megkapott címen megnyitott oldalon kattintsunk a “JForex Demo Start” linkre! A kattintás után egy .jnlp fájl töltődik le, amire duplán kattintva elindul a java alapú kereskedési szoftver.

JForex belépési ablak

JForex belépési ablak

A belépési ablakba adjuk meg login nevünket és jelszavunkat, majd kattintsunk a Login gombra! Ha minden jól megy, kis idő múlva megjelenik a kereskedőfelület. Kattintsunk a Tools menüre, majd azon belül a Historical Tester Historical Data Managermenüpontra. Alul megjelenik egy új panel; minket csak ez a panel érdekel a továbbiakban (pirossal jelölve az alábbi képen)

JForex kezelőfelület és ezen belül a számunkra fontos panel

JForex kezelőfelület és ezen belül a számunkra fontos panel

Először válasszuk ki azt az instrumentumot, amely minket érdekel – akár többet is bejelölhetünk egyszerre.

A Date From és Date To mezőbe a naptár gombocskákkal megadható, hogy mikortól szeretnénk adatokat kapni (a legrégebbi dátum 2007. 03. 01. lehet, régebbit felesleges megadnunk mert csak ettől a dátumtól kezdve vannak adatok a szerveren.) A végdátum megadásakor lehetőleg ne a mai napot adjuk meg, mert ez esetben letöltési hibákba futhatunk bele, mivel a mai nap egy része értelemszerűen biztosan hiányzik. Az időperiódus kiválasztása után ügyeljünk arra, hogy a Data Type mezőben a “Ticks” legyen kiválasztva – hiszen tick pontosságú adatra van szükségünk. A Format (adatformátum) CSV legyen, a Date Format (dátumformátum) maradhat alapbeállítás (YYYY.MM.DD HH:MM:SS), a Delimiter mezőbe írjunk egy vesszőt. Az Export data to mezőbe pedig írjunk be egy elérési útvonalat, ahova szeretnénk hogy a fájlok mentésre kerüljenek.

Mindezek beállítása után nyomjunk a Start gombra, és fogadjuk el a felhasználási szabályzatot. Ha jól csináltuk, akkor kb. ezt látjuk:

Letöltés folyamatban

Letöltés folyamatban

Legyünk türelmesek, mert akár órákon keresztül is eltarthat a letöltés, főleg ha az ember több instrumentum több éves adatait kéri le. A folyamatjelző lassan, de eljut 100%-ig. A Messages panelt érdemes megvizsgálni, ha úgy érződik hogy valami hibába futottunk bele. Amennyiben “Downloading failed” hibaüzenetet kapunk, próbáljunk rövidebb időszakot megadni, vagy adjunk meg kevesebb instrumentumot.

Ha a letöltés befejeződött, a fájlt megnyithatjuk a megadott elérési út alatt. Alap esetben a Dokumentumok mappába történik a mentés.

Az így kapott csv kiterjesztésű fájlokra lesz szükségünk; ezeket konvertáljuk tovább MetaTrader számára emészhető formátumba.

Innentől kezdve gyakorlatilag használhatjuk az mql csomagban lévő JForex2FXT szkriptet. Figyeljünk arra, hogy ez szkript – habár paraméterei szinte azonosak – teljesen eltér a Dukascopy2FXT szkripttől. Utóbbit a php-vel letöltött adatok feldolgozásához, míg a JForex2FXT szkriptet a JForex platformmal generált csv fájlokhoz használhatjuk. A paraméterek azonossága miatt az eredeti leírás ide vonatkozó része még mindig stimmel, és fel is használható.

Amennyiben első alkalommal olvasol a pontosabb adatok beszerzéséről, folytasd az olvasást az “A folyamat lépései” bekezdéssel!

A régi módszer az adatok beszerzésére (bonyolultabb)

A cikk végén a JForexes megoldástól függetlenül frissített php csomag is letölthető. A csomag tartalma a következő:

  • download_dukascopy_data.php – az eredeti cikkben közölt módon működik. Az instrumentumok és időperiódusok megadása magában a php fájlban történik.
  • process_dukascopy_data.php – a letöltött fájlok feldolgozására szolgáló php szkript.
  • shell szkriptek – shell szkriptek a tömeges feldolgozás megkönnyítéséhez Windows és Linux rendszerek számára.
  • download_dukascopy_candle_data.php – csak gyertyaadatok letöltésére szolgáló php fájl. Az eredeti folyamathoz nem szükséges.

A további részleteket a korábbi cikkekben találjátok meg, azokra itt nem térnék ki újra. Amennyiben ezt a megoldást választod és készen vagy, akkor olvass tovább!

Az adatok használatát érintő változások

Az adatok betöltéséhez illetve konvertálásához használt eszközök is frissültek. Az alábbi listában olvasható változások főleg azoknak érdekes igazán, akik már eddig is próbálkoztak adatok beszerzésével:

  • exe betöltő csak akkor szükséges, ha egy MT4 telepítésből több példányt szeretnél egyszerre futtatni
  • a terminál felkészítése az egyéni adatokra most már egy egyszerű szkripttel történik. A “birt’s patch” szkriptet egy tetszőleges charton egyszer futtatva érhetjük el azt, hogy a terminál kezelje egyénileg készített adatainkat. Ez a szkript semmilyen maradandó változást nem okoz, viszont így terminálindításonként egyszer mindenképp le kell futattani tesztelés előtt.
  • most már lehetséges 2 GB feletti (max 4 GB) fájlok kezelésére, de csak Windows 7, Vista és Server 2003 alatt. Ez a funkció nem működik Windows XP alatt!
  • a változó spreades adatok már minden terminálban (225-229) használhatóak.
  • a korábbi változó spreades FXT formátum már nem használható. Az új változó spreades adatok generálása során a Volume adat helyére kerül ez az információ.
  • el lehet tolni a spreadet egy meghatározott értékkel
  • beállítható a brókeri jutalék
  • az FXT konvertáló szkriptekben a spread és a jutalék paramétere is pipben adható meg. Azaz ha az általunk megadott érték 2, akkor 4 vagy 5 tizedesjegytől függetlenül 2 pip lesz a spread.
  • a generált FXT fájlok alapbeállításként “csak olvasható” beállítást kapnak.
  • az új szkriptekkel generált FXT fájlok jóval kisebbek lesznek; nincsenek duplikált tickek, így a backtesztek is valamivel gyorsabbak lettek.

A folyamat lépései

Amennyiben már elkészültek a számodra fontos CSV fájlok – akár a JForex, akár a php segítségével – , a következő lépéseket kell megtenned:

  1. FXT és HST fájlok generálása a CSV fájlokból
  2. FXT & HST fájlok bemásolása a megfelelő könyvtárakba
  3. Szkript vagy futtatható betöltő használata annak érdekében, hogy az MT4 terminálban képesek legyünk egyénileg generált adatainkat használni

Lássuk a lépéseket részletesen!

1) FXT és HST fájlok generálása a CSV fájlokból

Ahhoz, hogy a CSV adatokból MT4 számára “ehető” – FXT és HST – fájlok legyenek, szükséged lesz egy szkriptre, amelyet a cikk alján letölthető “MQL szkriptek” csomagban találsz meg.

Attól függően, hogy az adatokat honnan szerezted, a következő szkriptekre lesz szükséged:

  • amennyiben JForex platformmal szereztél adatokat, akkor a  JForex2FXT szkriptet kell használnod;
  • amennyiben PHP szkripttel szereztél adatokat, akkor a Dukascopy2FXT szkriptet kell használnod;
  • a harmadik lehetőség – Oanda felhasználóknak – az Oanda2FXT, azonban ebben a leírásban bővebb információkat ezzel kapcsolatban nem tudok adni.

A konvertáláshoz a következő további lépéseket kell megtenned:

  • másold be az MQL csomag tartalmát az MT4 telepítési mappádba. Figyelj a megfelelő könyvtárstruktúrára, hogy minden fájl a megfelelő helyre kerüljön!
  • a tick adatokat (vagyis a CSV fájlokat) másold be az experts\files\ könyvtárba!
  • nyiss egy olyan chartot, amire adatokat akarsz készíteni (EURUSD.csv esetén egy EURUSD chartot; fontos, hogy a fájlnév .csv előtti része megegyezzen az instrumentum nevével)
  • válaszd ki a számodra fontos időfelbontást (pl. ha H1-ben szeretnél backtesztelni, akkor H1 időfelbontást válassz ki a charthon)
  • kattints duplán a JForex2FXT szkripten (vagy a Dukascopy2FXT szkripten, amennyiben php-vel szereztél adatokat) a Navigátor ablak szkript szekciójában
  • állítsd be a felugró ablakban a paramétereket:

CsvFile – ide nem kell semmit megadnod, ha a fájlnév megegyezik az instrumentum nevével; minden egyéb esetben add meg a konkrét fájlnevet

CreateHst – true megadás esetén nem csak a backteszt adatok, hanem a megjelenítéshez szükséges gyertyaadatok is legenerálódnak. Ezt elég egyszer megtenni; ha több időperiódusra generálsz backteszt adatot (M1, M5, H1, stb.), akkor is elég csak az egyik generálásnál true-ra rakni

Spread – megadhatod a kívánt spreadet. Amennyiben ezt a paramétert 0 értéken hagyod, akkor a bróker éppen aktuális spreadjét veszi alapul a szkript. Amennyiben változó spreadet szeretnél, hagyd nullán ezt a beállítást (lentebb tárgyaljuk a részleteket ezzel kapcsolatban) A spreadet mindenképp pipben add meg, szóval 2 pip az automatikusan 2 pip lesz mindenhol.

A StartDate és EndDate segítségével megadhatod, hogy mettől meddig terjedő időszakra szeretnél adatokat generálni a CSV fájlból (ÉÉÉÉ.HH.NN formátumban, pl. 2010.01.01) Amennyiben nem adsz meg paramétereket, akkor a CSV fájlban szereplő legkorábbi adattól a legutolsó adatig megy végig a generálás. A végső fájlméret limit Windows XP esetén 2, újabb Windows rendszereknél pedig 4 GB.

Amennyiben a UseRealSpread értéke true, a generálás folyamán változó spreadet fog használni a szkript. Ez azt jelenti, hogy a Dukascopy adatok alapján változó lesz a tesztjeidben a spread, amennyiben a későbbi betöltőben engedélyezed a változó spread használatat. Lehetőség van továbbá a spread “eltolásával” is, ezt a SpreadPadding paraméterrel adhatod meg. Amennyiben még jutalékot is szeretnél beállítani, a PipsCommission paraméterrel teheted meg.

Habár az eredeti szkriptben nincsen Leverage paraméter én beleraktam, így a tőkeáttét is megadható. Az alapbeállítás 500.

  • Ha mindent beállítottál (és ellenőriztél!), kattints az OK gombra. A konvertálás jellemzően 5-30 percet vesz igénybe, attól függően hogy milyen időtáv van megadva. Egyszerre több charton is dolgozhatsz de arra figyelj, hogy egy instrumentumon csak egy konvertálás tud zajlani egy időben. Amikor a konvertálás befejeződött, kapsz egy értesítést és egy hangjelzést.

Több probléma adódhat a kísérletezés folyamán. Amennyiben olyasmivel találkoztok, amit itt nem írok le, nyugodtan írjátok meg tapasztalataitokat a kommentek között!

Nem találom a fájlokat az experts\files\ könyvtárban!

Ha Vista  vagy 7 felhasználó vagy, és nem találod a fájlokat ebben a könyvtárban, akkor nagy valószínűséggel a virtualizáció miatt máshol lesznek. Próbáld a c:\ProgramData\ vagy a c:\Users\felhasználónév\AppData\Local\VirtualStore\Program Files\ könyvtárakon belüli keresést! Ha itt sem találod őket, akkor keress rá a gépeden FXT fájlokra. (erről a problémáról részletesen az utolsó előtti bekezdésben olvashatsz) A virtualizációt a “Felhasználói fiókok felügyelete” (User Account Control) beállításai között lehet kikapcsolni, ezzel kapcsolatban a Google segítségével lehet bővebb leírásokat találni.

A fenti probléma könnyen áthidalható, ha nem a c:\Program Files ill. c:\Program Files (x86) mappán belülre telepítve használjuk a terminált. A legoptimálisabb, ha más partícióra telepítünk. A lényeg, hogy kívül essünk a virtualizáció által érintett könyvtárakon!

Ordersend Error 131 hibaüzenet a robot naplójában

Ha backtesztelés közben azt tapasztalod, hogy a robot feltűnően hibásan köt, akkor elképzelhető hogy a MIN_LOT illetve a LOT_STEP brókeri beállítások hiányoznak a generált FXT fájlból. Mivel az FXT fájlban a legtöbb beállítást egy-két kivételtől eltekintve nem mi adjuk meg, azt a terminál a generálás során az aktuális brókeri szabályok szerint helyezi el a fájlba. Ezért nagyon fontos, hogy a generálás folyamán végig kapcsolódva legyünk terminálunkkal brókerünk szerveréhez!

A teszt elindul, de azonnal meg is áll

Ebben az esetben a napló a következő hibaüzenetet írja ki:

“TestGenerator: internal error because the file not opened”

Ez azt jelenti, hogy nem futtattad le helyesen a betöltőt (leírás lentebb), viszont az aktuális teszthez tartozó FXT fájlt a “csak olvasható” beállítás miatt nem tudta törölni a terminál. Az hogy a fájlok csak olvashatóra generálódnak, itt válhat igazán előnyössé:)

2) FXT & HST fájlok bemásolása a megfelelő könyvtárakba

.hst fájlok: a gyertyaadatokat tartalmazzák. Az history\, ezen belül a megfelelő <szervernév> könyvtárba kell őket másolni. Erre nagyon figyeljünk; ha például a bróker demo1.szerver.com szerverére vagyunk csatlakozva, akkor az ehhez passzoló könyvtárba másoljuk be a fájlokat. Mivel több szerver is lehet, ellenőrizzük alaposan hogy melyik a számunkra helyes!

.fxt fájlok: a teszter tick adatait tartalmazó fájlok. A tester\history\ könyvtárba kell őket bemásolni.

3) Betöltő használata

Először is tisztázzuk mit is jelent az, hogy “betöltő”. A betöltő (hm, angolul jobban hangzik, hogy loader) egy olyan szkript / program, ami a segít átírni a terminál egy rejtett beállítását annak érdekében, hogy az képes legyen az általunk generált adatokat használni.

Szkript alapú betöltő használata (ajánlott)

Egy szkript alapú betöltőt találsz az MQL csomagban, a neve: “birt’s patch”. Ez a szkript semmilyen maradandó változást nem okoz, viszont így terminálindításonként egyszer mindenképp le kell futattani tesztelés előtt. A szkript 225-229-es verziók esetében működik, de előfordulhat hogy egy-egy bróker magánakció keretében módosított termináljainál nem fog működni.

A szkript három olyan paraméterrel rendelkezik, ami befolyásolja teszteléssel kapcsolatos életünket:

NoFXTOverwrite – amennyiben true, a program backtesztelés során nem törli ki a meglévő FXT állományokat a tester\history\ könyvtárból. Ez létszükséglet a mi akciónkhoz.

Remove2GBLimit – alap esetben az FXT fájlok mérete 2 GB lehet. Amennyiben ez az érték true, ez a limit 4GB-ra növekszik. Figyelem! Windows XP alatt ez nem működik, ezért ott állítsuk false-ra!

RealSpread – ha értéke true, akkor változó spreaddel fog működni a teszt. Ez annyit jelent, hogy a spread nem egy globális beállításból származik majd, hanem az Ask és Bid árfolyamok közti különbséget fogja alapul venni a terminál. Csak akkor használjuk true beállítással ezt a paramétert, ha korábban változó spread módban generáltuk az adatainkat!

Tehát eddig elhelyeztük FXT fájljainkat valamint a birt’s patch szkriptet terminálunkba.Nyissunk egy tetszőleges chartot, és futtassuk le a szkriptet egyszer! Arra figyeljünk, hogy az Általános fülön a “DLL import engedélyezés” legyen, a “DLL function calls megerősítés” pedig ne legyen bepipálva!

Ezután a szkript lefut, és kezdhetjük a tesztelést. Az “Expertek” fülön ilyesmit kell látnunk:

2011.01.19 15:11:54 birt’s patch EURUSD,H1: MT4b226 detected. FXT overwriting disabled. Addresses patched: 0x5402D5, 0x5403F2, 0x5404FA.

Amennyiben a változó spread paraméterét true-ra raktuk, és később nem változó spreaddel szeretnénk tesztelni, a terminál újraindítása és a szkript újbóli futtatása szükséges!

A betöltő ezután megakadályozza, hogy a terminál minden teszt előtt újragenerálja az fxt fájlokat – ehelyett inkább a mi általunk odamásolt fájlokat használja. Figyeljünk arra, hogy a megfelelő instrumentumot és időperiódust válasszuk ki. A teszt végén a Jelentés fülön az adat pontosságának (Modelling quality) 99%-nak kell lennie. Ha nem ennyi, akkor valamit nem jól csináltunk.

Futtatható betöltő használata

Ezeket a betöltőket akkor érdemes használni, hogy ha egy terminál telepítésből több példányt szeretnénk futtatni. A félreértések elkerülése végett ez nem azt jelenti, hogy pl. több InstaTradert szeretnénk futtatni egy gépen – ez bármilyen betöltő nélkül is kivitelezhető dolog -, hanem hogy egy InstaTrader telepítésből egy időben több példány futtatását kívánjuk elérni. A különböző verziókhoz elérhető exe alapú betöltőket másoljuk a kívánt MT4 telepítés könyvtárába, és onnan akár többször is elindíthatjuk őket. A betöltő egy apró módosítással hívja be a terminal.exe-t, így lehetővé téve számunkra az egy könyvtárból való többes indítást.

Ha a fenti bekezdést nem érted, akkor számodra a szkript alapú betöltő a jobb megoldás.

Hogyan ellenőrizhető, hogy a pontos adatokkal sikerült a tesztelés, vagy nem?

Könnyen. Pár ötlet:

  • A teszt végén a Jelentés fülön a “Modelling quality” 99%
  • A teszt azonnal indul, nincs “Összegyűjtve: M1…”, “Felhasználva: M1”, stb. felirat
  • A tester\history könyvtárban lévő fájljaink méretei nem változnak.

Tesztelés változó spreaddel

Ha még pontosabb tesztelést szeretnél szimulálni, megpróbálkozhatsz a változó spreaddel. A fenti bekezdésekben erre már kitértem, de legyen erről is egy összefoglalás. Amit tenned kell, ha változó spreaddel akarsz kereskedni:

  1. FXT generáláshoz használd a legfrissebb (ezen cikk alján letölthető) FXT szkripteket
  2. Amikor adatokat generálsz, a Spread paraméter értéke 0, a UseRealSpread paraméter értéke true legyen!
  3. Tesztelés előtt a birt’s patch szkript futtatásakor a RealSpread paramétert állítsd true -ra!

Letöltések

A legfrissebb betöltőt és a témával kapcsolatos újdonságokat a Hasznos eszközök menüpont Jó minőségű tick adatok menüpontjában keresd!

Forrás

Köszönet Birtnek, aki az eredeti leírást és a betöltőket készítette. A szkriptekben csak a tőkeáttéttel kapcsolatos módosítást eszközöltem, ezen kívül gyakorlatilag megegyeznek az eredeti oldalon található csomagokkal.

A szkriptek licence GNU GPL, azaz a szkriptek szabadon terjeszthetőek és használhatóak, azonban bármilyen módosítás esetén ugyanilyen licenc formájában biztosítani kell a forráskód megtekinthetőségét.

Végszó

Bízom benne, hogy a hosszú leírás ellenére a folyamat végén egyszerűbbnek ítélitek meg azt, mint eddig. Nem mondom, hogy egyszerű végigmenni a feladatokon, de egy kis számítástechnikai tudással viszonylag gyorsan kivitelezhető a történet.

 

Kapcsolódó fórum

A kommentek helyett 2012. márciusától az ide kapcsolódó alfórumban tudtok új témákat létrehozni.

Radu.hu Fórum Kérdések az MQL4 programozási nyelvvel kapcsolatban

15 témakör megtekintése : 1-15 / 163
15 témakör megtekintése : 1-15 / 163

A hozzászóláshoz és az új témakörök létrehozásához jelentkezz be!