Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Problem: Endlosschleife bei Emailbenachrichtigung (http://www.expert-advisor.com/forum/showthread.php?t=4081)

Bucardo 10.02.15 19:53

Problem: Endlosschleife bei Emailbenachrichtigung
 
Hallo zusammen,

die Arbeit an meinem EA geht weiter und ich bin dank pako und traderdoc schon ein ganzes Stück weiter gekommen.

Ein wichtiger Baustein des EA soll eine Push-Benachrichtigung sein, die aktiviert wird, wenn eine Pending-Order erfüllt und die Order dann (mit SL oder TP) geschlossen wird. Ich bastel daran schon eine ganze Zeit dran rum. Über verschiedene Quellen habe ich mir den folgenden Code zusammengebastelt.

Sowohl die Orderauswahl, als auch die Bedingungen für die Benachrichtigung sind mir klar, mein Hauptproblem besteht darin, dass sobald einmal der TRigger ausgelöst wurde unendlich viele Emails gesendet werden. ZUr Abhilfe habe ich einen "Schalter" eingebaut (IsFirstEmail) der aber nicht wie erhofft funktioniert. Könnt ihr mir helfen?



static bool IsFirstEmail = true;
if(IsFirstEmail == true)
{
IsFirstEmail = false;
bool res1;

res1 = OrderSelect(ticket, SELECT_BY_TICKET);

if(res1 == false)
{
Alert("Error selecting order!");
}

else
{
if(OrderType() == OP_SELL)
{

Alert("Sell-Order aktiviert");

}
}
}

else
{
IsFirstEmail = true;
}

traderdoc 11.02.15 00:36

Prinzipiell läuft das tatsächlich über Schalter. Ich denke, in Deinem Falle
könnte das auf die Schnelle eine!! der Lösungen sein:
Die Bool-Variablen Schalter und Flag müssen an gegebener Stelle mit bool ... deklariert werden:

Code:

Schalter = false;
if (Triggersignal) {
  if (!Flag) Schalter = true;
} else Flag = false;

if (Schalter) {
  //EMail schreiben
  Flag = true;
}

D.h. liegt kein gültiges Triggersignal an, wird Flag immer false sein.
Liegt dann ein Triggersignal an, wird Schalter auf true gestellt und die Email geschrieben. Gleichzeitig wird das Flag true gesetzt, als Kennzeichen, dass die Mail abgesetzt wurde. Solange jetzt das Triggersignal anliegt, bleibt Schalter auf false, weil !Flag durch den NOT-Operator ! false ist.
Liegt das Triggersignal nicht mehr an, wird Flag false gesetzt und es würde bei einem erneuten Triggersignal wieder eine Email gesendet werden können.

traderdoc

Bucardo 11.02.15 12:43

HI traderdoc,
danke für deinen Hinweis! Ich habe versucht deine Idee in mein Script einzubauen, stoße aber wieder auf das alte Problem der AUsführungsschleife. Den Sendmail-Befehl habe ich bis auf weiteres erstmal durch einen "Alert" ersetzt. das schont mein Postfach ;)

Hier mein Code:
void OnTick()
{

bool Schalter = false;
bool Flag = false;
bool SO_Aktivierung;

for(int a=OrdersTotal()-1; a>=0; a--)
{
if(OrderSelect(a,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol())
{
if(OrderType()== OP_SELL)
{
SO_Aktivierung = true;
}
}
}
}


Schalter = false;
if (SO_Aktivierung == true)
{
if (!Flag) Schalter = true;
}
else Flag = false;

if (Schalter)
{
Alert("Sell-Order aktiviert");
Flag = true;
}

}

Liegt der Fehler eher in der Orderabfrage, oder in der Variablendefinition für Schalter / Flag?

Danke & Gruß Bucardo

traderdoc 11.02.15 15:06

Das
bool Flag = false;

muß außerhalb von OnTick() deklariert werden, sonst wird das Flag immer wieder auf false gestellt und damit der Schalter auf true.

traderdoc


Alle Zeitangaben in WEZ +2. Es ist jetzt 23:04 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum