Fehler, Irrtümer, Fragen - Seite 896

 

Grüße!

MT5 Optimizer - berechnet CustomMax korrekt?

Ich führe den Optimizer (genetische Optimierung) in MT5 5.00 Build 722 aus und habe zufällig bemerkt, dass die Optimierungsergebnisse auf eine unerwartete Weise berechnet werden.

Der Expert Advisor gibt OnTester() zurück:

Profit * Trades * (1/(MaxEquityDDPercent+1)) * RecoveryFactor

Wo:

   double Profit = TesterStatistics(STAT_PROFIT);

   double Trades = TesterStatistics(STAT_TRADES);

   double MaxEquityDDPercent = TesterStatistics(STAT_EQUITY_DDREL_PERCENT);

   double RecoveryFactor = MathAbs(TesterStatistics(STAT_RECOVERY_FACTOR));

Es wurde erwartet, dass das Ergebnis bei einem geringeren Gewinn- und Erholungsfaktor kleiner ausfallen würde, aber das ist nicht der Fall - siehe Screenshot.


Habe ich etwas nicht richtig verstanden?

Dateien:
 
MetaDriver:

Also, los geht's:

Aber ich fürchte, es wird Ihnen nicht gefallen. Mir zum Beispiel gefällt es nicht - das Diagramm zuckt und verdoppelt sich. Und ich wollte es besser machen - es sanft an die richtige Stelle bewegen...

// Interessant ist, dass es mit ChartRedraw() doppelt so schnell funktioniert wie ohne diese Funktion. Gleichzeitig ruckelt es mehr.

Es gibt immer noch ein Problem mit ChartNavigate(). Wird sie eines Tages repariert? Oder wird es nicht als Fehler angesehen?

Gibt es bereits einen Beitrag zu diesem Thema im Service Desk? Oder mehr hinzufügen? ))

 

Ausführungsfehler: Stapelüberlauf

class A {
        static  bool OrderSend( const MqlTradeRequest& request, MqlTradeResult& result, bool async_mode = false )
	void function();
};
void A::function()
{...
	OrderSend(...) // ошибка выполнения возникает здесь
	A::OrderSend(...) // не помогает
...}

Wenn wir OrderSend durch einen anderen Namen ersetzen, ist alles in Ordnung.

das Vorhandensein von Statik hat keinen Einfluss auf den Fehler

Aufrufen von A::OrderSend()- der Fehler ist davon nicht betroffen

 
A100:

Fehler bei der Ausführung eines Stapelüberlaufs

Wenn Sie OrderSend durch einen beliebigen anderen Namen ersetzen, ist das in Ordnung.


weil der Kontext aufgelöst werden muss

::OrderSend

 

Ich glaube, ich rufe nicht ::OrderSend, sondern A::OrderSend() auf.

sollte funktionieren

 
A100:

Ich glaube, ich rufe nicht ::OrderSend, sondern A::OrderSend() auf.

An welche Linie denken Sie?

die Sie gerade

void A::function()
{...
	OrderSend(...) // ошибка выполнения возникает здесь
вызывается именно ваша A::OrderSend
Wenn Sie das Terminal aufrufen wollen, tun Sie :: vor Ordersend
 
Danke, ich habe den Grund gefunden - ich ziehe die Frage zurück - ich habe sie selbst gesperrt
 
A100:
Danke, ich habe den Grund gefunden - ich entferne die Frage - ich habe sie selbst gestellt

Ich verstehe, dass Sie sich in Ihrem Ordersend ohne ::

Ich habe mich sofort daran gewöhnt, als ich im Unterricht die Begriffe "Drucken" und "Kommentieren" neu definiert habe. Jetzt mache ich das ständig :)

 
sergeev:

Ich habe gehört, dass Sie sich in Ihrem Ordersend ohne : genannt haben:

Nun, ja, obwohl A::OrderSend 3 (drei) Parameter hat, aberletzteres ist der Standard und der Compiler konnte (und sollte) nicht von ::OrderSend durch die Anzahl der Parameter unterscheiden
 
Können Sie mir sagen, wie ich eine Umfrage im Forum erstellen kann?