A MT4 platform lehetőséget biztosít optimalizációra, azaz több backteszt egymás utáni kombinált futtatására külső beavatkozás nélkül. Fontos tudni azonban, hogy milyen korlátozások vannak érvényben eme speciális tesztelési mód során, amelyek esetlegesen érintik robotjainkat.
Speciális funkciók a visszatesztelés során
- Néhány beépített függvény kimenet (output) nélkül kerül feldolgozásra. Ezen függvények: Sleep(), Alert(), SendMail(), PlaySound(), MessageBox(), WindowFind(), WindowHandle(), WindowIsVisible().
- Pozíciókat kizárólag a teszter kiválasztott instrumentumán lehet nyitni. Minden más instrumentumon indított kereskedési művelet eredménye hiba lesz.
- A lotméretek, a lot lépésköz, a jutalék és swap kondíciók az aktuális számla alapján kerülnek beállításra. A tesztelés megkezdése előtt mindenképpen érdemes ellenőrizni, hogy a MT4 kapcsolódva van-e egy számlához.
- Minden kamat, margin követelmény, lejárat és GTC (Good ‘Til Cancelled – teljesülésig/törlésig aktív függő pozíciók) modellezésre kerül. A tesztelés a kereskedési szerver alapján a lehető legpontosabban történik meg, ugyanakkor a keresztárfolyamok kapcsán előfordulhatnak számítási pontatlanságok, mivel a korábbi átváltási árfolyamok nem állnak rendelkezésre minden pillanatban.
- A piacon történő pozíciónyitás slippage (csúszás) nélkül kerül végrehajtásra.
- A nyitás/zárás slippage (csúszás) nélkül történik
- Számla stoppolódás – vagyis ha robotunk elbukja az induló tőkét – után a teszt megáll
- Heti, havi és nem gyári idősíkokon a tesztelés nem lehetséges
- A kiinduló tőke devizaneme változtatható, de az aktuális adatok alapján történik meg az átváltás
- Nincsen késleltetés a kereskedési műveletek kapcsán – vagyis minden kereskedési művelet azonnal teljesül (szemben a valósággal).
- A teljes Számlatörténet mindig elérhető, és nem függ a számla azt érintő beállításaitól
- Amennyiben más instrumentum vagy idősík adatát szeretnénk használni, elvárt azok letöltése a lehető legnagyobb időfelbontásig
- Minden tick” tesztelés során a teszter minden szükséges idősík adatát automatikusan letölti
- A MarketInfo() használata a teszttől eltérő instrumentumok esetén ERR_FUNCTION_NOT_ALLOWED_IN_TESTING_MODE(4059) hibát generál. A tesztelt instrumentum összes adata (spread, pontméret, stop szint, fagyási szint, stb.) azonban természetesen elérhető az aktív számla kondíciói alapján. Ez alól kizárólag a házilag konvertált, jó minőségű adatok a kivételek – ott a generáláskor kerülnek be a kereskedési kondíciók a visszatesztelési (FXT) fájlokba. (A későbbi futtatások során a korábban beégetett kondíciók véglegesek, amennyiben a teszteléshez szükséges feltételek adottak és az FXT fájl nem lesz felülírva.)
Speciális funkciók az optimalizáció során
- Semmilyen naplózás nem történik (még a Print() funkcióval sem). Ez a műveletek gyorsítása illetve a foglalt lemezterület megspórolása végett van így, elkerülendő a több száz megabyte-nyi adat kiírását.
- A kirajzolandó objektumok nem kerülnek kirajzolásra. Ez a műveletek gyorsítása érdekében történik így. Amennyiben az expert aktívan épít az objektumokra, az érintett funkciók optimalizáció során hibásan működhetnek majd – erre érdemes a tervezési szakaszban odafigyelni!
- A „Haszontalan eredmények kihagyása” funkció az alapértelmezés – a veszteséges eredmények alap esetben nem kerülnek megjelenítésre.
Szia Radu!
Szeretném megkérdezni mennyi a max optimalizálható változó egyszerre,illetve ha a teszter ablak bal alsó sarkában megjelenik pl :567/1280(32768)
akkor az azt jelenti,hogy eddig 567 teszt futott le a 1280-ból de a sok bekapcsolt változó miatt 32768 tesztnek kellene lefutnia akkor hogy számolja ki az 1280-at?
(a rossz eredmények eldobása be van kapcsolva)
Üdv:V
Ez egy nagyon jó kérdés, egyelőre nem tudom a választ sajnos.
Üdv!
Nincs korlátozás a maximálisan optimalizálható változók számát tekintve, tehát optimalizálhatsz egyszerre akár száz változóra is, a kombinációk számára kell figyelned. Ha genetikus algoritmust használsz optimalizálás során, akkor ~ 10.000 kombinációt engedélyez az MT4.
Az 567/1280 (32768) számsor a következő jelentéssel bír:
(32768): a kombinációk száma
1280: a genetikus algoritmus által meghatározott kombinációk száma figyelembe véve a változókat és azok lehetséges értékeit
567: az éppen aktuális kombináció
Genetikus algoritmus használata esetén előfordulhat, hogy ilyet látsz: 1400/1280 (32768), esetleg korábban befejeződik az optimalizálás 1157/1280 (32768). Nem kell megijedni egyik esetben sem, előbbinél az algoritmus még egy generációra optimalizál, utóbbinál úgy ítéli meg, hogy felesleges a következő generáció egyedei nem hoznak jobb eredményt.
Szia Radu,
optimalizációnál használható egy roboton belül az indikátoroknál több idősík. Pl egy órás rsi és ötperces rsi egyszerre? Azért kérdezem, mert azt tapasztaltam, hogy tesztelésnél a két idősík alapján fut le a dolog, azt csinálja amit kell, de optimalizációnál mintha a kisebb idősík beállítást nem használná/látná. Olyan végeredmények jönnek ki, mint olyankor amikor benne sincs a robotban az az idősík.
Üdv:Marci
Szia Marci!
Régebben volt esetlegesen olyan korlátozás, hogy csak a magasabb idősíkok voltak elérhetőek teszten belül. Fejből most nem tudom megmondani, hogy mikor volt ilyesmi.
Szerintem az idősíkok adatai elérhetőek, amennyiben rendelkezel az érintett idősíkokon is a megfelelő mennyiségű visszamenőleges adattal (ez nagyon fontos, mindenképpen ellenőrizd).
Ha bizonytalan vagy, csinálj egy egyszerű programot, ami kiírja mondjuk csv-be a gyanús idősíkok adatait, majd futtass le ezzel egy (egyszerűbb) optimalizációt. Írasd ki az extern paramétereket is a fájlba, így látni fogod, hogy léteznek-e az adott beállítású visszateszt példányában a kérdéses adatok.
Szia Radu!
Szeretnék tesztelni multi timeframe-es expertet.
Az adatokat a Tickstory-val (regisztrált) töltöttem le.
A robot M5-ön futna, de használna H1-es gyertya adatokat.
Konkrétan ezzel van bajom:
double close = iClose(NULL, PERIOD_H1, 1);
Ahogy elindul a backtest, egyből kap egy értéket a close változó, aztán soha többet.
Onnantól kezdve konstansként viselkedik és nem frissül többet.
A GetLastError() 0-át ad vissza mindig.
Van ötleted, hogy mi lehet a gond?
Üdv,
Zoli
Szia!
A TS által legenerált gyertyaadatokat bemásoltad a helyükre? Nekem úgy tűnik, hogy nem érhető el az érintett H1-es adat.
Elvileg rendben vannak.
A .fxt és a .hst is megvan az idősíkokhoz.
Akkor letöltöm újra, meg a cache-t is törlöm, hátha az segíteni fog :-)
OK! ;)
Szia Radu!
A kerdesem hogy mi korlatozhatja a megnyithato poziciok darabszamat egy eles szamlan illetve a metatrder 4 mennyi pozit tud kezelni egy idejuleg es menyi charton tudom futtatni a robotot egyidejuleg iletve hogyan befolyasolja a szamitogep teljesitmenye ezt elo kereskedesben?
Koszonom.
Szia Misi!
Éles számlán, valós időben a brókercég határozza meg, hogy legfeljebb hány darab élő ügylet (pozíció és megbízás) létezhet. A jellemző határértékek a 100 és a 200, utóbbinál magasabb értékkel még nem találkoztam.
A MT4 terminálban egyidejűleg legfeljebb 99 chart lehet párhuzamosan nyitva, és minél több chart létezik, annál több memóriát fogyaszt a terminál. 32 bites alkalmazás lévén nem tudja felhasználni a számítógép szabad memóriáját, csak legfeljebb 2 GB-ot. Tehát hiába van 12 GB szabad memóriád, egy MT4 folyamat legfeljebb 2 GB-t tud használni.
MQL4 programokból az összes nyitott pozíciót lehetséges kezelni, ezzel kapcsolatban kizárólag az erőforrás lehet a szűk keresztmetszet, vagyis érdemes az ügyletek feldolgozása során a lehető legoptimálisabban kezelni ezt a kérdést.