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

 
Guten Tag an alle. Ich benötige einen Roboter, der den Überblick über die Trades behält und eine Pending Order bei Close by Takeprofit erstellt, um eine geschlossene Order mit den gleichen Parametern wie eine geschlossene Order zu ersetzen. Kann ein solcher Roboter implementiert werden? Ich habe noch nie einen benutzt. Wenn Sie irgendwo eine haben, geben Sie mir bitte einen Link. Ich danke Ihnen im Voraus.
 
Zuvor war der Gewinnabschluss in der Währung der Einlage und wurde wie folgt berechnet:
double Lot = 0.1;
int KoffProfit = 10;
ProfitValue = Lot * KoffProfit * MarketInfo(Symbol(), MODE_TICKVALUE); 
Wie lässt sich diese Formel in Punkte umrechnen?
 

Ich frage mich, wie ich den Code optimieren kann, um die Eule im Tester zu beschleunigen. Können Sie mir bitte sagen, wie ich die Schleife schneller ausführen kann, etwa so:

for (int i = OrdersTotal() - 1; i >= 0; i--) {
   if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))  continue; 
   if (OrderSymbol() != Symbol())                    continue;    
   if (OrderMagicNumber() != Magic)                  continue;
   
   // работаем с ордерами      
}

oder so:

for (int i = OrdersTotal() - 1; i >= 0; i--) {
   if (OrderSelect(i, SELECT_BY_POS)) {
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) {
      // работаем с ордерами
      }
   }
}

und andere Tipps zur Beschleunigung des EA?

 
T-G: Zuvor wurde der Schlussgewinn in der Einzahlungswährung angegeben und wie folgt gezählt
Wie kann diese Formel in Punkte umgewandelt werden?
Diese Formel zu ändern macht keinen Sinn, es ist einfacher, die notwendige Order zu finden (OrderSelect()) und zu berechnen (OrderOpenPrice()-Bid)/Point ( oder OrderOpenPrice()-Ask) und zu erhalten, wie viele Pips die Order bereits hat
T-G: Und gibt es noch andere Tipps, um den EA zu beschleunigen?

In mql4 gibt es eine vollständige Prüfung der Bedingungen, d.h. alle Ausdrücke, die in Klammern if() stehen, werden bis zum Ende geprüft, so dass es manchmal sinnvoll ist, komplexe Bedingungen in mehrere Bedingungen aufzuteilen:

if(a>b && c>d) kann ersetzt werden durch if(a>b){ if (c>d)..... }

Die erste Variante des von Ihnen vorgeschlagenen Codes wird also etwas schneller arbeiten, obwohl es in der Praxis - die Aufzählung von Aufträgen belastet den Prozessor nicht sehr, mathematische Operationen belasten den Prozessor sehr, es macht Sinn, nach einer Steigerung der Codeleistung zu suchen - nicht alle Berechnungen müssen in jedem Tick ausgeführt werden

 
IgorM:

In mql4 gibt es eine vollständige Prüfung der Bedingungen, d.h. alle Ausdrücke, die in Klammern if() stehen, werden bis zum Ende geprüft, so dass es manchmal sinnvoll ist, komplexe Bedingungen in mehrere Bedingungen aufzuteilen:

if(a>b && c>d) kann ersetzt werden durch if(a>b){ if (c>d)..... }

Die erste Variante des von Ihnen vorgeschlagenen Codes wird also etwas schneller arbeiten, obwohl es in der Praxis - die Auftragssuche belastet den Prozessor nicht sehr stark, mathematische Operationen belasten den Prozessor stark - sinnvoll ist, nach einer Steigerung der Codeleistung zu suchen - nicht alle Berechnungen müssen bei jedem Tick ausgeführt werden

Ich verstehe. Danke:

Rez = OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid, Digits), iSlippage, Blue);
if (Rez) Comment("Закрыт ордер # ", OrderTicket(), "  прибыль ", OrderProfit());

oder die gleiche Normalisierung in den Bedingungen:

if (NormalizeDouble(dOrderOpenPriceBuyStop - StepTral * Point, Digits) > NormalizeDouble(Ask + Step * Point, Digits))

die Ausführung von EAs stark verlangsamt?

 
T-G: oder die gleiche Normalisierung der Bedingungen:

die Ausführung von EAs stark verlangsamt?

Versuchen Sie, es selbst mit GetTickCount() zu überprüfen, erstellen Sie ein Skript und führen Sie die Normalisierung einmal 10 000 Mal und zweimal 10 000 Mal aus, dann können Sie beurteilen, wie nützlich es für Sie ist, nach Codeabschnitten zu suchen, in denen die Normalisierung häufig ausgeführt wird. Über Print() finde ich es sogar schwer zu beantworten - werden Sie Pronta jeden Tick ausgeben? Normalerweise verlangsamen die Ausgabeoperationen den Expert Advisor erheblich, die Skripte mit Comment() laufen 10 Mal länger als ohne Ausgabe, aber andererseits geht es bei der Frage um Zweckmäßigkeit - wenn es sein muss, muss es sein.
 
T-G:

Verstehe. Danke. Aber sagen Sie mir, dass ich zum Beispiel nach Abschluss einer Bestellung drucken soll:

oder die gleiche Normalisierung in den Bedingungen:

die Ausführung von EAs erheblich verlangsamt?

Die Operation Print() ist eine Operation mit einer Datei (in diesem Fall eine Protokolldatei). Und diese Vorgänge sind SEHR langsam (im Vergleich zur Verarbeitung von Daten aus dem Speicher). SCHLUSSFOLGERUNG: Erstellen Sie eine Variable, die in init() initialisiert wird.

bool gb_VirtualTrade;
init()
{
    gb_VirtualTrade = (IsOptimization() || (IsTesting() && !IsVisualMode));
}

Und nach der Bedingung dieser Variablen drucken (dies ist EINE Option).

Das von Ihnen angeführte Normalisierungsbeispiel macht keinen Sinn, wenn wir von den angegebenen Zielen (Codeoptimierung) ausgehen. Die Normalisierung ist gemäß den technischen Anforderungen des Maklerservers ERFORDERLICH, um einen Handelsauftrag NUR für Preis und STOP auszuführen.

 
Hallo, wenn ein Expert Advisor eine Position eröffnet, sollte ich in seinem Code einen Indikator (Bedingung) schreiben, der auf den Signalen basiert, von denen er einen Auftrag eröffnet, oder sollte ich im Expert Advisor den Pfad zum Fenster eines Finanzinstruments mit installierten Indikatoren schreiben?
 

Liebe Spekulanten, Hilfe! Ich suche einen EA, der automatisch SL und TP setzt, wenn ich eine Position eröffne.

Ich bin Ihnen im Voraus sehr dankbar.

 
Guten Tag. Weiß jemand, wo man einen ZIGZAG-Indikator herunterladen kann, der den Punkt markiert, an dem ein neuer Strahl erscheint (z.B. in einer anderen Farbe). Wenn es überhaupt eine gibt...