Frage zu OrderModify() - Seite 2

 
WhooDoo22:

Aha! Ich habe die Ticketnummer von 0 auf 1 geändert und alles lief wie am Schnürchen. Ja, ich hatte Unrecht, William... Die Funktion OrderSelect() war ein Problem. Offensichtlich muss die OrderSelect()-Funktion ein Ticket auswählen. Wenn die Ticketnummer 0 ist, welches Ticket wählt der EA dann aus? :O "?". Ich danke Ihnen beiden für Ihre Hilfe.

Ich danke Ihnen.

Die Ticketnummer wird NIE 0 sein... das ist keine gültige Ticketnummer.


Bitte beziehen Sie sich auf diesen Thread:https://www.mql5.com/en/forum/142545
 

Simon, ich verstehe, dass 0 keine gültige Ticketnummer ist, weil 0 bedeutet, dass es keine Tickets zur Auswahl gibt. 1 steht für ein Ticket UND die spezifische Ticketnummer, die die Funktion OrderSelect() auszuwählen versucht.

Ich werde den Thread lesen. Vielen Dank für die Veröffentlichung.

Ich danke Ihnen.

 
WhooDoo22:

Soweit ich weiß, ist 0 keine gültige Ticketnummer, weil 0 bedeutet, dass es keine Tickets zur Auswahl gibt. 1 steht für ein Ticket UND die spezifische Ticketnummer, die die Funktion OrderSelect() gerade auswählt.

Nein, das ist nicht korrekt. Null als Ticketnummer bedeutet gar nichts, sie ist UNGÜLTIG. OrdersTotal() == 0 bedeutet, dass es keine Aufträge gibt ... es ist offensichtlich, dass Sie die Ergebnisse verschiedener Funktionen und Ticketnummern mit Auftragspositionen verwechseln


Machen Sie nicht genau das, was Sie vorher gemacht haben ... es sei denn, Sie wollen genau das gleiche Ergebnis. Sie können nicht davon ausgehen, dass Sie die richtige Ticketnummer haben ... . . Sie müssen sie im Auftragspool finden und dann auswählen ...

Wenn Sie es lernen wollen, machen Sie diese Übung:

  • Eröffnen Sie ein neues Demokonto bei einem beliebigen Broker
  • platzieren Sie eine Markt-Order für 0,1 Lots ohne TP oder SL
  • Schreiben Sie einen Code, der die richtige Ticketnummer für diese Order findet, verwenden Sie die Ticketnummer, um die Order auszuwählen, ändern Sie sie so, dass sie einen TP und SL hat und schließen Sie sie schließlich.

 
RaptorUK:

Nein, das ist nicht korrekt. Null als Ticketnummer bedeutet gar nichts, sie ist UNGÜLTIG. OrdersTotal() == 0 bedeutet, dass es keine Bestellungen gibt ... es ist offensichtlich, dass Sie die Ergebnisse von verschiedenen Funktionen und Ticketnummern verwechseln

Wenn Sie lernen wollen, machen Sie diese Übung:

  • Eröffnen Sie ein neues Demo-Konto bei einem beliebigen Broker
  • platzieren Sie eine Marktorder für 0,1 Lots ohne TP oder SL
  • Schreiben Sie einen Code, der die richtige Ticketnummer für diese Order findet, verwenden Sie die Ticketnummer, um die Order auszuwählen, ändern Sie sie so, dass sie einen TP und SL hat und schließen Sie sie schließlich.


Haben Sie die Übung ausprobiert? Zeigen Sie Ihren Code, wenn Sie es geschafft haben...
 

Simon,

Ich werde dieses Projekt programmieren. Es sollte ein Kinderspiel sein. Ich habe bereits einen Großteil der Arbeit erledigt ;)

Ja, es macht mir nichts aus, diese Übung zu machen, denn Sie haben mich immer unterstützt.

Vielen Dank dafür.

 

Simon,

Erledigt. Ich bin davon ausgegangen, dass Sie die Datei im Skriptformat haben wollen, so dass Sie sie einfach per Drag & Drop auf einen Chart ziehen und warten können, bis der EA ein paar Zahlen berechnet hat, und dann zusehen, wie er eine Order aus dem Markt zieht.

Die Unterschiede zwischen dem, was ich derzeit baue, und diesem Projekt sind...

Ich baue gerade:

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)){

Dieses Projekt:

if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES)){

Der Grund, warum ich "if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES)){" verwendet habe, ist, dass ich mit einem Orderpool und nicht mit einer vordefinierten spezifischen Ticketvariable arbeite.

Mein derzeitiger Build für Volume II verwendet vordefinierte Variablen, weil ich bestimmte Tickets auswählen muss, um die Strategie von Volume II auszuführen. Dieses Projekt wurde entwickelt, um einfach eine Bestellung in einem Wimpernschlag zu schließen.

Ich hatte tatsächlich ein paar Fragezeichen im Kopf, als ich die Funktionsausführung mit dem Ask/Bid-Preis kodierte. Das liegt daran, dass ich beim Senden/Schließen von Aufträgen normalerweise nur "Ask"/"Bid" eingebe, aber mir wurde klar, dass ich eine Variable definieren musste, die entweder Ask- oder Bid-Preise enthalten konnte, je nachdem, ob es sich bei dem Auftrag auf dem Markt um einen Verkaufs- oder Kaufauftrag handelte. Dann fügte ich einfach das übliche "wenn die Summe der Aufträge größer als Null ist" ein, und schon war ich fertig. Das sollte eigentlich genügen.

Ich danke Ihnen.

Dateien:
 

OK, es ist nicht das, was ich beabsichtigte, aber ich sollte klarer mit meiner Anforderung gewesen sein . . Ihr Code setzt keinen SL & TP . . . aber lassen Sie mich trotzdem meine Anforderung überarbeiten . . .

Mit demselben Demo-Konto...

  • Platzieren Sie eine Marktorder für 0,1 Lots ohne TP oder SL auf GBPUSD, eine auf USDJPY und eine auf EURUSD ... vergessen Sie die Reihenfolge, in der Sie diese Orders platziert haben
  • ohne Rücksicht auf die Reihenfolge, in der die Geschäfte getätigt wurden, und in der Annahme, dass Sie die Anzahl der erteilten Aufträge nicht kennen, einen Code schreiben, der die korrekte Ticketnummer für den auf USDJPY erteilten Auftrag findet
  • die Ticketnummer in das Protokoll in der Form "Ticketnummer für USDJPY = " ausgibt
  • Verwenden Sie dann die Ticketnummer, um die Order auszuwählen, ändern Sie sie so, dass sie einen TP und SL hat und schließen Sie sie schließlich.

Wenn Sie fertig sind, zeigen Sie bitte Ihren Code und die Zeile aus dem Log, die die Ticketnummer zeigt.

 

Simon,

Ah, Entschuldigung, ich habe Ihre ersten Anweisungen nicht vollständig gelesen und nicht codiert, was Sie verlangt haben. Nun gut, du hast eine neue Anforderungsliste hinzugefügt, also werde ich mich an die Arbeit machen.

Bevor ich das tue, werde ich erklären, was ich tun werde...

1. Finde die Ticketnummer des Auftrags, der auf USDJPY platziert wurde.

2. Drucken Sie die Ticketnummer in das Protokoll in der Form "Ticketnummer für USDJPY = ".

3. Verwenden Sie die Ticketnummer, um die Order auszuwählen UND die Order so zu ändern, dass sie einen TP & SL hat und schließen Sie sie.

4. Zeigen Sie den Code und eine Zeile aus dem Protokoll, die die Ticketnummer zeigt.


Damit möchte ich klarstellen, dass wir auf der gleichen Seite sind.

Ja, ich kann 1. machen (offensichtlich kann ich die "Währungsfunktionen" nicht verwenden, um die Tickets zu isolieren, richtig?)

Ja, ich kann 2 machen.

3. Meinen Sie nicht, dass Sie die OrderSelect()-Funktion verwenden sollten, um die Order auszuwählen UND sie so zu ändern, dass sie einen TP und SL hat, und sie zu schließen?

4. Natürlich zeige ich den Code ;)... eine Zeile aus dem Log, die die Ticketnummer zeigt (Sie hätten auch einen "visuellen Schnappschuss" des Logs mit der Ticketnummer verlangen können. Egal)

Bitte posten Sie zuerst eine Antwort, bevor ich mit der Aufgabe beginne.


Ich danke Ihnen.

 
WhooDoo22:


In diesem Sinne möchte ich klarstellen, dass wir auf derselben Seite stehen.

Ja, ich kann 1. machen (offensichtlich kann ich die "Währungsfunktionen" nicht verwenden, um die Tickets zu isolieren, richtig?)

Ja, ich kann 2 machen.

3. Meinen Sie nicht, dass Sie die OrderSelect()-Funktion verwenden sollten, um die Order auszuwählen UND sie so zu ändern, dass sie einen TP und SL hat, und sie zu schließen?

4. Natürlich zeige ich den Code ;)... eine Zeile aus dem Protokoll, die die Ticketnummer zeigt (Sie hätten auch einen "visuellen Schnappschuss" des Protokolls mit der Ticketnummer verlangen können. Egal)

Sie können jede beliebige Funktion verwenden, solange Ihr Code die Anforderungen erfüllt. . und wenn Sie das tun, verstoßen Sie nicht gegen die Bedingung, z.B."ohne Berücksichtigung der Reihenfolge, in der die Trades platziert wurden, und in der Annahme, dass Siedie Anzahl derplatzierten Orders nicht kennen" :-)
 
Wie läuft es? Brauchen Sie irgendwelche Erklärungen oder Hinweise?