Welches Design ist richtig? - Seite 7

 
Vladon:
Früher habe ich meinen eigenen Satz zum Schließen verschiedener Typen in Codebase veröffentlicht.
In diesem Fall geben Sie kompilierte Dateien an, was in diesem Zweig nicht von Nutzen ist.
Vladon:
https://www.mql5.com/ru/code/mt4

Und hier, sorry, falsches Forum.

Nichts für ungut.

 

Oh, das ist es nicht :-), jetzt.


https://www.mql5.com/ru/code/9052

 
int Close_This_Symbol_All()
{
//----
  string a = "Всего ордеров = " + DoubleToStr(OrdersTotal(),0)+ "\n";
  for (int Cnt = OrdersTotal(); Cnt >= 0; Cnt--) 
  {
    if(!OrderSelect(Cnt, SELECT_BY_POS, MODE_TRADES)) break;

        while (!IsTradeAllowed()) Sleep(1000);
        RefreshRates();
        if(OrderType() == OP_BUY ) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid,Digits), slip, CLR_NONE);
        if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), slip, CLR_NONE);
       Comment(a+ GetLastError());  
  }
//----
   return(0);
}
Dann sollte ein solcher Entwurf theoretisch alle Aufträge überhaupt schließen, aber er schließt nur ein Paar des aktuellen Fensters, wo liegt der Fehler?
 
Vladon:

Oh, das ist es nicht :-), jetzt.


https://www.mql5.com/ru/code/9052


Ja, Ihr Kit ist gut, aber ich kann nicht herausfinden, wo der Fehler in meinem Code ist.
 
valenok2003:

Ja, Ihr Kit ist gut, aber ich kann nicht herausfinden, wo der Fehler in meinem Code ist.

int Close_This_Symbol_All()
{
//----
  string a = "Всего ордеров = " + DoubleToStr(OrdersTotal(),0)+ "\n";
  for (int Cnt = OrdersTotal(); Cnt >= 0; Cnt--) 
  {
    if(!OrderSelect(Cnt, SELECT_BY_POS, MODE_TRADES)) break;

        while (!IsTradeAllowed()) Sleep(1000);
        RefreshRates();
        if(OrderType() == OP_BUY ) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid,Digits), slip, CLR_NONE);
        if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), slip, CLR_NONE);
       Comment(a+ GetLastError());  
  }
//----
   return(0);
}


for (int  Cnt = OrdersTotal(); Cnt >= 0; Cnt--) 
Manchmal ist die Hartnäckigkeit erstaunlich. Auf Seite 3 dieses Threads und weiter unten im Thread wurde Ihnen ein richtiges Beispiel für die Aufhebung von Befehlen gezeigt. RTFM am Ende des Tages. Wie oft muss ich Ihnen noch sagen: Verlassen Sie ein Feld. Aufträge mit der Nummer
OrdersTotal()

gibt es nicht! Dann wird es funktionieren:

if(!OrderSelect(Cnt, SELECT_BY_POS, MODE_TRADES)) break;
 
VladislavVG:
Manchmal ist die Sturheit einfach verblüffend. Auf Seite 3 dieses Threads und weiter unten im Thread wurde Ihnen das korrekte Beispiel für die Reihenfolge der rohen Gewalt gezeigt. RTFM am Ende des Tages. Wie oft muss ich Ihnen noch sagen: Verlassen Sie das Feld. Aufträge mit Nummer

gibt es nicht! Dann wird es funktionieren:


Vladislav, ich bitte um Entschuldigung, es ist nicht Sturheit, sondern eher Unaufmerksamkeit. Ich war am Experimentieren und habe den Code nicht korrigiert.

Natürlich ist sie das:

for (int  Cnt = OrdersTotal()-1; Cnt >= 0; Cnt--) 

Dies scheint jedoch nicht der Grund zu sein, denn das korrigierte Design

int Close_This_Symbol_All()
{
//----
  string a = "Всего ордеров = " + DoubleToStr(OrdersTotal(),0)+ "\n";
  for (int Cnt = OrdersTotal()-1; Cnt >= 0; Cnt--) 
  {
    if(!OrderSelect(Cnt, SELECT_BY_POS, MODE_TRADES)) break;

        while (!IsTradeAllowed()) Sleep(1000);
        RefreshRates();
        if(OrderType() == OP_BUY ) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid,Digits), slip, CLR_NONE);
        if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), slip, CLR_NONE);
       Comment(a+ GetLastError());  
  }
//----
   return(0);
}

schließt immer noch Aufträge nur für das Paar des Fensters, auf das Sie das Skript anwenden, aber nicht für alle Paare.

 

Aus dem Profil des Starters: "Ich schreibe in MQL4, einschließlich maßgeschneidert" - ein typisches Beispiel für Übereifer.

Ich weiß, dass Programmierer durchschnittlich sein können. Man gewöhnt sich daran. Und ich selbst schreibe manchmal schlechten Code, obwohl ich mich bemühe. Aber was wäre...

Ich bestätige die alte Vermutung von jemandem, dass der Anlasser Wolle im Kopf hat.

 
valenok2003:


Vladislav, ich entschuldige mich, es ist nicht Sturheit, sondern eher Unaufmerksamkeit. Ich war am Experimentieren und habe den Code nicht korrigiert.

Natürlich ist sie das:

Dies scheint jedoch nicht der Grund zu sein, denn das korrigierte Design

schließt weiterhin Aufträge nur für ein Paar des Fensters, in dem das Skript ausgelöst wird, aber nicht für alle Paare.

Wenn alle Paare, dann sind Sie nicht mit Ask richtig, Bid - Sie sind aus dem aktuellen Chart nehmen. Wenn Sie beim Abschluss von Aufträgen Fehler verarbeiten, werden diese Meldungen angezeigt.

anstelle von Ask - MarketInfo(OrderSymbol(),MODE_ASK); anstelle von Bid - MarketInfo(OrderSymbol(),MODE_BID);

Viel Glück!

ZS und ändern Sie den Namen des Skripts, denn nach dem Namen funktioniert es richtig ;).

 
gip:

Aus dem Profil des Starters: "Ich schreibe in MQL4, einschließlich maßgeschneidert" - ein typisches Beispiel für Übereifer.

Ich weiß, dass Programmierer durchschnittlich sein können. Man gewöhnt sich daran. Und ich selbst schreibe manchmal schlechten Code, obwohl ich mich bemühe. Aber was wäre...

Ich bestätige die alte Vermutung von jemandem, dass der Themenstarter Wolle in seinem Kopf hat.


Es ist natürlich schade, das zu hören. Ich nehme jedoch keine Aufträge an, die ich nicht erfüllen kann. Und Sie haben hoffentlich Verständnis dafür, dass auch die Auftragslage unterschiedlich sein kann. Und, wie jemand sagte: Es ist keine Schande, nichts zu wissen. Es ist eine Schande, nicht zu fragen.... Und so wie ich es verstehe, ist dieses Forum genau dazu da, um eine Möglichkeit zum Lernen zu bieten. Ihr Snobismus ist mir also nicht klar, und Ihre Kritik kann ich nicht akzeptieren. Obwohl ich zugeben muss, dass Sie der Klügste in diesem Forum sind.

P.S. Die Kunst des Programmierens besteht nicht in der Fähigkeit, Code zu schreiben, sondern in der Fähigkeit, einen korrekten Algorithmus zu erstellen. Das ist so, als ob man sein ganzes Leben lang einen Lada gefahren hat und dann auf Mercedes umgestiegen ist und nicht mehr weiß, wo alle Knöpfe und Schalter sind, aber deswegen ist man kein schlechter Fahrer geworden.

 
VladislavVG:

Wenn alle Paare, sind Sie nicht mit Ask richtig, Bid - Sie sind aus dem aktuellen Chart nehmen. Wenn Sie beim Schließen von Aufträgen Fehler verarbeitet haben, wird die Meldung angezeigt.

anstelle von Ask - MarketInfo(OrderSymbol(),MODE_ASK); anstelle von Bid - MarketInfo(OrderSymbol(),MODE_BID);

Viel Glück!


Vielen Dank, ich bearbeite die Fehler, es kommt die Meldung zurück - falscher Preis, aber ich kann nicht herausfinden, was falsch ist.