Forex programozás › Fórum › Kérdések az MQL4 programozási nyelvvel kapcsolatban › Alert beillesztése › Válasz erre: Alert beillesztése
A kondícióid jók, csak így használd (már ha kizárólag lezárt értékeket akarsz összehasonlítani, és gyertyánként csak egyszer):
if (DeMarkerBuffer[1] > 0.3 && DeMarkerBuffer[2] < 0.3) Alert ("DeMarker átlépte felfelé a 0.3-as szintet");
if (DeMarkerBuffer[1] < 0.7 && DeMarkerBuffer[2] > 0.7) Alert ("DeMarker átlépte lefelé a 0.7-es szintet");
Helyileg a második while lefutása után rakd be a kódot.
A többszöri jelzés azért történik, mert ugye most minden tickben teljesül a feltétel. Ezért be kell őt „zárni” egy időbeli ellenőrzéshez, hogy gyertyánként csak egyszer fusson le.
Kód fejlécébe (pl. double ExtMinBuffer[]; sor alá):
int
NextRun = 0;
Init végére (pl. SetIndexDrawBegin(0,DeMarkerPeriod); alá):
NextRun = int(Time[0]) + Period() * 60;
A második while után:
if (int(TimeCurrent()) >= NextRun) {
if (DeMarkerBuffer[1] > 0.3 && DeMarkerBuffer[2] < 0.3) Alert ("DeMarker átlépte felfelé a 0.3-as szintet");
if (DeMarkerBuffer[1] < 0.7 && DeMarkerBuffer[2] > 0.7) Alert ("DeMarker átlépte lefelé a 0.7-es szintet");
NextRun = int(Time[0]) + Period() * 60;
}
- A chartra helyezéskor (vagy idősíkváltáskor) az történik majd, hogy az aktuális gyertya + periódusnyi másodpercre állítódik a következő futás időpontja. Vagyis legközelebb csak az aktuális gyertya lezárulása után érkezhet jelzés legjobb esetben.
- Minden gyertya befejezésekor lefut az ellenőrzés az (akkor) két utolsó lezárt gyertyával kapcsolatban.
- Az ellenőrzés után kijelöljük a következő futás időpontját, így akadályozva meg a folyamatos alerteket.
- Ez egy gyors megoldás, de a célnak tökéletesen megfelel.