![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Zähler?
Ich programmiere seit so vielen Monaten Indikatoren, dass es mir an Experten mangelt, aber ich habe vor, das zu ändern. Auf dem Weg brauche ich ein wenig Hilfe. In meinem Experten, den ich zusammengewürfelt habe, wird bei Bar Close geprüft, ob es eine Bedingung gibt, die das Schließen des Trades rechtfertigt.
Ich beginne mit einer globalen Variablen,
datetime PreviousBar; // record candle/bar time[/CODE]
and set one bool in init()
{
do_this = true;
}
[/CODE]
blah blah boring stuff.... etc, etc
then in the main loop I have:
[CODE]
if(do_this == true)
{
PreviousBar = Time[0];
do_this= false; // so it does this only once only
}
if(NewBar() == true)
{
if(TotalOpenOrders() == blah blah close my order you crazy monkey)
}
and outside the main loop I have:
[CODE]//--- returns true if current bar just formed
bool NewBar()
{
if(PreviousBar<Time[0])
{
PreviousBar = Time[0];
return(true);
}
else
{
return(false);
}
return(false);
}OK, es ist also so eingestellt, dass es einmal pro Bar geschieht. Was ich tun möchte, ist eine Funktion, die 90 Sekunden oder 60 Sekunden oder was auch immer inkrementiert und dann ein bool auf true setzt, nachdem sie diese Zeit inkrementiert hat. Grundsätzlich möchte ich die Indikatoren alle 60, 90, 120 Sekunden oder was auch immer, anstatt bei Bar schließen zu überprüfen. Wie kann ich das tun?
Danke für jede Hilfe,
- Nittany1
Ich programmiere seit so vielen Monaten Indikatoren, dass es mir an Experten mangelt, aber ich habe vor, das zu ändern. Auf dem Weg dorthin brauche ich ein wenig Hilfe. In meinem Experten, den ich zusammengewürfelt habe, wird bei Bar Close geprüft, ob es eine Bedingung gibt, die das Schließen des Trades rechtfertigt.
Ich beginne mit einer globalen Variablen,
datetime PreviousBar; // record candle/bar time[/CODE]
and set one bool in init()
{
do_this = true;
}
[/CODE]
blah blah boring stuff.... etc, etc
then in the main loop I have:
[CODE]
if(do_this == true)
{
PreviousBar = Time[0];
do_this= false; // so it does this only once only
}
if(NewBar() == true)
{
if(TotalOpenOrders() == blah blah close my order you crazy monkey)
}
and outside the main loop I have:
[CODE]//--- returns true if current bar just formed
bool NewBar()
{
if(PreviousBar<Time[0])
{
PreviousBar = Time[0];
return(true);
}
else
{
return(false);
}
return(false);
}OK, es ist also so eingestellt, dass sie einmal pro Takt ausgeführt wird. Was ich tun möchte, ist eine Funktion, die 90 Sekunden oder 60 Sekunden oder was auch immer inkrementiert und dann ein bool auf true setzt, nachdem sie diese Zeit inkrementiert hat. Im Grunde möchte ich die Indikatoren alle 60, 90, 120 Sekunden oder was auch immer statt bei Bar schließen zu überprüfen. Wie kann ich das tun?
Danke für jede Hilfe,
- nittany1So sollte es gehen. Denken Sie daran, dass MT eine Tick-basierte Ausführung verwendet, so dass eine sekundengenaue Prüfung nicht möglich ist (es sei denn, Sie führen eine Schleife in der Init()-Subdatei durch).
if (CallIndicatorsCheck())
{
// Ihr Code hier
}
bool CallIndicatorsCheck()
{
statisch datetime Oldtime;
int Secs = 90;
bool Flag;
if (AktuelleZeit() >= AlteZeit) {
Oldtime = CurrTime() + Secs;
Flag = true; }
return(Flag);
}
Platzierung von Kommentaren
Könnte mir jemand den Code zeigen, um einen Kommentar in derRECHTEN oberenEcke des Bildschirms zu platzieren, anstatt der Standardeinstellung oben links?
Danke!![](https://c.mql5.com/forextsd/smiles/regular_smile.png)
Könnte mir jemand den Code zeigen, um einen Kommentar in derRECHTEN OBERENEcke des Bildschirms zu platzieren, anstatt der Standardeinstellung oben links? Danke!
Das können Sie nicht. Aus dem MQL4-Handbuch:
Wenn Sie durch den Tod benötigen, könnten Sie Objekte erstellen.
Könnte mir jemand den Code zeigen, um einen Kommentar in derRECHTEN oberenEcke des Bildschirms zu platzieren, anstatt der Standardeinstellung oben links? Danke!
LinusGuy hat recht; es gibt keinen direkten Weg. Die einfache Abhilfe ist, den Kommentar mit Leerzeichen aufzufüllen --
Kommentar(" Hallo Welt!");
wird den Text nach rechts verschieben.
Sie können auch Zeilenvorschübe einfügen, um die Seite nach unten zu verschieben.
Comment("\n\n\n\n\ihr Text");
oder kombinieren Sie Zeilenvorschübe und Leerzeichen, um den Text in der unteren rechten Ecke des Bildschirms zu drucken.
mog
LinusGuy hat recht; es gibt keinen direkten Weg. Die einfache Abhilfe besteht darin, den Kommentar mit Leerzeichen aufzufüllen --
Comment(" Hallo Welt!");
wird den Text nach rechts verschieben.
Sie können auch Zeilenvorschübe einfügen, um die Seite nach unten zu verschieben.
Comment("\n\n\n\n\ihr Text");
oder Sie können Zeilenvorschübe und Leerzeichen kombinieren, um in der unteren rechten Ecke des Bildschirms zu drucken.
mogVielen Dank für die Hilfe. Ich werde es ausprobieren!![](https://c.mql5.com/forextsd/smiles/regular_smile.png)
kein neuer Handel für X Balken nach einem verlorenen Handel
Hallo Team - ich hoffe, jemand kann mir helfen.
Wie kann ich verhindern, dass ein neuer Handel für 10 Takte beginnt, wenn der letzte Handel ein Verlustgeschäft war?
Danke
Die folgende Funktion gibt true zurück, wenn die Kontohistorie einen Verlusthandel aufweist, der bei oder nach der Eröffnung des 10. vergangenen Balkens (aktueller Balken ist 0) geschlossen wurde,
und andernfalls false zurückgibt.
{
datetime since = Time[ bar+10 ];
for ( int i = OrdersHistoryTotal() - 1; i >= 0; i-- ) {
if ( ! OrderSelect( i, SELECT_BY_POS, MODE_HISTORY )
continue;
if ( OrderProfit() = since )
return( true );
}
return( false );
}
[/PHP]
If you add that function to your EA, then include a statement like the following in the start() function, then Bob's your uncle.
[PHP]if ( postMortem() ) return( 0 );Vielen Dank dafür - ich werde es versuchen.
Grüße
Leute, habt ihr das gleiche Problem?
Ich habe einen Experten kodiert. Ich möchte eine Position eröffnen, wenn der Preis derselbe ist wie der eines Indikators. Um dies zu tun, verwende ich den folgenden Satz:
//zu kaufen
double indicatorpast = icustom(....................,1);
double indicatornow = icustom(....................,0);
wenn (close[1]indicatornow) OpenBUY();
if (close[1]>indicatorpast && close[0]<indicatornow) OpenSELL();
aber mit diesem Satatement öffnet der Experte Positionen nicht nur, wenn der Preis den Indikator überschreitet, sondern auch oberhalb des Indikators. Ich möchte, dass der Experte die Position NUR öffnet, wenn er den Indikator überquert, also habe ich das versucht:
//zu kaufen
double indicatorpast = icustom(....................,1);
double indicatornow = icustom(....................,0);
if (close[1]<indicatorpast && close[0]==indicatornow) OpenBUY();
if (close[1]>indicatorpast && close[0]==indicatornow) OpenSELL();
Aber diese Anweisung wird nicht ausgeführt.
Wissen Sie, woran das liegt? Ich denke nämlich, dass die Anweisung keine Fehler enthält.
Mit freundlichen Grüßen.