Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Chart events im Strategietester (http://www.expert-advisor.com/forum/showthread.php?t=4707)

traderdoc 23.01.16 18:46

Chart events im Strategietester
 
Wie ich bereits auch in einem anderen Forum geschrieben habe:
Chart events im Strategietester zu benutzen, wäre eine komfortable Angelegenheit.

Man könnte dann z.B. via Buttons verschiedenste Steuerungen vornehmen, ohne den Tester jedes mal zu beenden, um irgendwelche Parameter zu ändern und wieder neu zu starten.

Aber, was soll ich sagen - Metaquotes hat es verbockt!

Es ist nicht möglich, die Funktion OnChartEvent() im Strategietester anzuspringen.

Auch die OnTimer()-Funktion ist nicht im Tester benutzbar. Damit ist es nicht möglich, zeitgesteuerte Ereignisse auszulösen.

Das betrifft sowohl die Programmversion im MT4 als auch im MT5.
Sollte jemand eine Lösung haben, dann nichts wie raus damit.

I am very angry and just high pulse.

traderdoc

Raul0 23.01.16 23:22

Zitat:

Zitat von traderdoc (Beitrag 32689)
Auch die OnTimer()-Funktion ist nicht im Tester benutzbar. Damit ist es nicht möglich, zeitgesteuerte Ereignisse auszulösen.

Ich kann dazu nur eine Kleinigkeit beitragen:

Ich behelfe mir im Tester damit, dass ich über die Barzählung vorübergehend einen Auslöser einbaue, bzw. über die normale Zeit:

PHP-Code:

extern int Wartezeiteingabe 300;
bool Wait0;
int warteZeit;

//kommt ins normale OnTick
{
...
normaler Ablauf...
if( 
warteZeit() ) { mache das was sonst der OnTimer macht }
}

bool warteZeit()
{
   if ( !
Wait0 ) { warteZeit TimeLocal() + WartezeiteingabeWait0 true; }
      if ( 
Wait0 && TimeLocal() >= warteZeit ) {
         
Wait0 false;
         return(
true);
      }
return(
0);



traderdoc 24.01.16 10:58

Ja, danke, das geht sicherlich. Nur bei kleinen Timefrequenzen (< 1 Sekunde) die zuverlässig regelmäßig kommen sollen, wird das in tickschwachen Zeiten auf Dauer unbefriedigend.
Das funktioniert aber auf jeden Fall, je gößer die Timefrequenz wird und in marktfrequenten Tagenzeiten.

traderdoc

Raul0 24.01.16 13:18

Wenn es in so kleinen Zeiten sein soll, hilft nur eine Berechnungsroutine, welche man auf den benötigten Zeitintervall einstellt.
Sprich CPU Auslastung.

Aber mal grundlegend, der MT4 hat im Tester doch keine Tickdaten, sondern das kleinste ist M1 mit Datum,Zeit,Open,Hoch,Tief,Close und Volumen, den Rest simuliert er innerhalb des M1 Bars. Was macht das für ein Sinn sich in solchen Feinheiten mit dem Tester zu beschäftigen?

traderdoc 24.01.16 13:37

Zitat:

Zitat von Raul0 (Beitrag 32704)
Wenn es in so kleinen Zeiten sein soll, hilft nur eine Berechnungsroutine, welche man auf den benötigten Zeitintervall einstellt.
Sprich CPU Auslastung.

Diese Methode ist nun mal tickabhängig! Da würde es auch nichts nutzen das Zeitintervall z.B. auf 1 Sekunde zu verkleinern, wenn die Ticks nur alle 10 Sekunden kommen.

traderdoc

Raul0 24.01.16 21:03

Ja, ich verstehe.

Eine Idee war eine Schleife mit der Verzögerung solange durchlaufen zu lassen, bis ein neues Tick kommt, jedoch bleibt diese unabhängig von Außen hängen.

Dann hilft nur Metaquotes anschreiben und eine OnTime Funktion für den Tester fordern.

traderdoc 24.01.16 22:50

Zitat:

Zitat von Raul0 (Beitrag 32707)
Dann hilft nur Metaquotes anschreiben und eine OnTime Funktion für den Tester fordern.

Das ist bereits passiert.
Ich warte nun geduldig auf eine hoffentliche Antwort.

traderdoc

Ca$hDigger 25.01.16 15:00

Sehr schön das du sie angeschrieben hast, die sollen das mal beim nächsten Update beheben.

Ich glaube die Sache mit den simulierten M1 Ticks werden sie allerdings nicht ändern. Also man muss damit leben das innherhalb einer M1 Kerze zB nur 12 Ticks erzeugt werden. Wenn man sekündlich ein Aufruf braucht dann müssten mindestens 60 Ticks pro Minute simuliert werden aber ich bezweifel, dass die ihre Ticksimulation für den OnTimer() auf den Kopf stellen. Allerdings! alles was > 1 Min ist sollten die möglich machen was OnTimer() betrifft zumindest sollte dann wenn OnTimer < eine Minute dann eben mindestens jeder simulierter Tick als Trigger genommen werden.

Und OnChartEvent() sollte definitiv im visu-modus funktionieren das ist sowieso kein Zustand!

C$D

ps: es macht manchmal Sinn für Backtest und Live getrennte Logiken zu schreiben. Für Live dann so wie man es will und bei Backtest dann eine Variante die eine möglichst gute Annäherung verspricht. Ich habe das so beim Aufruf Chartsfremder Währungspaare gemacht da hier keine Ticks simuliert werden. Beim Backtest wird so eine andere Logik aufgerufen als bei Live.

yytrader 26.01.16 19:09

Hallo traderdoc,

eine Möglichkeit wäre eine Gui extern zu programmieren, deren Status könntest du dann in jedem Tick abfragen.

Vielleicht kannst du auch aus einer DLL den Status aus der Oberfläche auslesen, ich habe das aber noch nicht gemacht. Dies sollte auch im Tester funktionieren.

Gruß

yytrader

Aktien Andy 28.01.16 21:28

Zitat:

Zitat von Raul0 (Beitrag 32704)

Aber mal grundlegend, der MT4 hat im Tester doch keine Tickdaten, sondern das kleinste ist M1 mit Datum,Zeit,Open,Hoch,Tief,Close und Volumen, den Rest simuliert er innerhalb des M1 Bars. Was macht das für ein Sinn sich in solchen Feinheiten mit dem Tester zu beschäftigen?

Wenn Du M1 Daten hast und den visuellen Modus im Backtest aktivierst, dann werden die Ticks innerhalb des M1 Balkens simuliert; das stimmt.
Wenn Du aber Tickdaten hast, dann nimmt er die auch.


Alle Zeitangaben in WEZ +2. Es ist jetzt 04:44 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum