Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 843

 
artmedia70:
Um eine Position mit einem Ticket zu schließen, müssen Sie zunächst die genaue Ticketnummer der zu schließenden Position kennen. Dann müssen Sie die Bestellung mit der Funktion OrderSelect(ticket,SELECT_BY_TICKET) auswählen, wobei die erfolgreiche Auswahl zu überprüfen ist. Dann müssen wir den Zeitpunkt des Abschlusses des erfolgreich ausgewählten Auftrags überprüfen. Und warum? Denn wenn wir nach Ticket auswählen, wird der Pool-Parameter der Funktion OrderSelect(..., ..., pool) ignoriert (er wird nur verwendet, wenn wir nach Index auswählen). Und das bedeutet, dass wir, selbst wenn wir einen Auftrag erfolgreich ausgewählt haben, immer noch wissen müssen, in welcher Liste wir ihn ausgewählt haben - in der Liste der geschlossenen oder offenen Positionen. Es ist die Überprüfung der Schlusszeit, die es uns ermöglicht herauszufinden, "ob der Auftrag noch auf dem Markt ist". Wenn der Zeitpunkt des Abschlusses gleich Null ist, befindet sich der Auftrag noch auf dem Markt. Ist die Zeit ungleich Null, wurde der Auftrag bereits früher abgeschlossen. Und nach all diesen Vorgängen können wir einen Auftrag senden, um diesen Auftrag zu schließen.

Ich habe ein Diagramm vor mir und sehe, dass ein Auftrag offen ist. Ich beschließe, ihn zu schließen, das war's. ist nichts weiter erforderlich.

(Ich frage, weil. Ich kann mit einem "Ein-Klick-Handel"-Kreuz abschließen, aber ich bin sehr vertraut mit den Hotkeys)

 
evillive:

int OrdersTotal(); - gibt eine Zahl zurück, nicht true-false, das ist der Fehler. Wenn es keine Aufträge gibt, bedeutet das 0, und wenn es Aufträge gibt, ist es nicht nur 1.

Und es gibt keine geschlossenen Aufträge nur auf einem frisch eröffneten Konto, mit dem wir noch nicht gehandelt haben. Auch hier handelt es sich um eine falsche Verwendung der Funktion.

Und warum RefreshRates(); NACHDEM die Bestellung an den Server gesendet wurde? Es ist, als würde man erst etwas bezahlen und dann fragen: "Wie viel kostet das?

Danke, ich hab's.
 
evillive:

int OrdersTotal(); - gibt eine Zahl zurück, nicht true-false, das ist der Fehler. Wenn es keine Aufträge gibt, bedeutet das 0, und wenn es Aufträge gibt, ist es nicht nur 1.

Und es gibt keine geschlossenen Aufträge nur auf einem frisch eröffneten Konto, mit dem wir noch nicht gehandelt haben. Auch hier handelt es sich um eine falsche Anwendung der Funktion.

Aber warum sollte RefreshRates(); NACH der Übermittlung der Bestellung an den Server erfolgen? Es ist, als würde man für etwas bezahlen und dann fragen: "Wie viel kostet es?

Einmal habe ich den Ausdruck "Der Name der russischen Hauptstadt hat zwei Fehler" gehört und war schockiert. Wo könnten sie dort zu finden sein? Dann wurde mir klar, dass man zwei Fehler machen kann.

Was ich meine, ist, dass es auch mehr als einen Fehler in der Codezeile gibt, die wir besprechen.

if (!OrdersTotal()==true)

if(Negation -> Ausdruck == wahr) Natürlich können wir verstehen, wie Artem erklärt, wenn 0 dann falsch alles andere ist wahr Dann stellt sich heraus, wenn wir leugnen, dass es offene Aufträge gibt dann ... Ups... es ist einfacher, Moskau mit zwei Fehlern zu schreiben.

 
Escapee:

Ich habe ein Diagramm vor mir und sehe, dass ein Auftrag offen ist. Ich beschließe, ihn zu schließen, das war's. ist nichts weiter erforderlich.

(Ich frage, weil. Ich kann es mit einem "Ein-Klick-Handel"-Kreuz schließen, aber ich finde es sehr bequem, Tastenkombinationen zu verwenden)

Hier erkläre ich Ihnen, wie Sie es programmtechnisch richtig machen.

1. Sie haben eine Tabelle mit einem Auftrag vor sich liegen. Sie können die Ticketnummer und das Programm sehen? Das Programm muss diese Nummer kennen.

2. Sie wollen es schließen. Sie können also sehen, dass die Bestellung mit einem solchen Ticket geöffnet ist. Und das Programm? Das Programm kennt es nicht. Das Programm muss also wissen, ob der Auftrag mit einem solchen Ticket geöffnet ist oder nicht.

3. Sie können auf das Kreuz klicken, und das war's. Und das Programm muss einen Befehl geben.

Daher lautet die Schlussfolgerung wie folgt:

1. Wir finden heraus, ob es eine offene Stelle gibt

2. Wenn ja, suchen wir nach dem Ticket der gewünschten Reihenfolge

3. Wir wählen die Reihenfolge auf der Grundlage des gefundenen Tickets. Wenn wir sie erfolgreich ausgewählt haben, dann...

4. Überprüfen Sie den Zeitpunkt des Abschlusses der vom Ticket ausgewählten Bestellung. Wenn der Zeitpunkt des Abschlusses gleich Null ist, dann...

5. Wir schließen es.

 

Ich würde Ihre Antwort folgendermaßen korrigieren.

artmedia70:


1. Vor Ihnen liegt eine Tabelle mit einem Auftrag. Sie können seine Ticketnummer sehen

2. Sie wollen es schließen.

3. Sie können auf das Kreuz und den Punkt klicken...

5. Schließen Sie das.

 
AlexeyVik:

Ich würde Ihre Antwort folgendermaßen korrigieren.

Machst du immer noch Witze?
 
artmedia70:
Machst du immer noch Witze?

Ja. Es ist der freie Tag.


 
artmedia70:


d.h. es ist nicht möglich, ein Abschluss-Skript ähnlich dem Eröffnungs-Skript zu erstellen? Weil es so einfach ist... Ichhabe gedacht...
 
Escapee:
Wir können also kein Abschluss-Skript erstellen, das dem Skript für offene Aufträge ähnelt? Weil es so einfach ist... Ich habe mir gedacht...

Die Eröffnung eines Auftrags ist auch nicht so einfach - nicht mit einem einzigen Befehl zum Senden eines Handelsauftrags. Alle diese Befehle müssen in eine vollständige Funktion "verpackt" werden, die die Rückgabecodes des Handelsservers überprüft und auf diese Antworten reagiert. Prüfung auf gültige Werte, Neuberechnung, wenn im Auftrag ein falsch berechneter Wert angegeben ist, usw. usw.

Und das Schließen - dasselbe: eine separate Funktion für die Suche nach der richtigen Bestellung, die eine vollwertige Funktion für das Schließen aufruft, und nicht nur eine Codezeile mit dem Senden einer Bestellung an den Server.

 
artmedia70:

Die Eröffnung eines Auftrags ist auch nicht so einfach - nicht mit einem einzigen Befehl zum Senden eines Handelsauftrags. Alle diese Befehle müssen in eine vollständige Funktion "verpackt" werden, die die Rückgabecodes des Handelsservers überprüft und auf diese Antworten reagiert. Prüfung auf gültige Werte, Neuberechnung, wenn im Auftrag ein falsch berechneter Wert angegeben ist, usw. usw.

Warten Sie... endlich verstehen, was ich brauche...

Hier ist die Ordereröffnung, die ich brauchte - OrderSend(Symbol(),OP_SELL,0.1,Bid,3,0,0); . Und dieses Skript funktioniert.

Jetzt muss ich schließen......