[ARCHIV]Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Ohne dich kann ich nirgendwo hingehen - 5. - Seite 375

 
Chiripaha:

Ich bin nicht bereit, dem zuzustimmen. - Denn aus einer solchen Position heraus geht die Logik, die EAs am Laufen zu halten und sowohl Geld als auch Positionen korrekt zu berechnen, verloren. - Dies ist eine. Zweitens. - Wenn mein EA schläft, zum Beispiel, für 100 Millisekunden, und ein anderes beginnt, zur gleichen Zeit zu arbeiten, dann was wird passieren, dass, sobald diese 100 Millisekunden vergehen, der andere wird seine Arbeit zu stoppen... und leiten es an diesen in der Mitte zurück und so weiter... Andererseits. Ich habe gesehen (nicht selten) in EAs, wenn sie zu "schlafen" für Minuten und unzählige Male bei jeder Ausführung Block senden. - Wenn dann alle anderen Eulen während dieser Zeit nicht arbeiten, ist das auch irgendwie falsch. - Die Frage ist also durchaus berechtigt. Ich würde gerne die Logik der Operation an dieser Stelle verstehen. Aber ich habe in offiziellen Dokumenten keine detaillierte Erklärung gefunden.

Aber ich bin bereit zuzustimmen. Ursprünglich, als mql4 aufkam, hat niemand an Mehrfachwährungen gedacht, oder an Eulenrudel in einem Terminal. Es besteht also die Möglichkeit, dass dies normal ist.

Chiripaha:

Aber von zwei Übeln würde ich das letzte wählen. In diesem Fall würde ich die Eule einfach stehen lassen, da bin ich mir sicher. Wenn Sie dies nicht tun, ist es dasselbe: zumindest die Korrektheit der Neuberechnungen bleibt erhalten, obwohl ihre Arbeit verlangsamt wird.

Es ist sinnvoller, mehrere Signale zu verwenden, d. h. für jedes Symbol ein anderes Signal. Dann sammeln wir so viele Signale, wie wir brauchen, in einem Array, und alles wird von einem EA gehandelt. Da die Logik dieselbe ist, warum brauchen wir viele EAs?

Chiripaha:

Das Problem ist nicht so trivial, wie es scheint. - Meine Experimente haben nämlich gezeigt, dass die Arbeit des EAs nicht unterbrochen wird, wenn das Kästchen "EAs den Handel erlauben" deaktiviert ist - alle Berechnungen werden bei jedem Tick durchgeführt. Nur die Transaktionen des EA werden nicht an den Server gesendet. Aber wenn diese Berechnungen mit diesen "Ausrutschern" (nicht ganz korrekt) gefüllt werden, dann können diese EAs, wenn es 5-10 von ihnen gibt, die Ausführung des eigentlichen EAs, der gerade handelt, gezielt verlangsamen.

Ja, einige Programmierer legen die Kontrolle über die Handelsberechtigungen und lassen die Eule auf dieser Grundlage arbeiten. Aber es wird nicht öfter gemacht. Und wenn der Code geschlossen ist, können wir überhaupt nicht verstehen, ob der Vorgang gebremst wird oder nicht (und welche Eule genau). - Jetzt werde ich dieses Thema auf der Forensuche durchstöbern. Etwas hat sich verlangsamt.

Offensichtlich funktioniert diese Schaltfläche"EA den Handel erlauben" nur wie vorgesehen, wenn der EA-Code dies vorsieht.
 
Chiripaha:

Ich bin nicht bereit, dem zuzustimmen. - Denn aus einer solchen Position heraus geht die Logik, die EAs am Laufen zu halten und sowohl Geld als auch Positionen korrekt zu berechnen, verloren. - Dies ist eine. Zweitens. - Wenn mein EA schläft, zum Beispiel, für 100 Millisekunden, und ein anderes beginnt, zur gleichen Zeit zu arbeiten, dann was wird passieren, dass, sobald diese 100 Millisekunden vergehen, der andere wird seine Arbeit zu stoppen... und leiten es an diesen in der Mitte zurück und so weiter... Andererseits. Ich habe gesehen (nicht selten) in EAs, wenn sie zu "schlafen" für Minuten und viele Male bei jeder Ausführung Block senden. - Wenn dann alle anderen Eulen während dieser Zeit nicht arbeiten, ist das auch irgendwie falsch. - Die Frage ist also durchaus berechtigt. Ich würde gerne die Logik der Operation an dieser Stelle verstehen. Aber ich habe in offiziellen Dokumenten keine detaillierte Erklärung gefunden.

Aber von zwei Übeln würde ich das letzte wählen. In diesem Fall würde ich die Eule, bei der ich mir sicher bin, einfach stehen lassen. Wenn nicht, ist das auch nicht schlimm, denn zumindest die Korrektheit der Neuberechnungen bleibt erhalten, auch wenn ihre Arbeit verlangsamt wird.

Das Problem ist nicht so trivial, wie es scheint. - Der Punkt ist, dass meine Experimente gezeigt haben, dass, wenn das Kästchen "EAs den Handel erlauben" nicht markiert ist, die Arbeit des EAs nicht aufhört - alle Berechnungen werden bei jedem Tick auf die gleiche Weise durchgeführt. Nur die Transaktionen des EA werden nicht an den Server gesendet. Aber wenn diese Berechnungen mit diesen "Ausrutschern" (nicht ganz korrekt) gefüllt werden, dann können sie, wenn es 5-10 solcher EAs gibt, gezielt die Ausführung des eigentlichen EAs, der gerade handelt, verlangsamen.

Ja, einige Programmierer kontrollieren die Berechtigungen für den Handel und lassen die Arbeit der Eule auf dieser Grundlage aus. Aber es wird nicht öfter gemacht. Und wenn der Code geschlossen ist, können wir überhaupt nicht verstehen, ob der Vorgang gebremst wird oder nicht (und welche Eule genau). - Jetzt werde ich dieses Thema auf der Forensuche durchstöbern. Etwas hat sich verlangsamt.

Danke an Arles für die Frage, für die Erinnerung und die Aktualisierung. Ich war nicht erfahren genug, um zu verstehen, was zu diesem Thema geschrieben wurde. Ich werde es jetzt wieder tun.


Ohne auf die Einzelheiten der Codeverarbeitung des Prozessors einzugehen, wollen wir uns auf das allgemeine "Bild" beschränken: Während Sleep() wird eine Pause für die weitere Verarbeitung eben dieses Codes eingelegt (alle anderen Codes werden in UNABHÄNGIGEN parallelen Threads verarbeitet).
 
TarasBY:
Ohne auf Einzelheiten der Prozessorcodeverarbeitung einzugehen, wollen wir uns auf ein gemeinsames "Bild" beschränken: während Sleep() wird die weitere Verarbeitung dieses Codes unterbrochen (alle anderen Codes werden in UNABHÄNGIGEN parallelen Threads verarbeitet).

Tja, da haben Sie es... Und das ist ein "Überfall". Wenn ich das richtig verstehe. - Lassen Sie mich das klarstellen...

Wenn ich Sie richtig verstanden habe, Igor, werden die Expert Advisors überhaupt nicht sequentiell verarbeitet (wie ich es in meinen Experimenten getan habe), sondern parallel? Und wenn es so ist, stellt sich heraus, dass Arles Recht hat und 2 Trades parallel eröffnet werden können, wenn jedes Signal die richtigen Bedingungen erhalten hat?

Deshalb ist sie für mich wichtig - sie wird mir helfen, meine Arbeit richtig zu organisieren. Wenn man nicht versteht, was vor sich geht und wie, kann man einen großen Fehler machen.
 

Außerdem, auf den ersten Blick, funktioniert Sleep() nicht im Tester, es ist sogar irgendwo in der Dokumentation geschrieben...

Der Start des EA erfolgt mit der Funktion Start() bei Ankunft eines jeden Ticks. Wenn Sie ein Dutzend EAs haben, versuchen Sie, die Fehler zu behandeln, sie sollten angezeigt werden. Wenn Sie viele Anfragen an Maklerfirmen stellen, wird höchstwahrscheinlich eine Fehlermeldung wie "Flow is busy" erscheinen.

Bezüglich des Kontrollkästchens"Dem EA den Handel erlauben". Ja, der Expert Advisor funktioniert, aber nur Trades sind verboten, siehe das Log, es wird alles sagen.

 

Hallo, können Sie mir sagen, was dieses Skript ist?

//+------------------------------------------------------------------+
//|                                                        close.mq4 |
//|                      Copyright © 2004, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"
#property show_confirm

//+------------------------------------------------------------------+
//| script "close first market order if it is first in the list"     |
//+------------------------------------------------------------------+
int start()
  {
   bool   result;
   double price;
   int    cmd,error;
//----
   if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
     {
      cmd=OrderType();
      //---- first order is buy or sell
      if(cmd==OP_BUY || cmd==OP_SELL)
        {
         while(true)
           {
            if(cmd==OP_BUY) price=Bid;
            else            price=Ask;
            result=OrderClose(OrderTicket(),OrderLots(),price,3,CLR_NONE);
            if(result!=TRUE) { error=GetLastError(); Print("LastError = ",error); }
            else error=0;
            if(error==135) RefreshRates();
            else break;
           }
        }
     }
   else Print( "Error when order select ", GetLastError());
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
alex12:

Hallo, können Sie mir sagen, was dieses Skript ist?

Es heißt: "Schließen Sie den ersten Marktauftrag, wenn er der erste in der Liste ist".
 
alex12:

Hallo, können Sie mir sagen, um welche Art von Skript es sich handelt?


Alex, so steht es hier:

script "close first market order if it is first in the list"

Ein Skript, das den ersten Marktauftrag schließt, wenn er der erste Auftrag in der Liste ist.

D.h. so wie ich die Logik des Codes verstehe, ist es wahrscheinlicher, dass der erste offene Auftrag geschlossen wird. Wenn Sie z. B. 10 offene Aufträge haben, wird der Auftrag Nr. 1 geschlossen. D.h. diejenige, die zuerst geöffnet wurde.

 
Chiripaha:

Tja, da haben Sie es... Und das ist ein "Überfall". Wenn ich das richtig verstehe. - Damit ich das richtig verstehe...

Wenn ich es richtig verstanden habe, Igor, werden die Expert Advisors nicht sequentiell verarbeitet (wie ich es in meinen Experimenten getan habe), sondern parallel? Wenn das so ist, bedeutet das, dass Arles Recht hat und zwei Geschäfte parallel eröffnet werden können, wenn jedes Signal die richtigen Bedingungen erhalten hat?

Warum ist das wichtig für mich - es wird helfen, die Arbeit richtig zu organisieren. Wenn man nicht versteht, was vor sich geht und wie, kann man eine Menge Fehler machen.

Sergiy, woher haben Sie so ein Postulat wie "Alle Expert Advisors werden seriell vom Terminal verarbeitet"? - Im Zeitalter des parallelen Rechnens. ;)

Ich habe solche Experimente (mit der Bestimmung der Reihenfolge der Verarbeitung von Codes von Expert Advisors durch das Terminal) nicht durchgeführt - meine Antwort ist auf der Ebene der Logik. Ich habe einfach (ohne auf die Details der Bedienung des Terminals einzugehen) die aufeinanderfolgende Verarbeitung von Expert Advisors während der Handelsoperationen (erzwungen). Aber die richtigste Antwort ist meine eigene Erfahrung. Allerdings sollte man nicht vergessen, die Eingangsparameter bei der Einstellung der Erfahrung richtig zu berücksichtigen, um die erhaltenen Ergebnisse korrekt zu verarbeiten. :)

P.S. Ich habe irgendwo gelesen (vom Entwickler), dass die aktuelle Version von MT4 bis zu 8 (wenn ich mich richtig erinnere) Handelsaufträge parallel verarbeiten kann, obwohl es aus meiner Sicht" nicht klar ist, was ein Benutzerterminal ist - es wird vom DC-Server ("am anderen Ende der Leitung") geregelt. ;)

 
Chiripaha:

...

D.h. so wie ich die Logik des Codes verstehe, ist es wahrscheinlicher, dass der erste offene Auftrag geschlossen wird. Wenn Sie z. B. 10 offene Aufträge haben, wird der Auftrag Nr. 1 geschlossen. D.h. diejenige, die zuerst geöffnet wurde.


Ja, aber nur, wenn dieser erste Auftrag ein Marktauftrag ist. Wenn es sich um einen schwebenden Auftrag handelt, wird nichts passieren.
 
TarasBY:

Sergey, woher haben Sie das Postulat, dass "alle EAs vom Terminal sequentiell verarbeitet werden"? - Im Zeitalter des parallelen Rechnens. ;)

Ich habe solche Experimente nicht gemacht (mit der Bestimmung der Reihenfolge der Verarbeitung von Codes von Expert Advisors durch das Terminal) - meine Antwort ist auf der Ebene der Logik. Ich arrangiere einfach (ohne auf die Details der Bedienung des Terminals einzugehen) eine (erzwungene) aufeinanderfolgende Verarbeitung von Expert Advisors während der Handelsoperationen. Aber die richtigste Antwort ist meine eigene Erfahrung. Allerdings sollte man nicht vergessen, die Eingangsparameter bei der Einstellung der Erfahrung richtig zu berücksichtigen, um die erhaltenen Ergebnisse korrekt zu verarbeiten. :)

Das ist der springende Punkt (für die Korrektheit der Parameter des Experiments). Deshalb stelle ich diese Fragen, weil ich mir meiner eigenen Fähigkeiten nicht sicher bin und deshalb versuche herauszufinden, ob ich vielleicht etwas falsch gemacht habe, wenn diese Ergebnisse abweichen. Das ist eher der Sinn von Tests - in solchen Momenten versagt ein scheinbar gut geschriebenes Programm und man merkt, dass man irgendwo suchen muss.

Ich bin zufällig auf diese "Experimente" gestoßen. Ich habe auch Programme für parallele Arbeit geschrieben - ich habe diese Methode jetzt aufgegeben, weil sie die Effizienz nicht erhöht hat (sie kann in anderen Projekten realisiert werden). Das Ergebnis war, dass das zweite Programm erst dann gestartet wurde, wenn das erste Programm nicht verarbeitet wurde, d. h. keine Daten erhalten wurden (oder genauer gesagt, wenn es fehlschlug). Diese Reihenfolge hing von dem Fenster ab, in das ich die EA-Blöcke gestellt hatte (d. h. in welcher Reihenfolge). - Daraus schließen wir, dass die Reihenfolge der Fenster wichtig ist, d.h. die Expert Advisors werden sequentiell und nicht parallel verarbeitet. Und diese Reihenfolge hängt von der Nummerierung der Fenster in der Liste des Terminals ab.

Dies ist die Essenz der Erfahrung.

Aber vielleicht ist das auch eine falsche Interpretation meiner Ergebnisse. Deshalb versuche ich jetzt beharrlich, diese Frage zu lösen, und zwar nicht nur mit dem "Slip".