Ist die lineare Verlangsamung ein Programmierfehler oder ein Merkmal von MT4? - Seite 4

 

allein die Konstruktion unten ist es wert.


    bool Ok=true;
     for(i=OrdersTotal()-1;i>=0;i--){//проверяем наличие ордеров
      if(OrderSelect(i,SELECT_BY_POS)){
       if(OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic){
        if(OrderType()==OP_SELLSTOP||OrderType()==OP_SELLLIMIT){
         Ok=false;
        }}}}

ein bisschen mehr

    bool Ok=true;
    for(i=OrdersTotal()-1;i>=0;i--){//проверяем наличие ордеров
      if(OrderSelect(i,SELECT_BY_POS)){
        if(OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic){
          if(OrderType()==OP_SELLSTOP||OrderType()==OP_SELLLIMIT){
            Ok=false;
          }
        }
      }
    }

und wir wissen bereits, was in welcher Reihenfolge ausgeführt wird. Dies ist nur eine Formatierung. Sie können den Code aber auch in logisch konsistente Operationen zerlegen und diese in separate Funktionen aufteilen. Dadurch wird der Hauptalgorithmus von einem Haufen durcheinandergewürfelten Codes befreit.

 
micle:

Das Problem ist die Verdoppelung des Codes und die übermäßige Anzahl von bedingten Anweisungen. Tatsächlich besteht der Code zu 99 % aus Zeilen, die irgendwie den bedingten If-Operator einschließen; ich bin sicher, wenn Sie sich damit befassen, könnte die Anzahl der Vergleiche um das Zehnfache reduziert werden. Das verlangsamt nicht nur die Ausführung, sondern dieser Code ist auch schwer zu lesen. Eine Person, die Ergänzungen vornimmt, hat mindestens 2 Hauptaufgaben:

1 - es nicht kaputt zu machen

2 - Hinzufügen der erforderlichen Funktionen.

Unleserlicher Code verursacht ohnehin zusätzliche Duplizierung aller möglichen Prüfungen und Vergleiche - und das ist wiederum ein zusätzlicher Aufwand. Wenn ich mir den Code ansehe, erinnere ich mich persönlich an die Zeit vor 25 Jahren, als ich gerade mit dem Programmieren angefangen habe und es aus dem Handbuch für den Atari 800XL PC gelernt habe, ohne Lehrer, einfach weil es interessant war.

Natürlich ist es interessant, über welches "wenn" wir sprechen, es gibt wahrscheinlich mein TOR - wo ich schreibe "wenn so, dann so", und der Programmierer interpretiert es im Code, und es gibt "wenn" in Bezug auf die direkte Arbeit mit Aufträgen, und es gibt eine Menge von Operationen mit Aufträgen...

Ich dachte natürlich, es handele sich um eine Art Schleife, deren Ausführung zu einer mehrfachen Überprüfung der Auftragsbedingungen führt. Und es stellt sich heraus, dass die Situation nur korrigiert werden kann, indem der Code von Grund auf neu geschrieben wird?

 
micle:

allein die Konstruktion unten ist es wert.

ein bisschen mehr

und wir wissen bereits, was in welcher Reihenfolge ausgeführt wird. Dies ist nur eine Formatierung. Sie können den Code aber auch in logisch konsistente Operationen zerlegen und diese in separate Funktionen aufteilen. Auf diese Weise wird der Hauptalgorithmus von einem Haufen durcheinandergewürfelten Codes befreit.

Aber beeinträchtigt das nicht die Leistung in irgendeiner Weise?

 
micle:

Probleme mit doppeltem Code

Die Vervielfältigung hat nichts damit zu tun und auch nichts mit "wenn". Die wirkliche Verlangsamung ergibt sich aus der Arbeit mit Haftbefehlen.
 
micle:

allein die Konstruktion unten ist es wert.


ein bisschen mehr

und wir wissen bereits, was in welcher Reihenfolge ausgeführt wird. Dies ist nur eine Formatierung. Sie können den Code aber auch in logisch konsistente Operationen zerlegen und diese in separate Funktionen aufteilen. Dadurch wird der Hauptalgorithmus von einem Haufen durcheinandergewürfelten Codes befreit.

Sehr starke Argumente, Ihr Code, wo kann ich einen erfahrenen Programmierer sehen?
 

rev. 1.1

Für die Festlegung eines Stop-Loss und die Filterung von Pending Orders verwenden wir zwei Varianten von Mirror MA.
maMirror - wird mit der Standard-iMA-Funktion berechnet, funktioniert einmal pro Balken, die Daten werden von den Eröffnungskursen des Balkens übernommen
Berechnungsalgorithmus:

Zu verkaufen:
Ausgangsberechnungspunkt maMirror=iMA+pipsXHmaM(o/b)
anschließender Berechnungspunkt maMirror=maMirror(1)-(iMA(0)+pipsXHmaM(o/b)-iMA(1)+pipsXHmaM(o/b))
die Berechnung ist nach dem Berechnungsendpunkt abgeschlossen.

Zu kaufen:
Ausgangsberechnungspunkt maMirror=iMA-pipsXHmaL
anschließender Berechnungspunkt maMirror=maMirror(1)-(iMA(0)-pipsXLmaM-iMA(1)-pipsXLmaM)
Die Berechnung wird nach dem Endpunkt der Berechnung abgebrochen.


Um die ToR zu vereinfachen, ist es notwendig, zwei Berechnungsblöcke einzufügen, die in ihrer Arbeitsweise und ihren Variablen unabhängig voneinander sind und vom Benutzer eingestellt werden können
maMBlock=0 - keine Blöcke verwenden (Standard-Stop-Loss wird verwendet)
maMBlock=1 - nur Block #1 verwenden.
maMBlock=2 - nur Block #2 verwenden (Standard-Stop-Loss wird verwendet)
maMBlock=3 - beide Blöcke verwenden

Block 1
Berechnung des Stop-Loss. Der Stop-Loss wird neu berechnet und die Order wird bei jedem Takt um den Wert von maMirror aktualisiert.
1 Die Variable StartPoint wird verwendet, um den Startpunkt für die Berechnung zu bestimmen, wenn StartPoint=1 (die Berechnung wird nach der Berührung von maT durchgeführt), wenn StartPoint=2 (die Berechnung wird nach der Eröffnung des Auftrags durchgeführt).
1.1 Wenn StartPointO=1 ist, wird die Berechnung abgeschlossen, nachdem maT berührt wurde;
1.2 Wenn StartPointO=2, wird die Abrechnung nach Abschluss des Auftrags beendet;
1.3 Kann der Stop Loss von maMirror nicht gesetzt werden, wird die Order geschlossen.
1.4 Levl_Zerro=0 (nicht verwendet), Levl_Zerro!=0 (der Stop-Loss wird auf den angegebenen Höchstwert aktualisiert, ausgehend vom Eröffnungskurs, ein negativer Wert bedeutet, dass der Stop-Loss in einen positiven Wert umgewandelt wird)

Block 2
Berechnung der Filterung für schwebende Aufträge
0.1 Um eine Order zu kaufen, wird die Order platziert, wenn maMirror>offener Preis der schwebenden Order
0.2 Zum Verkauf werden die Aufträge platziert, wenn maMirror<offener Preis des anhängigen Auftrags
1 Die Variable StartPoint wird verwendet, um den Startpunkt für die Berechnung zu bestimmen, wenn StartPoint=1 (die Berechnung wird nach der Berührung von maT durchgeführt), wenn StartPoint=2 (die Berechnung wird nach der Eröffnung des Auftrags durchgeführt).
1.1 Wenn StartPointB=1 ist, wird die Berechnung abgeschlossen, nachdem maT berührt wurde;
1.2 Wenn StartPointB=2 (die Abrechnung endet nach Abschluss des Auftrags);
2. Wenn maMirrorDell=0 (nicht verwendet) maMirrorDell=1 (alle offenen Aufträge werden gelöscht, wenn die Bedingungen von Punkt 0 nicht zutreffen)

Benutzer-Variablen
maMirrorO (Einstellungen von iMA)
maMirrorB (iMA-Einstellungen)
StartPointO
StartPointB
pipsXHmaMo
pipsXLmaMo
pipsXHmaMb
pipsXLmaMb
maMBlock

maMirrorDell

Hilfe bei der Schätzung des Auftrags, Kunde möchte einen neuen Auftrag, weiß nicht, wie viel er schätzen soll) Da ich kein Programmierer bin, bin ich Ingenieur der Luft- und Raumfahrtakademie)

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
Das erste und vielleicht wichtigste Problem ist, dass der Code unlesbar und unstrukturiert ist. Sie haben vielleicht eine ganz klare ToR. Wenn man die ToR versteht und den Code in die richtige Richtung schreibt, bringt das (in der Regel) einen erheblichen Gewinn an Ausführungsgeschwindigkeit, kostet aber auch anderes Geld.
 
-Aleks-:

Beeinträchtigt dies die Leistung in irgendeiner Weise?

In diesem speziellen Beispiel hat es keine Auswirkungen. Ich möchte nicht mit einer solchen Formatierung im gesamten EA-Skript umgehen, noch möchte ich es komplett neu formatieren
 
zfs:
Sehr starke Argumente, Ihr Code, wo kann ich einen erfahrenen Programmierer sehen?
Mein Code ist nicht öffentlich zugänglich. Kommerzielle Entwicklungen arbeiten auf und um hochbelastete Webserver herum. Insbesondere berechnet mein Code im Rahmen des DorogaTV-Projekts die Staus auf den Straßen "mehrerer" Städte
 
TheXpert:
Die Vervielfältigung hat nichts damit zu tun, auch nicht die Wenns. Die wirkliche Verlangsamung ist durch die Arbeit mit Aufträgen gegeben.

Arbeiten mit Aufträgen im TK-Code, oder vielleicht TK selbst, oder MT4 arbeiten mit Aufträgen im Allgemeinen?