Neo333: Hallo, hier ist das Problem: Der EA setzt Pending Limit Orders, dann bewegt sich der Preis und die Orders werden zu Market Orders. Alles funktioniert, aber bei einigen Aufträgen gibt es eine absolut unklare Panne, da alle Aufträge durch eine bestimmte feste Konstante "K" festgelegt sind, sollte der Abstand zwischen ihnen immer eine Konstante sein (Rn+1 = Rn + "K"). Wenn wir die Ergebnisse der arithmetischen Operationen mit den Preisen überprüfen, d.h. wenn wir einfach subtrahieren und das Ergebnis überprüfen, ist es gleich "K"; aber der logische Vergleich == zeigt immer noch falsch an und das führt dazu, dass der EA ständig Aufträge zu diesem Preis öffnet und somit "denkt", dass es keinen Auftrag gibt. Tut mir leid, wenn es zu lang ist, ich wollte es nur etwas ausführlicher erklären. Ehrlich gesagt, ich weiß nicht, was ich tun soll :(
Wenn Sie nach == vergleichen, dann verwenden Sie NormalizeDouble, im Allgemeinen die bessere MathAbs(Price1-Price2)<delta
Herzlichen Dank! Aber es gibt diesen 2011.09.30 21:26:49 TestGenerator: nicht übereinstimmende Datenfehler (Volumengrenze 13634 am 2011.07.19 20:00 überschritten)
Soweit ich verstanden habe, betrifft diese Meldung nicht den Expert Advisor, aber ich würde trotzdem gerne wissen, wie sie zu verstehen ist?
Ich versuche, eine Funktion zu schreiben, die den Schlusskurs der letzten Bestellung ermittelt (nach der Zeit, die der aktuellen Zeit am nächsten kommt)
Ich schreibe es so:
Aber
tun
uble PriceCloseLastPos(string smb = "", int cmd = -1, int mMin = -1, int mMax = -1) { int ticketDateTime=0; int orderTicket=-1; double closePreis = 0; int ordTotal = OrdersTotal(); if (smb == "0") smb = Symbol(); for (int i = 0; i < ordTotal; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if (OrderSymbol() == smb || smb == "") { if (OrderType() == OP_BUY || OrderType() == OP_SELL) { if (cmd < OP_BUY || OrderType() == cmd) { if (mMin < 0 || (OrderMagicNumber() >= mMin && OrderMagicNumber() <= mMax)) { if (ticketDateTime < OrderCloseTime()) { ticketDateTime = OrderCloseTime(); orderTicket = OrderTicket(); closePrice = OrderClosePrice(); } } } } } } } if(orderTicket > -1) OrderSelect(orderTicket, SELECT_BY_TICKET, MODE_HISTORY ); return(closePrice); }
Aber aus irgendeinem Grund gibt die Funktion die Daten der allerersten Bestellung zurück, die im Prüfgerät geöffnet wurde.
Eigentlich ist das mein Zwischenziel. Ich wollte eine Funktion schreiben, die den letzten Schlusskurs eines Teilauftrags (nicht für das gesamte Losvolumen) angibt, aber ich weiß nicht, wie ich das anstellen soll...
Hier sehe ich, dass Ihr Wissen nicht sehr gut ist. Bei der Auswahl einer Bestellung nach Ticket wird der Parameter Pool ignoriert. D.h. es ist nutzlos, MODE_HISTORY zu schreiben - dieser Parameter bezieht sich nur auf die Auswahl nach Index.
Wenn ein Auftrag per Ticket ausgewählt wurde, müssen Sie die Schließungszeit überprüfen, um sicherzustellen, dass er in der Liste der geschlossenen Aufträge ausgewählt ist. Er muss größer als Null sein - nur geschlossene Positionen haben diesen Parameter >0.
Dann gibt es sie nicht. Sie können auch klarstellen. Versuchen Sie, in den MT4-Einstellungen mehr Balken auf dem Diagramm zu erstellen.
Dies kann durch das Herunterladen oder den Kauf einer längeren Geschichte gelöst werden.
Service>Einstellungen>Registerkarte Diagramme >maximale Anzahl der Balken im Fenster war 65 000 --> geändert auf 100 000 oder mehr, immer noch nur November 2010 ist das Neueste. Das Kursarchiv für dieses Instrument und diesen Zeitrahmen ist vollständig geladen - bis hinunter zum November 1999
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Erlauben Sie die Verwendung von Cookies, um sich auf der Website MQL5.com anzumelden.
Bitte aktivieren Sie die notwendige Einstellung in Ihrem Browser, da Sie sich sonst nicht einloggen können.
Sie sind angemeldet. Die Zwei-Faktor-Authentifizierung wurde deaktiviert. Richten Sie sie erneut ein und scannen Sie einen neuen QR-Code oder fahren Sie mit deaktivierter Zwei-Faktor-Authentifizierung fort.
Hallo, hier ist das Problem: Der EA setzt Pending Limit Orders, dann bewegt sich der Preis und die Orders werden zu Market Orders. Alles funktioniert, aber bei einigen Aufträgen gibt es eine absolut unklare Panne, da alle Aufträge durch eine bestimmte feste Konstante "K" festgelegt sind, sollte der Abstand zwischen ihnen immer eine Konstante sein (Rn+1 = Rn + "K"). Wenn wir die Ergebnisse der arithmetischen Operationen mit den Preisen überprüfen, d.h. wenn wir einfach subtrahieren und das Ergebnis überprüfen, ist es gleich "K"; aber der logische Vergleich == zeigt immer noch falsch an und das führt dazu, dass der EA ständig Aufträge zu diesem Preis öffnet und somit "denkt", dass es keinen Auftrag gibt. Tut mir leid, wenn es zu lang ist, ich wollte es nur etwas ausführlicher erklären. Ehrlich gesagt, ich weiß nicht, was ich tun soll :(
Herzlichen Dank! Aber es gibt diesen 2011.09.30 21:26:49 TestGenerator: nicht übereinstimmende Datenfehler (Volumengrenze 13634 am 2011.07.19 20:00 überschritten)
Soweit ich verstanden habe, betrifft diese Meldung nicht den Expert Advisor, aber ich würde trotzdem gerne wissen, wie sie zu verstehen ist?
Hilfe bei der Behebung der Funktion
Ich versuche, eine Funktion zu schreiben, die den Schlusskurs der letzten Bestellung ermittelt (nach der Zeit, die der aktuellen Zeit am nächsten kommt)
Ich schreibe es so:
Aber
tun
uble PriceCloseLastPos(string smb = "", int cmd = -1, int mMin = -1, int mMax = -1) {
int ticketDateTime=0;
int orderTicket=-1;
double closePreis = 0;
int ordTotal = OrdersTotal();
if (smb == "0") smb = Symbol();
for (int i = 0; i < ordTotal; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol() == smb || smb == "") {
if (OrderType() == OP_BUY || OrderType() == OP_SELL) {
if (cmd < OP_BUY || OrderType() == cmd) {
if (mMin < 0 || (OrderMagicNumber() >= mMin && OrderMagicNumber() <= mMax)) {
if (ticketDateTime < OrderCloseTime()) {
ticketDateTime = OrderCloseTime();
orderTicket = OrderTicket();
closePrice = OrderClosePrice();
}
}
}
}
}
}
}
if(orderTicket > -1) OrderSelect(orderTicket, SELECT_BY_TICKET, MODE_HISTORY );
return(closePrice);
}
Aber aus irgendeinem Grund gibt die Funktion die Daten der allerersten Bestellung zurück, die im Prüfgerät geöffnet wurde.
Eigentlich ist das mein Zwischenziel. Ich wollte eine Funktion schreiben, die den letzten Schlusskurs eines Teilauftrags (nicht für das gesamte Losvolumen) angibt, aber ich weiß nicht, wie ich das anstellen soll...
Stattdessen...
... Nächste ...
Hier sehe ich, dass Ihr Wissen nicht sehr gut ist. Bei der Auswahl einer Bestellung nach Ticket wird der Parameter Pool ignoriert. D.h. es ist nutzlos, MODE_HISTORY zu schreiben - dieser Parameter bezieht sich nur auf die Auswahl nach Index.
Wenn ein Auftrag per Ticket ausgewählt wurde, müssen Sie die Schließungszeit überprüfen, um sicherzustellen, dass er in der Liste der geschlossenen Aufträge ausgewählt ist. Er muss größer als Null sein - nur geschlossene Positionen haben diesen Parameter >0.
Auf dem 5-Minuten-Zeitrahmen im MT4-Handelsterminal wird die Historie nicht angezeigt. Kann dieses Problem gelöst werden?
Ich entschuldige mich für die unverblümte Frage. Ich meinte, dass der Verlauf vor November 2010 nicht angezeigt wird :)
Dann gibt es sie nicht. Sie können auch klarstellen. Versuchen Sie, in den MT4-Einstellungen mehr Balken auf dem Diagramm zu erstellen.
Das Problem wird durch das Herunterladen oder den Kauf einer längeren Geschichte gelöst.
Dann gibt es sie nicht. Sie können auch klarstellen. Versuchen Sie, in den MT4-Einstellungen mehr Balken auf dem Diagramm zu erstellen.
Dies kann durch das Herunterladen oder den Kauf einer längeren Geschichte gelöst werden.
Wie viele Takte hat die Geschichte maximal? Vielleicht ist die Geschichte ja schon zu Ende erzählt.