Bibliotheken: BestInterval - Seite 2

 
Sergey Chalyshev:

Ich habe noch nichts getan, ich versuche, diesen Code zu kompilieren:

Dieser Code kompiliert. Virtual und BestInterval wurden gestern aktualisiert. Möglicherweise haben Sie eine ältere Version.

Er kompiliert ohne Virtual ,

er kompiliert auch ohne BestInterval,

aber er lässt sich nicht zusammen kompilieren.

Die Bibliotheken waren vor dem Update völlig unabhängig voneinander, daher gab es einen Konflikt. Die Versionen, die ich gestern gepostet habe, haben dieses Problem nicht.
 

Was soll das bedeuten?

2018.10.16 15:54:45.104 Core 1  2018.08.30 23:59:59   Amount of Delete Intervals = 0
2018.10.16 15:54:45.104 Core 1  2018.08.30 23:59:59   SUMMARY: 00:00:00 - 23:59:59 : Profit = 0.00, Total = 0, PF = Max, Mean = 0.00
2018.10.16 15:54:45.104 Core 1  final balance 2978.46 USD
2018.10.16 15:54:45.104 Core 1  OnTester result 0
Es gibt keinen weiteren Eingabeparameter aus Ihrer Bibliothek.

 
Sergey Pavlov:

Was meinen Sie damit?

Es gibt keinen einzigen weiteren Eingabeparameter aus Ihrer Bibliothek.

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien.

Bibliotheken: BestInterval

fxsaber, 2018.10.16 14:57 Uhr.

Virtual und BestInterval wurden gestern aktualisiert. Möglicherweise haben Sie eine ältere Version.

 
fxsaber:

Dieser Code lässt sich kompilieren. Virtual und BestInterval wurden gestern aktualisiert. Möglicherweise haben Sie eine ältere Version.

Danke!

Virtual wurde aktualisiert , es kompiliert.

 
fxsaber:

Der Expert Advisor kompiliert, die Intervalle für das Überspringen werden berechnet, die Datei erscheint in Common.

Stufe 1.

Aber der Parameter inBestInterval_Action ist im Tester nicht vorhanden und erscheint weder mit noch ohne VIRTUAL_TESTER.

Stufe 2.

Folglich kann ich den Test nicht unter Berücksichtigung der geworfenen Intervalle durchführen.

Ich brauche Hilfe - was mache ich falsch?

 
Mikola_2:

Der Expert Advisor wird kompiliert, die Intervalle für das Überspringen werden berechnet, die Datei erscheint in Common.

Aber der Parameter inBestInterval_Action fehlt im Tester und erscheint weder mit noch ohne VIRTUAL_TESTER.

Dementsprechend gibt es keine Möglichkeit, den Test unter Berücksichtigung der geworfenen Intervalle durchzuführen.

Ich brauche Hilfe - was mache ich falsch?

VIRTUAL_TESTER wird nur benötigt, um die Optimierung zu beschleunigen oder umzukehren. Deshalb ist es nicht vorgeschrieben, mit BestInterval zu arbeiten.

Forum zum Handel, zu automatisierten Handelssystemen und zum Testen von Handelsstrategien.

Bibliotheken: BestInterval

fxsaber, 2018.10.15 13:30

1. Nehmen Sie einen beliebigen Expert Advisor und schreiben Sie diese Zeilen an dessen Anfang

#include <MT4Orders.mqh> // https://www.mql5.com/de/code/16006

#define  BESTINTERVAL_ONTESTER // Das Optimierungskriterium ist der Gewinn des besten Intervalls.
#include <fxsaber\Virtual\Virtual.mqh> // https://www.mql5.com/de/code/22577
#include <fxsaber\BestInterval\BestInterval.mqh> // https://www.mql5.com/de/code/22710


ZY Es ist gut, dass du den Code herausgefunden hast. Wenn die Bibliotheken in der gleichen Form wie in KB sind, weiß ich nicht, warum. Vielleicht haben Sie vergessen, sie zu kompilieren, als Sie VIRTUAL_TESTER entfernt haben.

 

fxsaber:

ZY Es ist gut, dass der Code in Ordnung gebracht wurde. Wenn die Bibliotheken die gleichen sind wie in KB, weiß ich nicht, warum. Vielleicht haben Sie vergessen, sie beim Entfernen von VIRTUAL_TESTER zu kompilieren.

Ich habe eine Datei TesterEA_mq4.mq5 mit dem folgenden Inhalt erstellt:

#include <MT4Orders.mqh> // https://www.mql5.com/de/code/16006
#define  VIRTUAL_TESTER // Ausführung in einer virtuellen Handelsumgebung
#define  BESTINTERVAL_ONTESTER // Das Optimierungskriterium ist der Gewinn des besten Intervalls.
#include <fxsaber\Virtual\Virtual.mqh> // https://www.mql5.com/de/code/22577
#include <fxsaber\BestInterval\BestInterval.mqh> // https://www.mql5.com/de/code/22710
#include <..\Experts\fxsaber\TesterEA\TesterEA.mq4>

TesterEA.mq4 ist die Originaldatei von KB. Normal kompiliert.

MT4Orders, Virtual, BestInterval sind frisch von KB.

Ich habe EMA.mqh korrigiert (ein Fehler bei der Division durch Null war aufgetreten):

EMA( const int period ) : Alpha(1.0 / Periode), Wert(0)

durch

EMA( const int period ) : Alpha(2.0 / (Periode+1.0)), Wert(0)

Ich habe in BestInterval.mqh versucht, anstelle von

#ifndef  VIRTUAL_TESTER
  sinput
#endif
bool inBestInterval_Action = false; // BestInterval Aktion

zu machen.

//#ifndef VIRTUAL_TESTER
// sinput
//#endif.
sinput bool inBestInterval_Action = false; // BestInterval Aktion

BestInterval Action-Variable erscheint im Tester, mit BestInterval Action=false ist alles schön im Log, aber mit BestInterval Action=true läuft der ganze Test und nichts über Intervalle wird ins Log geschrieben....

Das ist schade... :)

MT4Orders
MT4Orders
  • www.mql5.com
Данная библиотека позволяет работать с ордерами в MQL5 (MT5-hedge) точно так же, как в MQL4. Т.е. ордерная языковая система (ОЯС) становится идентичной MQL4. При этом сохраняется возможность параллельно использовать MQL5-ордерную систему. В частности, стандартная MQL5-библиотека будет продолжать полноценно работать. Выбор между ордерными...
 
Mikola_2:

Ich habe die folgende Datei TesterEA_mq4.mq5 erstellt:

TesterEA.mq4 ist die Originaldatei von KB. Sie wurde normal kompiliert.

MT4Orders, Virtual, BestInterval sind frisch von KB.

EMA.mqh korrigiert ( Fehler bei Division durch Null):

EMA( const int period ) : Alpha(1.0 / Periode), Wert(0)

von

EMA( const int period ) : Alpha(2.0 / (Periode+1.0)), Wert(0)

Null Periode ist ein falscher Wert. Die Division durch Null ist also normal und wird absichtlich belassen, um zu zeigen, dass ein solcher Wert nicht gesetzt werden kann.

Ich habe in BestInterval.mqh versucht, anstelle von

zu machen.

BestInterval Action-Variable erscheint im Tester, mit BestInterval Action=false ist alles schön im Log, aber mit BestInterval Action=true läuft der ganze Test und nichts über Intervalle wird ins Log geschrieben....

Das ist schade... :)


Hier ist die Quelle für Action

#include <MT4Orders.mqh> // https://www.mql5.com/de/code/16006

//#define VIRTUAL_TESTER // Ausführung in virtueller Handelsumgebung
#define  BESTINTERVAL_ONTESTER // Das Optimierungskriterium ist der Gewinn des besten Intervalls.
#include <fxsaber\Virtual\Virtual.mqh> // https://www.mql5.com/de/code/22577
#include <fxsaber\BestInterval\BestInterval.mqh> // https://www.mql5.com/de/code/22710

#include <..\Experts\fxsaber\TesterEA\TesterEA.mq4>


Mit Action=true sollte im Bericht des Testers derselbe Gewinn erscheinen, der im Protokoll mit Action=false berechnet wurde.

 
fxsaber:

Für Action ist dies der Quellcode

Wenn Action = true ist, sollte im Bericht des Testers derselbe Gewinn erscheinen, der im Protokoll berechnet wurde, wenn Action = false ist.

Nö, die Steinblume kommt nicht heraus... :)

In dieser Form, wenn Action = true ist, werden keine Aufträge mehr geschlossen und die gesamte Marge wird sofort mit neuen Aufträgen aufgefressen (wahrscheinlich etwas mit CloseBy) ....

Wenn Virtual.mqh deaktiviert ist, funktioniert alles, aber die Aktionsintervalle werden ignoriert.

Und es ist eine Herausforderung, Ihren Code tiefer zu verstehen... Ich denke, ich verzichte vorerst. ;)

 
Mikola_2:

Nein, es kommt keine Steinblume heraus... :)

Wenn Action = true ist, werden in diesem Formular keine Aufträge mehr geschlossen, sondern sofort die gesamte Marge mit neuen Aufträgen aufgefressen (wahrscheinlich etwas mit CloseBy) ....

Es würde mich nicht überraschen, wenn es bei Netting ausgeführt wurde. CloseBy funktioniert dort nicht.

Wenn Virtual.mqh deaktiviert ist, funktioniert alles, aber die Aktionsintervalle werden ignoriert.

Und es ist eine Herausforderung, Ihren Code tiefer zu verstehen... Ich denke, ich verzichte vorerst. ;)

Mach es in der Hecke. Ich habe mich nicht um das Netting gekümmert, weil MT4-advisor natürlich nicht in diesem Modus laufen sollte.


Der Algorithmus zum Ignorieren schlechter Intervalle ist einfach. Der TS wird in einer virtuellen Umgebung gestartet. Dort wird die Netting-Position nur derjenigen offenen Positionen berechnet, die in die berechneten Intervalle passen. Dann synchronisiert er seine Netting-Position mit der virtuellen Position in der realen Umgebung. Dies geschieht auf die für die Analyse hässlichste, aber einfach zu implementierende Weise - CloseBy.

Eigentlich ist der Reverse-Modus auf die gleiche Weise implementiert. Ich könnte die CloseBy-Variante so umschreiben, dass sie auch auf Netting-Konten funktioniert. Ich war damit nicht beschäftigt.