Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 412
![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
Hallo, ich habe ein Anfängerproblem...
Ich kann das System nicht dazu bringen, den letzten Bar-Close-Wert mit den Höchst- und Tiefstwerten eines bestimmten Zeitraums zu vergleichen, z. B.
die letzten 20 Takte. Was mache ich falsch?
Ich habe es mit Alert überprüft, und aus irgendeinem unbekannten Grund zeigt der Tester den Höchstwert aus der Berechnung des letzten Ticks an, aber er gibt diesen Wert an
Sie entspricht der Anzahl der Ticks, so dass der Auftrag nicht eröffnet wird.
Das zweite Problem ist, wie meine EA warten auf die nächste Bar zu öffnen (30m Periode)? In der Checkpoints-Test ist alles in Ordnung, aber wenn ich Ticks verwenden,
dann öffnet sich mein Expert Advisor im selben Balken, direkt nachdem er mit einem Stop-Loss geschlossen wurde...
Wie kann ich einen Handel schließen, ohne davon abhängig zu sein, ob es ein Tick war oder nicht? z.B. für einen Zeitraum von 30m möchte ich den Auftrag 5 Sekunden vor Ende des Balkens (29.55, 59.55) schließen
Auf der Grundlage aller zu diesem Zeitpunkt vorliegenden Daten. In diesem Stadium besteht das Problem darin, dass, wenn ein Tick nicht innerhalb von 5 Sekunden auftritt, also kein
(Theoretisch ist das Blödsinn, aber in der Realität könnte der nächste Tick aus irgendeinem Grund in einigen Kerzenständern erscheinen.
kann aus irgendeinem Grund in einigen Kerzen sein.
Vielen Dank im Voraus!1. Ich habe in dem Code nichts über die letzten 20 Takte gesehen.
2. So bestimmen Sie den ersten Tick eines neuen Balkens
3) Wie schließe ich einen Auftrag, ohne zu prüfen, ob er ein Tick war oder nicht?
Wir müssen die Arbeit mit OnTick vermeiden und mit OnTimer arbeiten. Setzen Sie den Timer mit einem Intervall von 1 Sekunde und überprüfen Sie die Zeit darin. Der Timer hängt nicht von Ticks ab.
o_oops wusste nicht, dass das Terminal auch dort stochert, wo der Fehler ist, beim ersten Mal bin ich auf einen kritischen Fehler gestoßen.
Es spuckt auf sie.
Natürlich wird es spucken, Sie greifen auf das 3. Element eines Arrays mit der Dimension 2 zu - mas[2]++
Alexey Volchanskiy:
Так у тебя в комменте стоит управляющий символ "\n " - это символ перевода строки. Если его убрать, многострочия не будет.
Das ist ein Scherz. Jetzt fügt es einen Kommentar am Ende der Zeile hinzu... und der Text läuft nach rechts ab. ;-)
Guten Abend. Ich versuche, einen einfachen EA für das Kreuzen von Tenkan und Kinjun zu schreiben. Hier ist der Code:
void OnTick()
void OnTick()
{
TradeSignal_20();
}
int TradeSignal_20()
{
int sig=0;
if(h_ich==INVALID_HANDLE)
{
h_ich=iIchimoku(Symbol(),Zeitraum(),IKHtenkansen,IKHkijunsen,IKHsenkouspanb);
zurück(0);
}
sonst
{
if (CopyBuffer(h_ich,0,0,3,ich1_buffer)<2) return(0); // TENKANSEN_LINE
if (CopyBuffer(h_ich,1,0,3,ich2_buffer)<2) return(0); // KIJUNSEN_LINE
if (!ArraySetAsSeries(ich1_buffer,true)) return(0);
if (!ArraySetAsSeries(ich2_buffer,true)) return(0);
}
//--- Bedingung prüfen und Wert für sig einstellen
if(ich1_buffer[1]>ich2_buffer[1]) sig=1;
else if(ich1_buffer[1]<ich2_buffer[1]) sig=-1;
sonst sig=0;
if (ich1_buffer[1]>ich2_buffer[1])
if (ich1_buffer[2]<ich2_buffer[2])
Alert(Symbol()+": Kauf");
if (ich1_buffer[1]<ich2_buffer[1])
if (ich1_buffer[2]>ich2_buffer[2])
Alert(Symbol()+": sale");
//--- Rückgabe des Handelssignals
zurück (sig);
}
//+------------------------------------------------------------------+
Wie kann ich erreichen, dass der Alarm nur einmal und nicht ständig aufgerufen wird?
1. Ich habe im Code nichts über die letzten 20 Balken gesehen, bitte geben Sie Einzelheiten an.
2. So bestimmen Sie den ersten Tick eines neuen Balkens
3) Wie kann ein Geschäft geschlossen werden, unabhängig davon, ob es angekreuzt wurde oder nicht?
Sie müssen die Arbeit mit OnTick vermeiden und mit OnTimer arbeiten, den Timer mit einem Intervall von 1 Sekunde einstellen und die Zeit darin überprüfen. Der Timer ist nicht vom Eintreffen von Zecken abhängig.
Guten Abend. Ich versuche, einen einfachen EA auf Tenkan und Kinjun Crossing zu schreiben. Hier ist der Code:
void OnTick()
void OnTick()
{
TradeSignal_20();
Wie kann ich dafür sorgen, dass die Meldung nur einmal und nicht immer wieder aufgerufen wird?Wie kann ich hier den Schlusskurs mit dem Maximum der letzten 20 Balken vergleichen? Und wenn der letzte Preis gleich oder größer ist als das Maximum der letzten 20 Balken, dann gibt es ein Signal zum Öffnen.
Ich denke, das Problem liegt in der Bezugnahme auf den Null-Balken, d. h. den aktuellen Balken. Sie sollten den Beginn eines neuen Balkens definieren, wie ich es in der vorherigen Antwort angegeben habe, und alle Vergleiche nur beim ersten Tick eines neuen Balkens durchführen. Und ändern Sie die Indizierung. Wir müssen sicherstellen, dass der letzte geschlossene Balken nicht in iHighest steht. Und jetzt haben Sie einen Verweis auf die aktuelle Bar wird auf jedem Tick gebildet, die Ergebnisse werden die seltsamsten sein.
double HIGHEST = High[iHighest(Symbol(),0,MODE_HIGH,20,2)]; if(Close[1] > SMMA && Close[1] > BB_UP && Close[1] >= HIGHEST) { ***********
Schauen wir uns den Code von
Ich denke, das Problem liegt in der Bezugnahme auf den Null-Balken, d. h. den aktuellen Balken. Sie müssen den Beginn eines neuen Balkens definieren, wie in der vorherigen Antwort erwähnt, und alle Vergleiche nur beim ersten Tick des neuen Balkens durchführen. Und ändern Sie die Indizierung. Wir müssen sicherstellen, dass der letzte geschlossene Balken nicht in iHighest steht. Und jetzt haben Sie einen Verweis auf die aktuelle Bar wird auf jedem Tick gebildet, die Ergebnisse werden die seltsamsten sein.
Danke, scheint geholfen zu haben :) obwohl ich hätte schwören können, dass ich genau das Gleiche gemacht habe und es nicht funktioniert hat...
Sie rieten OnTimer(), aber aus irgendeinem Grund wird es nicht mit mir zusammenarbeiten. Ich habe die gesamte Hilfe studiert und keine klaren Erklärungen oder Beispiele gefunden, so dass ich ratlos war.
Das heißt, dieser triviale Code wird nicht ausgeführt, obwohl alles in der Referenz angegeben ist... Beim Googeln dieses Programms bin ich darauf gestoßen, dass OnTimer() im Test nicht funktioniert
Modus. Dieser Moment scheint jedoch mit mql5 beseitigt worden zu sein. Helfen Sie, es zu verstehen :) Danke!
Imminence:
Beim Googeln dieses Programms bin ich darauf gestoßen, dass OnTimer() im Testmodus angeblich nicht funktioniert. Das Problem wurde mit mql5 gelöst. Hilf mir, es zu verstehen.) Danke!
Richtig, in MT4 im Tester funktioniert der Timer nicht und es ist nicht dokumentiert! Ich habe an servicedesk geschrieben, und sie sagten, sie würden das nie tun. Ich habe das Problem durch den Aufruf von OnTimer in OnTick gelöst. Ich habe den Timer auf eine Sekunde eingestellt.
Wenn also im Tester die Ticks öfter als 1 Mal/Sekunde kommen, werden die überzähligen übersprungen; wenn sie seltener kommen, wird das Zeitvielfache von 1 Sekunde erzeugt. Diese Zeit liegt in der TimeCurrStruct-Struktur, und meine Hauptklasse nimmt in jedem Modus die Zeit nur aus dieser Struktur. Meiner Meinung nach ist dies die einzige Möglichkeit, diesen Fehler zu beheben. Hier ist eine Funktion, ich habe unnötige Dinge entfernt, nur Fleisch ))
Können Sie nicht die SRC-Taste drücken?