Forex programozás › Fórum › Kérdések az MQL4 programozási nyelvvel kapcsolatban › IsTesting() indikátorban
Címkézve: indikátor, vizuál teszter
-
SzerzőBejegyzés
-
Olyan indikátort készítek, ami a felettes gyertyákat is használja, ezért teszter módban az aktuális (nulladik) felettes gyertyák értékei nem jók, mert már a lezárt gyertya értékeket tartalmazzák. És ezen értékek az adott tick időben még nem voltak ismertek.
Az indikátor futása közben meg kéne állapítani, hogy teszter vagy nem teszter módban fut. Sajnos az IsTesting() beépített függvény az indikátorokban minkét esetben false értéket ad vissza.
Hogyan lehet indikátorban megállapítani a futási módot?Részben értem csak az általad leírtakat.
Mit értesz egyébként „felettes” gyertyák alatt? A lezárt gyertyákra gondolsz? Ha leírod, hogy pontosan mit szeretnél (részletesebben) akkor megpróbálok segíteni.
Az indikátorból szerintem nem lehet megállapítani azt, hogy éppen vizuál teszterben használod-e vagy nem.
Van egy multi timeframe indikátor, ami az iMA(NULL,PERIOD_D1,50,0,MODE_SMA,PRICE_CLOSE,0) értéket használja. Most 2012.08.20 19:40 van. Ha például múlt heti adatokon tesztelek M1-es charton, akkor az iMA(NULL,0,50,0,MODE_SMA,PRICE_CLOSE,0) a régi értéket adja, de az iMA(NULL,PERIOD_D1,50,0,MODE_SMA,PRICE_CLOSE,0) a mostani értéket.
Teszt módban az expert és az indikátor esetében nem egyformán állítja be a gyertya tömböket az MT4. Expert esetén minden idősík gyertya tömbje kb.: 1000-el indul, és mindegyiket aktualizálja a tickek pillanatában. Viszont az indikátorokban csak az aktuális idősík gyertya adatai frissülnek, a többi marad a teszt előtti (kb.:65000)
Emiatt ha az indikátor egy függvényt nem aktuális idősík paraméterrel használ, teszt módban nem ugyan azt az értéket adja, mint amit ugyanakkor nem teszt módban adott. Lezárt (nem [0] indexü) gyertyák esetén az iBarShift függvénnyel tudom korrigálni. De az utolsó gyertya esetén ez sem jó, itt el kéne a kódnak ágazni teszt módtól függően. pl.: if(isTesting()) { …tesztmód… } else { …éles… }
Értem. Sajnos nincs ötletem az IsTesting() indikátorban történő alkalmazására – az indikátorok vizuál tesztkor történő használata valóban egy eléggé elb*szott valami…
Szia Radu! Kösz a választ. Egy kiegészítő kérdésem van. Még csak két hónapja kezdtem el foglalkozni az MT4 programozással, 20 év programozási tapasztalattal. Szeretek minden lehetőségről, korlátról magam meggyőződni. Így akadtam ebbe a problémába is. Találtam egy megoldást, csak azt nem tudom, hogy ez mennyire függ az aktuális MT4 klienstől. Az indikátor init() függvényben lekérdezem a gyertyák számát:
bool tesztmod = false; int init() { if ( Bars == 0 ) tesztmod = true; // ... }
Ez az én brókeremnél működik. De vajon szabad ilyesmire alapozni egy kódot? Vagy egy alternatív megoldás lehet, hogy extern paraméterként a felhasználótól kérem be, hogy hol használja az indikátort.
Igen, szabad. Hál’Istennek a brókertől lekérdezhető környezeti értékek tekintetében egységes a MT4.
A MarketInfo értékeinek feldolgozása néha trükkös lehet – rájönni a szűkös doksiban lévő leírás alapján mindenre – de ezen kívül a beépített előre definiált változók kezelése minden terminálban ugyanaz.
Én amikor csak lehet mellőzőm a felhasználótól bekért adatokat (a műszaki működéshez szükséges adatok kapcsán legalábbis). Nagyjából majdnem mindent automatizálni lehet egy kis logika és a lekérdezhető értékek segítségével.
-
SzerzőBejegyzés
- Be kell jelentkezni a hozzászóláshoz.