[Archiv!] Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Könnte nirgendwo ohne dich hingehen - 2. - Seite 212

 
dzhini:

Toll, es ist alles da. Gestern Abend gepostet, aber der Thread ist schon ziemlich weit gegangen mit Erklärungen, was ein Zauber ist und wie er zubereitet wird )))

Bitte geben Sie mir eine Antwort auf meine Frage.

Mein EA setzt BUYLIMIT und SELLLIMIT zu bestimmten Zeiten. Ich möchte, dass die schwebenden Aufträge (OP_BUY oder OP_SELL) in einer Richtung gelöscht werden, wenn der Auftrag eröffnet wird.

Dies war meine Variante:


So sieht es besser aus:

void start(){
  .....

  for(int i=OrdersTotal() -1;i>=0;i--) 
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) 
     {
      if(CalculateCurrentOrders(Symbol())>0) {Alert(CalculateCurrentOrders(Symbol()));ClosePendingOrder(OP_SELLLIMIT);} // (1) 
      if(CalculateCurrentOrders(Symbol())<0) {Alert(CalculateCurrentOrders(Symbol()));ClosePendingOrder(OP_BUYLIMIT);} //(2) 
      if(TimeCurrent() - OrderOpenTime()>=HowManyHours*60*60) {ClosePendingOrder(OP_BUYLIMIT);ClosePendingOrder(OP_SELLLIMIT);} //(3) 
     } 
   ....

}

Ohne auf die Logik einzugehen, sind das Fehlen geschweifter Klammern und die falsche Organisation von OrderSelect() sofort ersichtlich

 
eddy:

Warum sollte man diese Fragen nicht thematisch gruppieren und die Möglichkeit einbauen, dort direkt Fragen zu stellen? Das wäre ein normaler Fragebogen.

Und wenn man die Möglichkeit hinzufügt, nicht nur Fragen, sondern auch Aufgaben mit Codes/Artikeln als Antworten hinzuzufügen, erhält man das, was ich vorschlage - eine andere Website-Struktur, die den gesamten vorhandenen Inhalt umfasst

Roman, die Vorbereitungsarbeiten sind seit langem abgeschlossen, die FAQ-Ideologie wurde bereits entwickelt und wird in einer speziellen Abteilung veröffentlicht, die technischen Grundlagen wurden mit der Verwaltung abgestimmt.
Warten Sie die Freigabe des Zweigs ab, um zu sehen, wie er mit Ihren Ideen übereinstimmt, und wenn nötig, können Sie Ihr Projekt entwickeln und umsetzen, wenn es in Ihrer Macht steht.
 
Sergey_Rogozin:

So sieht es besser aus:

Ohne auf die Logik einzugehen, sind das Fehlen geschweifter Klammern und die falsche Organisation von OrderSelect() sofort ersichtlich

Können Sie erklären, was mit OrderSelect() falsch ist? Denn, wie ich schon schrieb, wenn ich die Aufträge in Richtung des bereits geöffneten Handels entferne, geht alles ohne Probleme. Auch geht es ohne Probleme, alle Aufträge in streng definierter Zeit zu entfernen.
 
dzhini:
Könnten Sie bitte erklären, was mit OrderSelect() falsch ist. Denn, wie ich schon schrieb, wenn ich die Aufträge in Richtung des bereits geöffneten Handels entferne, geht alles ohne Probleme. Wir haben auch keine Probleme, alle Aufträge zu einem bestimmten Zeitpunkt zu löschen.
Ohne den Code gesehen zu haben, ist es schwer, eine Aussage zu treffen. Vielleicht funktioniert OrderSelect() so, wie es ist, wenn Sie nicht nach Symbol, Magier, Art der Operation usw. auswählen müssen.
 

Dies ist im Wesentlichen ein Versuch, eine Praxis für die Zukunft zu schaffen, um mit verschiedenen Gruppen von Aufträgen (nicht nur zwei) zu arbeiten.

Wenn der Orderview-Zyklus läuft, geht der EA vor dem Alert ganz gut, aber er will nicht richtig mit der Löschfunktion arbeiten:

void ClosePendingOrder(int ORDERType)
{
 while(!IsTradeAllowed()) Sleep(100);
 if(OrderType()==ORDERType)
 {
 if(OrderSymbol()==Symbol())
 { 
 if(!OrderDelete(OrderTicket(),CLR_NONE))
   Print("Order close error",GetLastError());
return;
      }
    }
}
 
granit77:
Die Ideologie der FAQ ist vorgefertigt und die technischen Grundlagen sind mit der Verwaltung abgestimmt.
sehen Sie, ob es Ihren Vorstellungen entspricht, und entwickeln Sie gegebenenfalls Ihr eigenes Projekt
Habe ich die Antwort bekommen: "Alles ist bereits durchdacht und mit der Verwaltung abgestimmt (d.h. es gibt keine Möglichkeit, es zu ändern), wenn etwas nicht Ihren Vorstellungen entspricht, können Sie Ihre eigenen machen"?
 
eddy:
Habe ich die Antwort richtig verstanden: "Alles ist bereits durchdacht und mit der Verwaltung abgestimmt (d.h. es gibt keine Möglichkeit, es zu ändern), wenn etwas nicht Ihren Vorstellungen entspricht - können Sie Ihre eigenen machen"?
"Alles ist schon vor dir gestohlen worden")))
 
dzhini:

Dies ist im Wesentlichen ein Versuch, eine Praxis für die Zukunft zu schaffen, um mit verschiedenen Gruppen von Aufträgen (nicht nur zwei) zu arbeiten.

Wenn der Orderview-Zyklus läuft, geht der EA vor dem Alert ganz gut, aber er will nicht richtig mit der Löschfunktion arbeiten:

Es sieht so aus, als ob alles an seinem Platz ist. Ich weiß es nicht.
 
Sergey_Rogozin:

Wie funktioniert das? ClosePendingOrder(OP_SELLLIMIT);} // (1) ?

Sein Code.

Der Code der Funktion zum Löschen eines Auftrags ist in der Meldung selbst angegeben... Vielleicht habe ich die Frage nicht verstanden, aber ich werde versuchen, sie so zu erklären, wie ich sie verstanden habe:

Eine for-Schleife erstellt eine Aufzählung aller verfügbaren offenen und schwebenden Aufträge. ClosePendingOrder(OP_SELLLIMIT) - wählt aus dieser Liste diejenigen aus, die dem Währungssymbol und dem Parameter OP_SELLLIMIT entsprechen. Sobald es diese Übereinstimmungen findet, löscht es diesen schwebenden Auftrag.

 
dzhini:

Ich habe den Code für die Funktion "Auftrag löschen" in eben dieser Nachricht angegeben... Vielleicht habe ich die Frage nicht verstanden, aber ich werde versuchen, sie so zu erklären, wie ich sie verstanden habe:

Eine for-Schleife erstellt eine Aufzählung aller verfügbaren offenen und schwebenden Aufträge. ClosePendingOrder(OP_SELLLIMIT) - wählt aus dieser Liste diejenigen aus, die dem Währungssymbol und dem Parameter OP_SELLLIMIT entsprechen. Sobald es diese Übereinstimmungen findet, entfernt es diesen schwebenden Auftrag.

Ich habe es bereits herausgefunden. Ich habe es mir zuerst nur unaufmerksam angesehen.

Ich kann den Fehler nicht erkennen.