yaaarik777: Ich lerne gerade, ich versuche, den Leitfaden zu benutzen, aber ich merke, dass ich Unsinn bekomme, ich würde gerne ein Beispiel sehen, wie man es macht.
Статья посвящена программному отслеживанию событий в терминале МetaТrader 4, таких как открытие, закрытие и модификация ордеров, и рассчитана на пользователя, обладающего базовыми навыками работы с терминалом и программирования на MQL 4.
Guten Tag zusammen! Können Sie mir bitte sagen, wie man die Löschung eines Auftrags in einem EA einstellen kann?
Die Situation stellt sich wie folgt dar:
Wir platzieren 2schwebende Aufträge in verschiedenen Richtungen, sobald einer von ihnen ausgelöst wird, wird der andere entfernt und nicht mehr ausgestellt.
Ich wäre für jede Hilfe sehr dankbar.
Ich danke Ihnen.
Etwa so
for(int pos=OrdersTotal()-1,ticket=0,trade=0;pos!=-1;pos--) { if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES) && OrderType()>1)//Если найденный ордер отложенный { ticket=OrderTicket();//Запомним его тикет } else//Если ордер не отложенный { trade=1;//Запомним,что есть открытая позиция } if(ticket!=0 && trade==1)//И если известен отложенный и открыта позиция { int OD=OrderDelete(ticket);//Удаляем отложенный } }
Nikolay Gaylis: Die Aufforderung "Lasst uns weitersuchen" muss gestrichen werden!
Sie können Ihre eigenen Beiträge im Forum bearbeiten. Alles, was Sie in den einzelnen Beiträgen oben geschrieben haben, lässt sich in einem einzigen Beitrag zusammenfassen.
Vitalie Postolache: Sie können Ihre eigenen Beiträge im Forum bearbeiten. Alles, was Sie in den einzelnen Beiträgen oben geschrieben haben, lässt sich in einem einzigen Beitrag zusammenfassen.
Hallo! Ich habe ein gewinnorientiertes Schleppnetz mit folgendem Algorithmus eingeführt:
if(gesamt>0) {for (int i=BestellungenSumme()-1; i>=0; i--) if(OrderSelect(i,SELECT_BY_POS)==true) { if(OrderMagicNumber()==magic && OrderSymbol()==asset& OrderType()==OP_BUY) { RefreshRates(); if(ZeitAktuell()>OrderOpenTime() && TimeCurrent()<=(OrderOpenTime()+3600)) { GEWINNMITNAHMEBEDINGUNG; ÄNDERUNG DES AUFTRAGS AUF EINEN NEUEN GEWINN; } } } }
Aber das Zeitlimit funktioniert aus irgendeinem Grund nicht, und es kommt vor, dass eine Position, die nicht im aktuellen Zeitrahmen geschlossen wird, auch im nächsten Zeitrahmen gehandelt wird, wenn die Bedingungen erfüllt sind.
Hallo! Ich habe ein gewinnorientiertes Schleppnetz mit folgendem Algorithmus eingeführt:
if(gesamt>0) {for (int i=OrdersTotal()-1; i>=0; i--) if(OrderSelect(i,SELECT_BY_POS)==true) { if(OrderMagicNumber()==magic && OrderSymbol()==asset && OrderType()==OP_BUY) { RefreshRates(); if(TimeCurrent()>OrderOpenTime() && TimeCurrent()<=(OrderOpenTime()+3600)) { BEDINGUNG FÜR DAS "TRAILING TP"; { ÄNDERUNG DES AUFTRAGES AN DEN NEUEN TAKE-PROFIT; } } } }
Aber aus irgendeinem Grund funktioniert das Zeitlimit nicht, und es passiert, dass die Position, wenn sie nicht im aktuellen Zeitrahmen geschlossen wird, auch im nächsten Zeitrahmen weiterläuft, wenn die Bedingungen erfüllt sind.
Was ist mit meinem letzten if() falsch?
Nun, ich weiß nicht, ich habe dort noch nichts Falsches gesehen. Ich habe die überflüssige Prüfung der Anzahl der Aufträge entfernt (sie ist bereits in den Schleifenbedingungen enthalten) und eine Prüfung für beide Arten von Positionen (Kauf und Verkauf) hinzugefügt
Ich weiß nicht, ich sehe auf den ersten Blick noch nicht, was daran falsch ist. Ich habe die unnötige Prüfung auf die Anzahl der Aufträge entfernt (sie ist bereits in den Zyklusbedingungen enthalten) und eine Prüfung auf beide Arten von Positionen (Kauf und Verkauf) hinzugefügt.
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.
Ich lerne gerade, ich versuche, den Leitfaden zu benutzen, aber ich merke, dass ich Unsinn bekomme, ich würde gerne ein Beispiel sehen, wie man es macht.
Guten Tag zusammen! Können Sie mir bitte sagen, wie man die Löschung eines Auftrags in einem EA einstellen kann?
Die Situation stellt sich wie folgt dar:
Wir platzieren 2schwebende Aufträge in verschiedenen Richtungen, sobald einer von ihnen ausgelöst wird, wird der andere entfernt und nicht mehr ausgestellt.
Ich wäre für jede Hilfe sehr dankbar.
Ich danke Ihnen.
Etwa so
{
if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES) && OrderType()>1)//Если найденный ордер отложенный
{
ticket=OrderTicket();//Запомним его тикет
}
else//Если ордер не отложенный
{
trade=1;//Запомним,что есть открытая позиция
}
if(ticket!=0 && trade==1)//И если известен отложенный и открыта позиция
{
int OD=OrderDelete(ticket);//Удаляем отложенный
}
}
Die Aufforderung "Lasst uns weitersuchen" muss gestrichen werden!
Sie können Ihre eigenen Beiträge im Forum bearbeiten. Alles, was Sie in den einzelnen Beiträgen oben geschrieben haben, lässt sich in einem einzigen Beitrag zusammenfassen.
Hallo! Ich habe ein gewinnorientiertes Schleppnetz mit folgendem Algorithmus eingeführt:
if(gesamt>0)
{for (int i=BestellungenSumme()-1; i>=0; i--)
if(OrderSelect(i,SELECT_BY_POS)==true)
{
if(OrderMagicNumber()==magic && OrderSymbol()==asset& OrderType()==OP_BUY)
{
RefreshRates();
if(ZeitAktuell()>OrderOpenTime() && TimeCurrent()<=(OrderOpenTime()+3600))
{
GEWINNMITNAHMEBEDINGUNG;
ÄNDERUNG DES AUFTRAGS AUF EINEN NEUEN GEWINN;
}
}
}
}
Aber das Zeitlimit funktioniert aus irgendeinem Grund nicht, und es kommt vor, dass eine Position, die nicht im aktuellen Zeitrahmen geschlossen wird, auch im nächsten Zeitrahmen gehandelt wird, wenn die Bedingungen erfüllt sind.
Was ist mit meinem letzten if() falsch?
Hallo! Ich habe ein gewinnorientiertes Schleppnetz mit folgendem Algorithmus eingeführt:
if(gesamt>0)
{for (int i=OrdersTotal()-1; i>=0; i--)
if(OrderSelect(i,SELECT_BY_POS)==true)
{
if(OrderMagicNumber()==magic && OrderSymbol()==asset && OrderType()==OP_BUY)
{
RefreshRates();
if(TimeCurrent()>OrderOpenTime() && TimeCurrent()<=(OrderOpenTime()+3600))
{
BEDINGUNG FÜR DAS "TRAILING TP";
{ ÄNDERUNG DES AUFTRAGES AN DEN NEUEN TAKE-PROFIT;
}
}
}
}
Aber aus irgendeinem Grund funktioniert das Zeitlimit nicht, und es passiert, dass die Position, wenn sie nicht im aktuellen Zeitrahmen geschlossen wird, auch im nächsten Zeitrahmen weiterläuft, wenn die Bedingungen erfüllt sind.
Was ist mit meinem letzten if() falsch?
Nun, ich weiß nicht, ich habe dort noch nichts Falsches gesehen. Ich habe die überflüssige Prüfung der Anzahl der Aufträge entfernt (sie ist bereits in den Schleifenbedingungen enthalten) und eine Prüfung für beide Arten von Positionen (Kauf und Verkauf) hinzugefügt
for(int i=OrdersTotal()-1; i>=0; i--) {
if(OrderSelect(i,SELECT_BY_POS)) {
if(OrderType()>OP_SELL) continue;
if(OrderMagicNumber()==magic && OrderSymbol()==asset) {
if(TimeCurrent()>OrderOpenTime() && TimeCurrent()<=OrderOpenTime()+PeriodSeconds(PERIOD_H1)) {
// УСЛОВИЕ ТРАЛА ТЭЙКПРОФИТА;
// МОДИФИКАЦИЯ ОРДЕРА НА НОВЫЙ ТЭЙКПРОФИТ;
}
}
}
}
//+------------------------------------------------------------------+
Wo // die Schleppnetz- und Änderungsbedingungen, fügen Sie Print() mit den Werten der Zeitvariablen ein und sehen Sie, was das Protokoll sagt.
Ich weiß nicht, ich sehe auf den ersten Blick noch nicht, was daran falsch ist. Ich habe die unnötige Prüfung auf die Anzahl der Aufträge entfernt (sie ist bereits in den Zyklusbedingungen enthalten) und eine Prüfung auf beide Arten von Positionen (Kauf und Verkauf) hinzugefügt.
for(int i=OrdersTotal()-1; i>=0; i--) {
if(OrderSelect(i,SELECT_BY_POS)) {
if(OrderType()>OP_SELL) continue;
if(OrderMagicNumber()==magic && OrderSymbol()==asset) {
if(TimeCurrent()>OrderOpenTime() && TimeCurrent()<=OrderOpenTime()+PeriodSeconds(PERIOD_H1)) {
// УСЛОВИЕ ТРАЛА ТЭЙКПРОФИТА;
// МОДИФИКАЦИЯ ОРДЕРА НА НОВЫЙ ТЭЙКПРОФИТ;
}
}
}
}
//+------------------------------------------------------------------+
Wo // Schleppnetz und Änderungsbedingungen, Print() mit Werten der Zeitvariablen einfügen und sehen, was das Protokoll sagt.
Ich habe andere Bedingungen für Verkaufen, daher habe ich nur KAUFEN angezeigt.
" mit Zeitvariablen" - meinen Sie TimeCurrent()? Tut mir leid, wenn Sie das überrascht - ich bin eine Nullnummer im Programmieren.
Und ich verstehe das nicht -OrderType()>OP_SELL. Warum >? OrderType OP_SELL hat den Wert = 1 undOP_BUY = 0. Daher muss es <= sein? Ich danke Ihnen.
Ich habe andere Schleppnetzbedingungen für SELL, daher habe ich nur BAI angezeigt.
" mit Zeitvariablenwerten" - meinen Sie TimeCurrent()? Tut mir leid, wenn Sie das überrascht - ich bin eine Nullnummer im Programmieren.
Und ich verstehe das nicht -OrderType()>OP_SELL. Warum >? OrderType OP_SELL hat den Wert = 1 undOP_BUY = 0. Daher muss es <= sein? Ich danke Ihnen.
Grüße. Können Sie mir bitte sagen, warum im Falle des folgenden Eintrags
if (x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}
if (z!=minpr1){z=minpr1; OrderDelete(ticketUP);}
Das System erzeugt ständig Fehler
: ungültiges Ticket für OrderDelete-Funktion
OrderDelete-Fehler 4051
Dem Nachschlagewerk zufolge ist es
Ungültiger Wert des Funktionsparameters
Die Parameter scheinen jedoch dieselben zu sein.
Wenn Sie jedoch die Bedingung entfernen und nur noch
OrderDelete(ticketD);
OrderDelete(ticketUP);
es wird erfolgreich gelöscht (aber ich brauche es nach Bedingung). Was mache ich falsch?
Grüße. Können Sie mir bitte sagen, warum im Falle des folgenden Eintrags
if (x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}
if (z!=minpr1){z=minpr1; OrderDelete(ticketUP);}
Das System erzeugt ständig Fehler
: ungültiges Ticket für OrderDelete-Funktion
OrderDelete-Fehler 4051
Laut dem Nachschlagewerk ist es
Ungültiger Wert des Funktionsparameters
Die Parameter scheinen jedoch dieselben zu sein.
Wenn Sie jedoch die Bedingung entfernen und nur noch
OrderDelete(ticketD);
OrderDelete(ticketUP);
es wird erfolgreich gelöscht (aber ich brauche es nach Bedingung). Was mache ich falsch?