Hogyan lehet backtesztelni Metatrader4 alatt? I. rész - alapok és adatok

A Metatrader4 egyik leghasznosabb - ugyanakkor legkevésbé jól megtervezett - szolgáltatása az ún. backtesztelés, vagy magyarosabban visszatesztelés. Ez lényegében egy robot - vagyis az abba beleprogramozott stratégia - visszamenőleges adatokon történő tesztelését és kiértékelését jelenti.

Korábban a jó minőségű adatok kapcsán már több cikket publikáltam, azonban az "alap" MT4 képességeiről viszonylag keveset írtam. Ez a kétrészes bejegyzés erről a témáról szól majd.

Ebben a cikkben az alapokról és az adatokról lesz szó, amelyek a backtesztelés során felhasználásra kerülnek. A második részben pedig maga a backtesztelés kerül górcső alá: azaz hova kell kattintani, mit mikor kell beállítani, stb.

A cikkben pár kapcsolódó témakört belinkeltem a szövegbe; azokat a korábbi leírásaimat is érdemes elolvasni.

Műszaki és stratégiai viselkedés

A robotok működése kapcsán érdemes különválasztani a műszaki és stratégiai viselkedést.

Stratégiai viselkedés: ez magáról a tőzsdei stratégiáról, elméletről és annak helyes alkalmazásáról szól. Magyarul:

  • Alkalmas ez a stratégia az éles számlán való kereskedésre? Ismert a működésének alapja, koncepciója, a paraméterek hatása a stratégiára?
  • Ha technikai elemzésre - azaz indikátorokra, gyertyaalakzatokra, stb. - alapszik a stratégia, akkor ezek megfelelő kockázattal képesek működni az adott számlán/virtuális környezetben?
  • Ha matematikai elméletre - azaz pl. grid/martingale elképzelésre - alapszik a stratégia, akkor elegendő tőke és megfelelő környezet áll majd rendelkezésre az éles futtatáshoz?
  • Megfelelően kezeli a stratégia a menet közben felmerülő költségeket (spread, jutalék) és a számla kondícióival kapcsolatos kötöttségeket (minimum távolság a megbízások kapcsán, fagyási szint, stb.)

Műszaki viselkedés: ez az egyes funkciók helyes informatikai végrehajtásáról szól. Magyarul:

  • Helyesen működnek a robot alapját képező indikátorok? Vagyis: ugye nem rajzolják újra a saját jeleiket?
  • Helyesen - vagyis a megadott stratégia szerint - köt a robot?
  • A kötések szándékosan, vagy véletlenül nyílnak meg ott, ahol?
  • Jól méretezi a nyitandó pozíciókat a robot?
  • Mit tesz a program abban az esetben, ha egy-egy paramétert rosszul ad meg a felhasználó?
  • A robot képes-e felismerni a korábban nyitott saját pozícióit?
  • A robot megfelelően értesíti a felhasználót a fontos történésekről?
  • A robot helyes információkat közöl a kijelzésen keresztül? (Ha van egyáltalán kijelzése...)

Fontos!
Az olyan robotokat, amelyek a fenti két szempontrendszer kapcsán akár egy pontban  is elvéreznek nem ajánlott sem éles, sem demó környezetben alkalmazni.

A visszatesztelés célja

Az alapvető cél egyértelműen az, hogy egy meghatározott időszakra kiderüljön, hogy ott - körülbelül - mi lesz a stratégia által végzett kereskedési műveletek eredménye. Fontos tisztázni azt, hogy a visszatesztelés által mutatott eredmény semmiképpen nem jelent garanciát a jövőbeli eredményekre. Ennek lehetséges okai:

  • a múltbéli piaci mozgások közel sem biztos, hogy hasonló módon zajlanak majd le a jövőben
  • a robot más módon viselkedik egy szimulált burokban, mint a valós idejű futtatás során. Előfordulhat például az, hogy műszaki szempontból rosszul van elkészítve, vagyis a múltbéli adatokon való jó (vagy elégséges) működés egyáltalán nem garancia a valós időben felbukkanó esetleges problémák helyes kezelésére. A visszatesztelés során például nincs olyan árfolyammozgás, amit a robot ne tudna lekereskedni; ugyanakkor valós idejű futtatás esetén egy-egy piaci rallyban bekövetkező heves árfolyammozgás folyamán bekövetkező cselekvések közel sem biztos, hogy a megfelelő ellenőrzési és javítási módszerekkel kerülnek alkalmazásra.
  • a visszamenőleges adatokban kisebb-nagyobb hézagok (gapek) vannak, ami a pozíciók eredményeit pozitív/negatív irányban befolyásolhatja
  • változó spread esetén érdemes odafigyelni arra, hogy alapvetésként a MT4 a visszateszt során a legutoljára érvényes piaci spreadet (vételi-eladási árfolyamkülönbséget) alkalmazza a teljes tesztidőszak alatt. Ennek kifejezetten hétvégi tesztelés esetén van jelentősége: ha az ember a stratégiai teszter panelen a Spread megadásakor az Aktuális lehetőséget választja, a MT4 a legutoljára beérkezett piaci spreadet fogja alkalmazni. Amennyiben ez a pénteken, piaczáráskor beérkezett adatot jelenti, akkor valószínűleg nagy méretű spreadet eredményez majd, ami az egész tesztelés eredményét kedvezőtlenül befolyásolhatja.
  • figyelni kell a legkisebb elmozdulási egység jelentőségére: a MT4-ben - backteszt során - a spreadet mindig pontban kell megadni. Azaz FOREX instrumentumokon például egy 2 pipes spreadet 20-ként kell beírni a mezőbe, függetlenül attól, hogy az adott robot a távolságadatokat hogyan várja el bemenő paraméterként.

A múltbéli adatok

A tesztelés természetesen csak visszamenőleges - azaz már megtörtént - adatokon (gyertyákon) történhet meg. Ezeknek az adatoknak a forrása lehet maga a MT4, de lehet külső forrás is.

A Metatrader4 terminál legfontosabb korlátai, amelyeket nem - vagy csak körülményesen, "házi" megoldással - lehet átlépni:

  • visszatesztelés egyszerre csak egy instrumentumon történhet; ha tehát van egy robotunk, ami egyszerre szeretne EURUSD és GBPUSD pozíciókat kötni, csak az egyik instrumentum környezetét fogja a szimulált teszt során megkapni; a másik instrumentum összes lekérdezett adata nulla lesz a teszt során
  • a terminál csak a múltban lezárult gyertyák OHLCV (Open, High, Low, Close, Volume - nyitóár, legmagasabb ár, legalacsonyabb ár, mennyiség) adatait őrzi
  • a múltból kizárólag a Bid árfolyam változásait tudjuk lekövetni, az Ask árét nem; ennek az az oka, hogy kizárólag a Bid OHLC értékeket tárolja a Metatrader
  • a legjobb esetben is csak perces (M1) gyertyaadatok állnak rendelkezésre a múltból; a program a tesztelés megkezdésekor az összes rendelkezésre álló adat alapján, egy belső számítási képlet segítségével véletlenszerű generálással hoz létre egy, a valóságra távolról hasonlító árfolyam mozgást
  • minél rosszabb a rendelkezésre álló adatok minősége, annál rosszabb minőségű lesz az a visszatesztelési környezet, amelyen robotunk tesztje futni fog
  • ez azt jelenti, hogy egy-egy gyertyában más árfolyammozgást fogunk a robotunkkal szimulálva megélni, mint azt a valóságban tettük volna - például a valóságban egy M1-es gyertyában a stoploss szintet 12:33:05 másodperckor érte el az árfolyam, a tesztben azonban 12:33:45-kor történik meg a szimuláció szerint. Ez nem tűnik nagy eltérésnek, de magas pontosságot elváró rendszereknél ez akár kardinális különbségeket is jelenthet.
  • a tesztekben egyáltalán nincs példa a valóságban sokszor előforduló jegyzési problémákra - például nincsen csúszás (slippage) vagy más áron történő teljesülés. A visszatesztben gyakorlatilag minden a lehető legjobb forgatókönyv mentén teljesül.

Gyertyák (oszlopok) száma

A chartokban megjelenített gyertyák - oszlopok - száma függ egy központi beállítási értéktől, melyet az Eszközök > Beállítások > Chartok fülön találunk meg.

  • A Max oszlop a múltban beállítási lehetőség jelentése: ennyi darab gyertya értékét őrzi visszamenőlegesen a Metatrader4 az egyes idősíkok kapcsán a merevlemezen. Egy chart bezárásakor maximum ennyi darab gyertya adata lesz letárolva.
  • A Max oszlop a chartban beállítási lehetőség jelentése: egy charton maximum ennyi darab gyertya lesz megjelenítve. Például az indikátorok értékeinek számításakor ennek a paraméternek nagy jelentősége van, hiszen ha ez az érték extrém magas, az indikátori értékek kiszámítása több időt vehet igénybe - emiatt egy erős(ebb) számítógép is belassulhat. Egy chart megnyitásakor maximum az itt megadott darabszámnyi múltbeli gyertyát fog letölteni a MT4, azonban a folyamatos futtatás közben beérkező árváltozásokkal létrejövő új gyertyák miatt ez a szám túlléphető.

Amennyiben azt szeretnénk, hogy a lehető legtöbb múltbéli gyertya látszódjon a charton, javasolt a két szám nagyobb értékre történő átállítása. A legnagyobb megadható szám 2 147 483 647, de érdemes megnézni a Múltbéli adatok panelen az érintett instrumentum M1-es gyertyáinak számát (lásd az alábbi képet), és ahhoz az értékhez közeli számot megadni.

Múltbéli gyertyák száma

Múltbéli gyertyák száma

Bármely érték változtatása után javasolt az összes chartot bezárni és újraindítani a Metatrader4-et.

A múltbéli adatok forrása

A források lehetnek:

  1. a brókercég saját szervere, ahol az aktuális kereskedési számla van
  2. a MetaQuotes, vagyis a Metatrader4 terminál gyártó cégének szervere
  3. külső forrás; például az itt a blogon már sokszor említett és körbejárt jó minőségű (99%-os) tick- és gyertyaadatok.

Sorra bemutatom az egyes lehetőségeket, hogy látszódjon a köztük lévő különbség.

A múltbéli adatok forrása: a brókercég saját szervere (1)

Ebben az esetben a chartok alapjául szolgáló gyertyák - amelyekről fentebb már írtam - az adott brókercég szerveréről töltődnek le. A letöltődés kétféleképpen történhet:

  1. egy MT4-et bekapcsolva hagyunk két hétig; ekkor - optimális esetben - az indítástól kezdve két héten keresztül minden ár rögzítésre kerül. Itt is igaz az a tény, hogy kizárólag gyertyaadatok kerülnek rögzítésre, azaz az árfolyam tényleges mozgása nem. Nyilván múltbéli adatokat nem tudunk "kivárni", ezért a 2-es opció az igazi megoldás.
  2. kikapcsolva az Automatikus görgetés (Auto Scroll) funkciót, visszapörgetjük a chartokat addig, amíg csak lehet. Ezáltal a Metatrader4 letölti a brókercég szerveréről azokat a gyertyaadatokat, amelyek az adott cég szemszögéből mutatják a piaci mozgásokat.

A módszer rendkívül primitívnek tűnik - és valljuk be, az is. A professzionális tesztelőszoftverek megoldásaihoz képest meg lehet mosolyogni ezt az utat, ugyanakkor sokszor ez a módszer tűnik a legjobb bejárhatónak az összes MT4-es lehetőség közül.

Adatok letöltésének módja:

  1. a Gyertyák (oszlopok) száma bekezdésben leírt beállításokat minél nagyobb számra érdemes állítani
  2. meg kell nyitni a kérdéses instrumentumot (pl. EURUSD)
  3. ki kell kapcsolni az Automatikus görgetés funkciót
  4. a Home / Page Up gombot sokszor nyomogatva az adatok előbb-utóbb letöltődnek és folyamatosan egyre régebbi időpontig jutunk el a múltban
  5. ugyanezt minden idősíkon (!) el kell végezni!

A múltbéli adatok forrása: a MetaQuotes cég szervere (2)

Ekkor a MetaQuotes szerveréről tölthetünk le egységes adatokat. Ennek hátránya az, hogy az értékeknek semmi közük nincs a brókercégnél megtörtént árfolyammozgásokhoz.

Előnyök:

  • viszonylag könnyen elérhetőek az adatok
  • viszonylag gyorsan letöltődnek a számítógépre

Hátrányok:

  • az adatok minősége gyakran borzasztóan rossz
  • komplett időszakok kimaradnak, sokszor ok nélkül (pl. egy nap, negyed óra vagy akár egy egész hét hiányzik; augusztus 5. után november 1. következik)
  • amennyiben az instrumentum, amelyre kíváncsiak vagyunk előtagot vagy utótagot tartalmaz - pl. nem EURUSD a neve, hanem EURUSDpro - akkor ez a lehetőség kompletten kiesik, lévén hogy a MetaQuotes szerverén csak a klasszikus FOREX instrumentumok érhetőek el, azok is csak elő- és utótag nélkül.

Adatok letöltésének módja:

  1. Nyisd meg az Eszközök > Múltbeli adatok menüt, vagy nyomd meg az F2 gombot
  2. keresd ki a kérdéses instrumentumot
  3. nyomd meg a Letöltés gombot
  4. a letöltés befejeződése után nyomd meg ismét a Letöltés gombot
  5. a "Nincs új adat ehhez az instrumentumhoz. Újra akarod generáltatni az összes idősík adatát?" kérdésre nyomj Igent.

Az alábbi képsorozat a fenti folyamatot illusztrálja. Az adatok letöltése után böngészhető az összes idősík adata (előtte is, csak kevés adat lesz meg alapértelmezésként).

Múltbeli adatok (1)

Múltbeli adatok (1)

Múltbeli adatok (2)

Múltbeli adatok (2)

Múltbeli adatok (3)

Múltbeli adatok (3)

Múltbeli adatok (4)

Múltbeli adatok (4)

A múltbéli adatok forrása: külső források (3)

Külső adatforrást is igénybe vehetünk, ha a fenti két megoldás nem biztosít megfelelő minőséget a visszateszteléshez. Amennyiben például rendelkezésedre áll jó minőségű perces adat és nincs feltétlen szükséged tick minőségű adatokra, akkor azt a Múltbéli adatok panelen az Import gomb megnyomásával beillesztheted a terminálodba. Az importálás során figyelni kell arra, hogy:

  • kizárólag vesszővel elválasztott értékek (csv) típusú fájlból tudunk adatokat beolvasni
  • helyes legyen az oszlopok sorrendje: Idő - Nyitóár - Legmagasabb ár - Legalacsonyabb ár - Záróár - Mennyiség.
  • megadható annak a sornak a száma, amely felesleges számunkra (pl. a fejléc)
  • megadható annak az oszlopnak a száma, amely felesleges számunkra
  • ez a panel kizárólag gyertyaadatok importálására alkalmas; ne próbálj vele tick adatokat importálni, mert arra külön megoldást kell alkalmaznod!
  • a megfelelő idősíkot kell kiválasztani, majd az Importál gombra kattintva a már előkészített idősík adatokat betölteni;

A különböző külső adatforrásokról ezen az oldalon írtam korábban.

Az egyik legnépszerűbb adatforrás a Dukascopy brókercég által biztosított adathalmaz. A Tickstory Lite programon belül a Mentés fájlba lehetőségen belül lehet megadni, hogy milyen formátumban szeretnénk kiexportálni ezeket az adatokat. Érdemes az Általános gyertyaformátum (vesszővel tagolt) formátumot választani - lásd ezt az alábbi képen:

Gyertyaadatok exportálása Tickstory-ból

Gyertyaadatok exportálása Tickstory-ból

A Tickstory Lite-ból történő exportálásnál és a Metatrader4-be történő importálásnál is figyelni kell arra, hogy mely idősíkkal akarunk éppen dolgozni. Szabályos idősíkok: M1, M5, M15, M30, H1, H4, D1, W1, MN. Ezen kívül nem érdemes mással próbálkozni az importálás kapcsán. (Kivéve, ha tudod mit csinálsz!)

Amennyiben az összes idősíkon elvégezted az importálást, kifogástalan minőségű gyertyaadataid lesznek az adott instrumentum összes idősíkján. Ha megnyitod az érintett instrumentum idősíkjait új chartként, a frissen beimportált adatokat kell látnod. Ha ezek után visszatesztet indítasz, akkor a MT4 a megadott időszakra ezen adatok - és a korábban említett véletlenszerűséget alkalmazó képlet - felhasználásával hozza majd létre a visszateszt környezetét. Ez a minőség a legtöbb stratégiához elegendő lehet.

Ha minden árfolyammozgást (ticket) - lehetőség szerint - a legvalósabb mozgás alapján akarsz modellezni, akkor viszont a tick minőségű adatokra van szükséged. Mivel a Metatrader4 a visszateszti környezetet a Start gomb megnyomásakor generálja, ezt a műveletét kell letiltani-ellehetetleníteni ahhoz, hogy az általunk házilag létrehozott visszateszti környezetet olvassa be és használja. Erről a módszerről külön cikkekben írtam már korábban, kiindulópontként ezt az oldalt javaslom. Az oldalt a jövőben frissíteni és aktualizálni fogom majd.

Folytatás

A cikk 2. részét ide kattintva olvashatod el.

Lájkold és oszd meg ezt a cikket annak érdekében, hogy lássam a téma iránti igény mértékét!

Oszd meg, ha hasznosnak találtad!

3 hozzászólás a(z) “Hogyan lehet backtesztelni Metatrader4 alatt? I. rész - alapok és adatok” bejegyzéshez

  1. Visszajelzés: A backtesztelésről - II. rész | Radu MetaTrader blogja

  2. Szia Radu !
    Néhányszor látok eladó robotok web oldalán 99%-os backtest eredményeket. Ha jól értettem a cikkedet, valószínűleg ez sem túl erős biztosíték a profitos működésre bármely brókert is választom ( kivéve esetleg a Dukascopyt), mert ezen backtestek adatainak sincs közvetlenül köze más brókeréhez. Igy a backtest kizárólag a robot működőképességét bizonyitja és nem a profitosságát ! Igy a profitos működés ellenőrzése kizárólag live számlán ( mert sok esetben a demóadatok is eltérnek a live szerver adataitól )lehetséges, de az is csak az adott bróker számlájára érvényes. Jól gondolom ?

    • Szia cipmq!

      Pontosan! Az már egy jó jel, hogy ha a robot - a környezeti adatok szempontjából megfelelően beállított - visszatesztben profitos. A kereskedési és üzemeltetési tapasztalat azonban valóban a valós idejű futtatásnál elengedhetetlen ahhoz, hogy hosszabb távon bármilyen stratégiával tartósan profitos maradon a kereskedő.

MINDEN VÉLEMÉNY SZÁMÍT!