Forex programozás › Fórum › Kérdések az MQL4 programozási nyelvvel kapcsolatban › Indikátor meghívása
-
SzerzőBejegyzés
-
Sziasztok,Azt szeretném kérdezni, hogy ha egy iCustom(…) indikátort hívogatok, akkor annak az init() metódusa mindig lefut?
Tehát, ha egy EA-ból bizonyos feltételek esetén meghívom a saját indikátort, akkor újra és újra le fog-e futni az init-je?
És miután lefutott a strat(), azután „kilövi” magát?
Ez nem teljesen világos, mert egy olyan indikátornál, amit ráhúzok a chart-ra, annál világos, hogy 1x lefut az init(), majd vmikor pedig a deinit() és közben, ha érkezik tick esemény, akkor pedig a start().
Köszi!Elvileg minden egyedi beállítású első iCustom hívás esetén fut le az adott indikátor initje.
Magyarul ha van egy indikátorod, amit 10, 20, 40 beállításokkal hívsz meg, aztán pár sorral lejjebb 10, 20, 50 -nel hívod meg akkor ez két init -et jelent. Az expert futtatása során újra nem fut le az indikátorok initje, akárhányszor is kérdezed le újra az értékeket.
Ettől függetlenül láttam már ellenpéldát is, amikor minden iCustom esetén újra és újra lefutott az init, de hogy miből adódhat a különbség – na arra nincs ötletem.Köszi Radu!
Ezek szerint, ha azt akarom, hogy minden egyes híváskor lefusson az init() is, akkor egy „kamu” paramétert még átadok híváskor (pl: TimeCurrent()), ami biztos hogy mindig más lesz, és akkor le fog futni :-)Igaziból azért kellene, mert három indikátort akarok egybe összevonni (hogy kényelmesebb legyen), viszont mindháromnak más-más bufferei vannak, és azt, hogy éppen melyek kellenek, azt az init()-ben dönteném el.Nem teljesen világos, hogy pontosan mit akarsz de ettől még persze, működhet :D
Van 3 indikátorom (saját fejlesztés), amit használok. Gondoltam egybe gyűröm őket, hogy ne legyen annyi fájl, a könnyebb kezelhetőség végett. Egy plusz paraméterrel különböztetem meg, hogy éppen melyik értékeire vagyok kíváncsi (meg plusz egy az egyediség miatt, amit említettél).
Hátránya, hogy mindhárom indikátor bemenő paramétereit most fel kell sorolni, de szerencsére nincs sok bemenő paraméter (van aminek nincs is). Az init()-ben a típustól függően dől el, hogy melyik buffereket fogom tölteni. Ezért fontos, hogy az init() lefusson mikor meghívom. Arra vigyázni kell, hogy ha több buffer is van, ami tartalmazni fog értéket, akkor azokat ugyanazzal a TimeCurrent()-el hívjam meg, hogy ne legyen elcsúszás. Meg így nincs olyan sok hálózati kommunikáció (mert nem 2x fut le).
datetime currentTime=TimeCurrent(); signal[0]=iCustom(NULL,0,"indikátor neve",TYPE_1,currentTime,...,0,0); signal[1]=iCustom(NULL,0,"indikátor neve",TYPE_1,currentTime,...,1,0);
Üdv,
-
SzerzőBejegyzés
- Be kell jelentkezni a hozzászóláshoz.