Trading Simulator für MT5

Einloggen oder registrieren, um einen Kommentar zu schreiben
markm2001
85
markm2001  

Hallo zusammen,

habe gerade angefangen MQL5 zu programmieren und bastele gerade an meinem ersten EA.
Leider kann ich gerade am Wochenende wo ich am meisten Zeit dafür habe nicht weitermachen, da mir eine geeignete Simulationsumgebung fehlt!
Für den MT4 gibt es da ja einiges, warum nicht für den MT5?

Gruß,
Markus

Carl Schreiber
Moderator
7067
Carl Schreiber  
Simulationsumgebung

??

Du brauchst einen Broker, dort also eine Demo- oder Real-Konto, dann kriegst Du von dem die Kurse, die zum Testen und die für den/die Charts - was fehlt Dir dann noch?

markm2001
85
markm2001  

habe ich ja. Und wie teste ich dann? Mit dem Strategietester?

Mit dem habe ich so meine Probleme!
Ich habe z.B. einen kleinen EA gebaut, der mir mit iCustom einen Indikator einbindet. Das funktioniert ja auch wunderbar, nur wenn den EA dann mit dem ST starte, schmiert mir das Programm ab!
Außerdem generiert er keine Files über die File Funktionen und zeigt auch keine "Comments" (nutze ich zur Überprüfung und Fehlersuche) an. 

Was ich brauche sind fiktive oder historische Daten die meinem MT5 vorgaukeln der Markt wäre offen... 

So was gibt es für den MT4 aber wohl nicht für den MT5! Zumindestens konnet ich bisher nichts finden...

Carl Schreiber
Moderator
7067
Carl Schreiber  

Dass Du den Strategy Tester aus dem Terminal heraus startest (CTRL-R), weißt Du schon - oder?

Der Stratgie Tester braucht keine offenen Märkte, nur eine Verbindung zum Broker (s.o.), da er sich von dem die historischen Kurse holt!

Aber das habe ich schon gesagt!

Vielleicht liest Du mal hier: https://www.mql5.com/de/docs/runtime/testing.

Und das könnte Dich auch interessieren: https://www.mql5.com/de/articles/4226.

Dazu gibt es oben rechts die Lupe. Gib mal "Strategy Tester" ein und dann wähle: Dok. Artikel, Forum, ...
Individuell Strategien testen basierend auf schnellen mathematischen Berechnungen
Individuell Strategien testen basierend auf schnellen mathematischen Berechnungen
  • 2018.03.02
  • Vasiliy Sokolov
  • www.mql5.com
Der in MetaTrader 5 enthaltene Strategy Tester verfügt über leistungsstarke Funktionen zur Lösung einer Vielzahl von Aufgaben. Mit ihm können sowohl komplexe Strategien für den Handel mit Gruppen von Symbolen als auch Einzelstrategien mit einfachen Ein- und Ausstiegsregeln getestet werden. Eine derart umfangreiche Funktionalität erweist sich...
markm2001
85
markm2001  

ok, das er keine Files erzeugt nehme ich zurück, da habe ich wohl einen Fehler gemacht.

Aber ansonsten weiß ich nicht was an diesem Strategietester sinnvoll sein soll. Er ist ja schon mit der Funktion iCustom völligst überfordert und produziert nur Unfug!

Ich frage mich sowieso warum man solch ein Zusatzprogramm erstellen muss. Warum simuliert man nicht einen Datenserver mit historischen Daten, dann könnte man sich das ganze Programm sparen und hätte alle Funktionen inklusive.

Oder gibt es hier doch noch einen Vorteil von diesem ST???


Juergen Frank
716
Juergen Frank  
markm2001:

ok, das er keine Files erzeugt nehme ich zurück, da habe ich wohl einen Fehler gemacht.

Aber ansonsten weiß ich nicht was an diesem Strategietester sinnvoll sein soll. Er ist ja schon mit der Funktion iCustom völligst überfordert und produziert nur Unfug!

Ich frage mich sowieso warum man solch ein Zusatzprogramm erstellen muss. Warum simuliert man nicht einen Datenserver mit historischen Daten, dann könnte man sich das ganze Programm sparen und hätte alle Funktionen inklusive.

Oder gibt es hier doch noch einen Vorteil von diesem ST???


Hmm... das klingt mir aber eher danach das du den Strategietester noch nicht richtig verstanden hast.

Man kann zwei Sachen dort testen, wie ein Indikator arbeitet wenn man diesen z.b. aus dem Markt geholt hat oder eben einen EA.

Bei start holt sich dieser über den gemachten Zeiteinstellungen die Historischen Daten zu dem Tim Frame der getestet werden soll. Das ganz ist dann auch nur über andere Funktionen aufgefächert, das geht dann soweit das sogar mit Real Tickdaten getestet werden kann. Ich teste gerade selbst einen und das ist wirklich gut geworden!

markm2001
85
markm2001  
vielleicht ist das wirklich so. Ich werde mir die Beiträge jedenfalls nochmal durchschauen ob ich da was übersehen habe...
Otto Pauser
884
Otto Pauser  

Kleine Hinweise zum Strategietester MT5:

Ja, er hat seine Eigenheiten, ist aber imho wesentlich besser und übersichtlicher als der vom MT4.

Du startest ihn am besten aus dem Metaeditor mit Ctrl+F5 (oder dem entsprechenden Button, der aber Standardmäßig, warum auch immer, nicht angezeigt wird).

Im Metaeditor gehören sowieso viele Buttons ergänzt damit man mit ihm halbwegs arbeiten kann.


Unter Tool->Options->Debug kannst du einiges einstellen.

Und schon wird es laufen.

Bei den Eingabeparametern ist er aber etwas störrisch. Ändert man die im Metaeditor, tut sich im Tester nichts.

Ich denke das hängt mit der Optimierung zusammen.

Du stoppst den Tester und gehst auf die Seite (Reiter) Inputs, wo du die Variablen und deren Werte siehst.

Dort Rechtsclick und Defaults wählen und schon sind die aktuellen Werte drin.

Mit diesem Wissen wird es dir gelingen. Viel Erfolg beim Testen

PS: Hat mir am Anfang auch viel Kopfzerbrechen bereitet

markm2001
85
markm2001  

danke für die ausführliche Erklärung!

Momentan ist mein Hauptproblem, das er mit dem eingebundenen Indikator nicht zurechtkommt und ein Indikatorfenster nach dem anderen aufmacht...
Hier der Code: 

void fBSI(int RangePeriod,int Slowing, int AvgPeriod, bool UsingVolumeWeight, double &arrReturn[])
   {
   double arrPOS[], arrNEG[], arrMAIN[];
   ArraySetAsSeries(arrPOS,true);
   ArraySetAsSeries(arrNEG,true);
   ArraySetAsSeries(arrMAIN,true);
   ArrayResize(arrReturn,3);
  
   int bsiHandle = iCustom(_Symbol,_Period,"Eigene\\bane_strenght_index",RangePeriod,Slowing,AvgPeriod,UsingVolumeWeight);
  
   CopyBuffer(bsiHandle,0,0,1,arrPOS);
   CopyBuffer(bsiHandle,1,0,1,arrNEG);
   CopyBuffer(bsiHandle,2,0,1,arrMAIN);
  
   arrReturn[0] = arrPOS[0];
   arrReturn[1] = arrNEG[0];
   arrReturn[2] = arrMAIN[0];

hier kann ich über das Array arrReturn[] die Werte von Buffer 1-3 des Indikators abrufen und verarbeiten. Im "Normalbetrieb" funktioniert das auch problemlos. Im Strategietester macht er ein Indikatorfenster nach dem anderen auf.

Christian
2085
Christian  
markm2001:

danke für die ausführliche Erklärung!

Momentan ist mein Hauptproblem, das er mit dem eingebundenen Indikator nicht zurechtkommt und ein Indikatorfenster nach dem anderen aufmacht...
Hier der Code: 

hier kann ich über das Array arrReturn[] die Werte von Buffer 1-3 des Indikators abrufen und verarbeiten. Im "Normalbetrieb" funktioniert das auch problemlos. Im Strategietester macht er ein Indikatorfenster nach dem anderen auf.

Nutz den Debugger.

Setze Breakpoints und schau dir die Werte an bevor er das 2. Indikator Fenster aufmacht.

Und dann im Einzelschritt weiter bis das .2 Fenster aufgeht.

iCustom funktioniert im Tester. Das Problem liegt bei dir !

Dann vergleiche mit dem Beispiel:

#property indicator_separate_window 
#property indicator_buffers 1 
#property indicator_plots   1 
//---- plot Label1 
#property indicator_label1  "Label1" 
#property indicator_type1   DRAW_LINE 
#property indicator_color1  clrRed 
#property indicator_style1  STYLE_SOLID 
#property indicator_width1  1 
//--- input parameters 
input int MA_Period=21; 
input int MA_Shift=0; 
input ENUM_MA_METHOD MA_Method=MODE_SMA; 
//--- indicator buffers 
double         Label1Buffer[]; 
//--- handle des Benutzerindikators Custom Moving Average.mq5 
int MA_handle; 
//+------------------------------------------------------------------+ 
//| Custom indicator initialization function                         | 
//+------------------------------------------------------------------+ 
int OnInit() 
  { 
//--- indicator buffers mapping 
   SetIndexBuffer(0,Label1Buffer,INDICATOR_DATA); 
   ResetLastError(); 
   MA_handle=iCustom(NULL,0,"Examples\\Custom Moving Average", 
                     MA_Period, 
                     MA_Shift, 
                     MA_Method, 
                     PRICE_CLOSE // Schlusspreise verwenden 
                     ); 
   Print("MA_handle = ",MA_handle,"  error = ",GetLastError()); 
//--- 
   return(INIT_SUCCEEDED); 
 ;} 
//+------------------------------------------------------------------+ 
//| Custom indicator iteration function                              | 
//+------------------------------------------------------------------+ 
int OnCalculate(const int rates_total, 
                const int prev_calculated, 
                const datetime &time[], 
                const double &open[], 
                const double &high[], 
                const double &low[], 
                const double &close[], 
                const long &tick_volume[], 
                const long &volume[], 
                const int &spread[]) 
  { 
//--- Werte des Indikators Custom Moving Average in den Indikator-Puffer kopieren 
   int copy=CopyBuffer(MA_handle,0,0,rates_total,Label1Buffer); 
   Print("copy = ",copy,"    rates_total = ",rates_total); 
//--- beim erfolglosen Versuch geben wir das aus  
   if(copy<=0) 
      Print("Erfolgloser Versuch, Indikatorwerte Custom Moving Average zu erhalten"); 
//--- return value of prev_calculated for next call 
   return(rates_total); 
 ;} 
//+------------------------------------------------------------------+

Ich hab von Indikatoren keine Ahnung(nie benutzt).

So müstest du dein Fehler finden ....anhand von Codeschnipsel ist es schwierig dein Problem zu finden.

markm2001
85
markm2001  

folgender Fehler ist im Log:

2018.03.03 20:25:56.068 program file Indicators\Eigene\BSI_EA.ex5 read error

2018.03.03 20:25:56.068 loading of Eigene\BSI_EA EURUSD,M1 failed [532]

2018.03.03 20:25:56.068 2018.01.01 23:06:17   cannot load custom indicator 'Eigene\BSI_EA' [4802]


und es sind keine Codeschnipsel. Habe einen Test EA erstellt wo nur die Indikator Buffer geholt werden. Und auch da kommen die selben Fehler:

Hier nochmal der Code:

double arrPOS[], arrNEG[], arrMAIN[];
int bsiHandle;

int OnInit()
  {
//---
   
   ArraySetAsSeries(arrPOS,true);
   ArraySetAsSeries(arrNEG,true);
   ArraySetAsSeries(arrMAIN,true);
  
   bsiHandle = iCustom(_Symbol,_Period,"Eigene\\BSIEA",20,3,3,true);
  
   CopyBuffer(bsiHandle,0,0,1,arrPOS);
   CopyBuffer(bsiHandle,1,0,1,arrNEG);
   CopyBuffer(bsiHandle,2,0,1,arrMAIN);
  
//---
   return(INIT_SUCCEEDED);
  }
12
Einloggen oder registrieren, um einen Kommentar zu schreiben