Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4973
Beiträge: 43248
Benutzer: 7.219
Aktive Benutzer: 81
Links: 84
Wir begrüßen unseren neuesten Benutzer: Hopfen&Malz
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor einem Tag
- Hopfen&Mal...
vor 2 Tagen
- frankmicha...
vor einer Woche
- DFeck
vor einer Woche
- bb1107
vor 2 Wochen
- rg-trader

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 249
Gesamt: 249
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 10.02.15
Mitglied
 
Registriert seit: Nov 2014
Beiträge: 31
Bucardo befindet sich auf einem aufstrebenden Ast
Standard 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;
}
  #2 (permalink)  
Alt 11.02.15
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

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
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #3 (permalink)  
Alt 11.02.15
Mitglied
 
Registriert seit: Nov 2014
Beiträge: 31
Bucardo befindet sich auf einem aufstrebenden Ast
Standard

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
  #4 (permalink)  
Alt 11.02.15
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

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
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Thema geschlossen

Lesezeichen

Stichworte
email schleife, emailbenachrichtigung, endlosschleife, mql4, programmierung, programmierung metatarder, schleife

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +1. Es ist jetzt 11:12 Uhr.





Suchmaschine - Reisen - Wavesnode - Facebook Forum - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------