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 MQL5 (http://www.expert-advisor.com/forum/forumdisplay.php?f=221)
-   -   EA funktioniert im Chart - nicht im Tester?! (http://www.expert-advisor.com/forum/showthread.php?t=7213)

TraderMike 07.07.22 08:10

EA funktioniert im Chart - nicht im Tester?!
 
Hallo
EA funktioniert im Chart aber nicht im Tester!

Fehlermeldung: history cache build error

Keine Kompilierfehler oder Warnings
Keine Fehlermeldungen im Journal oder Expert Log
Keine Fehlermeldungen im Tester Log

Code:

FP        0        07:16:06.333        Startup        MetaTester 5 x64 build 3320 (03 Jun 2022)
HF        0        07:16:06.341        Server        MetaTester 5 started on 127.0.0.1:3000
OO        0        07:16:06.343        Startup        initialization finished
NM        0        07:16:06.641        127.0.0.1        login (build 3320)
HJ        0        07:16:06.647        Network        4412 bytes of account info loaded
EL        0        07:16:06.647        Network        1478 bytes of tester parameters loaded
OI        0        07:16:06.647        Network        708 bytes of input parameters loaded
GO        0        07:16:06.647        Network        402 bytes of symbols list loaded (68 symbols)
GJ        0        07:16:06.648        Tester        expert file added: Experts\Advisors\1.ex5. 172075 bytes loaded
CK        0        07:16:06.649        Tester        7492 Mb available, 93 blocks set for ticks generating
PN        0        07:16:06.649        Tester        initial deposit 10000.00 USD, leverage 1:100
CK        0        07:16:06.650        Tester        successfully initialized
FQ        0        07:16:06.650        Network        169 Kb of total initialization data received
FD        0        07:16:06.650        Tester        AMD Ryzen 7 3700X 8-Core, 11998 MB
QL        0        07:16:06.656        Symbols        GBPUSD: symbol to be synchronized
LH        0        07:16:06.656        Symbols        GBPUSD: symbol synchronized, 3720 bytes of symbol info received
HL        0        07:16:06.657        History        GBPUSD: load 27 bytes of history data to synchronize in 0:00:00.000
DS        0        07:16:06.657        History        GBPUSD: history synchronized from 2020.01.01 to 2022.06.28
CK        0        07:16:06.721        History        GBPUSD,Daily: history cache allocated for 700 bars and contains 312 bars from 2020.01.01 00:00 to 2020.12.31 00:00
LI        0        07:16:06.721        History        GBPUSD,Daily: history begins from 2020.01.01 00:00
RH        0        07:16:06.722        Tester        GBPUSD,Daily (DecodeGlobal-Server): every tick generating
GE        0        07:16:08.316        History        GBPUSD,Monthly: history cache allocated for 32 bars and contains 12 bars from 2020.01.01 00:00 to 2020.12.01 00:00
OJ        0        07:16:08.316        History        GBPUSD,Monthly: 1 bar from 2021.01.01 00:00 added
DS        0        07:16:08.316        History        GBPUSD,Monthly: history begins from 2020.01.01 00:00
NI        2        07:16:08.392        History        : history cache build error
CP        2        07:16:08.472        History        : history cache build error
.....snip

Weitere Probleme: StringConcatenate, funktioniert nicht im Loop, EA detached sich vom Chart...keine Fehlermeldung!
Wurde bereits mehrmals im MQL5 Forum beschrieben...
Aussagen:
"You have to deal with this error"
"MetaTrader 5 has no problems"
"Try StringAdd instead"
= Für unvorgesehene MT5 Ergebnisse oder Verhalten, muss es immer und überall Error, Emergency Routinen geben,
was den Code zeilemäßig verdoppelt.

Und noch eines:
iStochastic produziert Memory Leaks (Garbage Collection, wird andere Indis auch betreffen)->gogl

Und noch eines: Time[] array error, trotz array resize, Workaround mit iTime

...Umso länger ich mich mit MT5 befasse umso schlechter wird meine Meinung (viele Fehler wurden bereits gelistet),
das der EA im MQL4 mit über 7000 Code Zeilen ohne Probleme läuft versteht sich von selbst.
1 Monat Neuschreiben (Ohne MQL4 Kompatibilität) auf native MQL5 fürs Nirvana...
Nicht einmal 30 Jahre C/C++ Coding Erfahrung helfen bei er Crapware!

Denke ich beerdige das Projekt MT4->MT5 fürs erste und mache dann weiter wenn Metatrader,
bzw. die Broker ihre MT4 Server Umgebung deaktivieren-was sicher nicht so schnell passieren wird,
ausserdem bin ich da längst in Rente, da habe ich genug Zeit zum ärgern und kopfschütteln

Mike

AchJa: Von Profi Software sind wir da Welten entfernt, nicht einmal auf die Domain0-X kann man zugreifen um HFT, Arbitrage,
Korrelation, Parallel Trading in einem Terminal mit verschiedenen Brokern gleichzeitig machen zu können
...mit nur einem Broker im Wechsel geht das natürlich, oder es braucht mehrere MT5 Installationen.
= kein Vorteil gegenüber MT4

Indikator-Trading 07.07.22 10:53

Zitat:

Zitat von TraderMike (Beitrag 46167)
EA funktioniert im Chart aber nicht im Tester!

Fehlermeldung: history cache build error

Das deutet eher darauf hin dass du ein Problem mit deinen historischen Daten hast, als mit deinem EA.

Zitat:

Zitat von TraderMike (Beitrag 46167)
AchJa: Von Profi Software sind wir da Welten entfernt, nicht einmal auf die Domain0-X kann man zugreifen um HFT, Arbitrage,
Korrelation, Parallel Trading in einem Terminal mit verschiedenen Brokern gleichzeitig machen zu können
...mit nur einem Broker im Wechsel geht das natürlich, oder es braucht mehrere MT5 Installationen.
= kein Vorteil gegenüber MT4

Bleibst du dann dennoch bei MT4, weil der die o.g. schwächen ja auch hat?

TraderMike 07.07.22 11:59

War auch mein Verdacht, aber mehr als History löschen und neu laden geht nicht.
Eventuell liegt es auch am Broker, müßte einen 2ten MT5 installieren, ...

Natürlich hat MT4 die gleichen Nachteile wie MT5, für das Live Trading braucht es kein OOP und Multithreading auch nicht, da sowieso immer alles seriell abgearbeitet wird. Die 2-5ms Vorteil bei einem Threading sind im Retail belanglos, im HFT natürlich Pflicht, aber da kommt sowieso kein MT4/5 zum Einsatz. OOP kann man auch mit MT4 machen, wenn man es braucht.

Alles was man im MT5 machen kann geht auch mit MT4, ausgenommen Backtest Threading, aber das ist für mich nicht relevant, da ich den Tester nur zum Code prüfen brauche.

Was mir noch aufgefallen ist:
MT4 7300 Code Zeilen kompilieren, 2-3 Sekunden
MT5 8700 native MQL5 Code Zeilen kompilieren, 9-12 Sekunden

Im Live-Trading sehe ich keine Performance Vorteile von MT5, da kein Threading verwendet wird.

Ich denke, ich lege das MT5 Projekt zur Seite, sehe ab und zu rein, vielleicht baut MetaQuotes eine MQL4 Runtime im MT5 ein, kann mir das gut vorstellen, denn der MT4 Kundenverlust ist eindeutig zu hoch wenn die Broker die MT4 Umgebung abdrehen.
Für viele ex4 gibt es kein ex5.

Was mich aber am meisten nervt das es keine Fehlermedungen gibt, damit ist das weitere eingrenzen und arbeiten kaum möglich...
Und der Compiler läßt auch viel Blödsinn zu... der ist auch keine Hilfe


Mike

TraderMike 07.07.22 15:15

Jetzt wird es ganz lustig...

Habe eine "Abnormal Termination" provoziert - macht er auch

Schafft es ins Log zu schreiben, aber unfähig wo die Termination auftritt, ich weiß natürlich wo ich sie angefordert/codiert habe, wollte sehen ob MT5 in der Lage ist genau den Punkt, wo der Fehler auftritt zu nennen = NEIN (Compiler hat es sowieso nicht erkannt)

2022.07.07 14:34:26.012 1 (AUDCAD,D1) Abnormal termination

Das heißt ich/man muss den gesamten Code (8700 Zeilen, native MQL5) mit Breakpoints, Bookmarks, Profiler etc. Zeile für Zeile durcharbeiten, inkl. aller includes....sicher nicht!

Für statische EA's reicht das vorliegende MQL5 Scriptwerzeug natürlich, aber bei weitem nicht für hoch dynamische Strategien, die z.B. Trend+Range unterscheiden können und zwischen mehreren dynamischen Profilen automatisch wechseln und sich permanent dem Markt anpassen können.

Fazit: Für echte anspruchsvolle Programmierung wie "Quantitative Technologies with live and predictive data" reicht es auf keinem Fall...

Mike

traderdoc 08.07.22 18:25

Was du aber auch alles verlangst - Abnormal Termination!
Kommt vor, aber nicht oft. Da muss man schon Bockmist verzapft haben.
Ich denke, die Stelle wirst du auch schnell finden.

Ansonsten hat eben jede Sprache so ihre Vor- und Nachteile - halt wie im richtigen Leben. Für meine Programmierung der unzähligen EAs, Indikatoren und Scripte auch für viele Kunden hier aus dem Forum, hat der Umfang sowohl von MQL4 als auch 5 bisher immer gereicht. Außer bei der Herausforderung, einen horizontalen Strich in den Kerzenkörper bei einem bestimmten Preis zu zeichnen. Oder auch einen vertikalen Strich zwischen zwei Kerzen!!
Das würde ich gern mal sehen wollen. Klingt einfach - probiert es aus!

In Summe kann man schon zufrieden sein. Und ja, das Handling von Zeit und Datum ist auch aus meiner Sicht am Meisten optimierungsbedürftig. V.a. das Problem, dass am Tageswechsel nicht sofort die Historie der Preise abrufbar ist, behindert v.a. dann die Programmierung, wenn es darauf ankommt, just am Tageswechsel eine Aktion einzuleiten.

traderdoc

TraderMike 08.07.22 21:57

Bei der Antwort hat man nicht das Gefühl das du den Thread von Beginn gelesen hast! Ich bitte darum!

Mein EA funktioniert im Chart ABER nicht im Tester! (History Fehlermeldung)

Um herauszufinden warum im Tester eine History Fehlermeldung kommt, ohne weitere sinnvolle Fehlermeldung! habe ich eine Abnormal Termination testweise einprogrammiert! (Ja, die History wurde mehrmals gelöscht, Symbolwechsel ditto, steht in den Postings davor)

Keine EA Kompilierfehler oder Warnings im Editor
Keine EA Fehlermeldungen im Journal oder Expert Log
Keine EA Fehlermeldungen im Tester Log nur History Fehler
EA funktioniert im Chart!
EA funktioniert nicht im Tester!

Es kann doch KEIN Bockmist sein wenn der EA im Chart funktioniert, im Tester aber nicht!

Das würde bedeuten das man im MT5 mit einem EA auch mal "blind" Live gehen muss -ohne das man den Code im Tester vorherher (sichtbar) prüfen konnte.

Das bedeutet das der Tester nur bei echt grob fahrlässigen Fehlern aufschreit, welche aber eigentlich der Compiler schon abfangen müßte aber durchgelassen hat. Beispiel

PositionSelect und HistoryOrderGetInteger innerhalb einer Funktion!
Der Compiler meldet nicht einen Fehler, trotz "GetLastError" Routine

Auch PositionsTotal und HistoryOrderSelect erzeugt keine Fehlermeldung innerhalb einer Funktion beim kompilieren

Das geht gar nicht!

Und weil mein EA im Chart funktioniert im Tester aber nicht, wäre der gesamte Code Zeile für Zeile zu debuggen...

Ausserdem ist zu erkennen das du nicht weißt wieviel Geld dich eine nicht vorhandene "Garbage Collection" im Jahr an Geld kostet! Einfach mal Live und Demo gleichzeitig laufen lassen und die Demo 1x täglich um Mitternacht durchstarten, gute 10% an nicht durchgeführter Trades zwischen Live und Demo sind die Differenz - das Problem hat MT4 auch, damit ist die Verwunderung erklärt warum der gleiche EA in der Forward Demo eine Order aufmachte, im Live aber nicht! Umso mehr Charts umso schlimmer wird es...MT5 Forum ist voll von Memory Leak Einträgen.
Der Terminal Forward Demo Restart erzwingt, das löschen, freigeben des Arbeitsspeichers.
Bei einer "angeblichen" Profi Software erwarte ich mir eine eingebaute Garbage Collection! Denn nicht viele kennen den Trick des täglichen Neustarts oder zeitgesteuerten ReInits
Vom lustigen Compiler rede ich schon mal nicht...

Ca$hDigger 09.07.22 11:59

Zitat:

Zitat von TraderMike (Beitrag 46173)
Es kann doch KEIN Bockmist sein wenn der EA im Chart funktioniert, im Tester aber nicht!

Man wird aber einen Code Live nie solange laufen lassen wie im Tester. Sobald man kompiliert, müsste man mit Livetest neu anfangen. Daher wird beim Tester (zb 10 Jahre) statistisch gesehen immer eher ein Fehler zu Tage kommen als Live wo man im Vergleich nur einen kurzen Zeitraum testet bis man wieder mit Änderung kompiliert und neu startet (zb jeden Monat). Es gibt Fehler die treten nur alle 4 Jahre auf und sowas fällt dann im Livetest nie auf.

Im Grunde muss man nicht jede Zeile prüfen, es reicht ja einzelne Module des Ganzen auszukommentieren (Ordermanagement, Signalmanagement, etc) und damit einzugrenzen in welchem Codeabschnitt der Fehler liegt. Dann immer weiter ins Kleinteilige bis man den Fehler hat, dieser Prozess der Fehlersuche ist nervig aber es ist eher ein reinzoomen als ein Zeile für Zeile.

Ob am Ende der Fehler durch eine MQL Eigenart oder durch ein normalen Fehler passiert ist spielt keine Rolle, in beiden Fällen muss man es finden und dann damit umgehen solange man mit MT arbeiten will.

Wer möglichst sicher coden will muss zB zu Sprachen wie Rust gehen und sich dann irgendwo mit API anbinden. ZB mit C oder C++ kann man sich sogar noch viel schlimmer ins Bein schießen als mit MQL. Aber am Ende hat man egal welche Plattform/API immer das Thema Anbindung an den Broker wo man mit dem Gegebenen arbeiten muss.

Wenn der Fehler gefunden ist gerne mal Rückmeldung hier woran es lag.

TraderMike 09.07.22 18:32

Der History Fehler tritt bei 1.1.2021 - 30.3.2022 auf! Das ändern der Zeitspanne brachte nichts.
Ohne Fehlermeldung ist es kein Spass zu debuggen, im besonderen das der Compiler auch nur echte harte Fehler bestraft...umso verwoben der EA, es nicht leicht möglich ist, einzelne Module zu remarken für einen Test, da damit andere Teile in Abhängigkeit nicht funktionieren = umso dynamischer ein System ist umso komplizierter greifen die Module in einander = ich müßte die Struktur komplett neu designen, nur das Alert+Data (Quantitative) Management sind als Module realisiert

Mein EA läuft seit fast 8 Jahren auf MT4 durch, um das Garbage Collection Problem zu umgehen, mache ich um 6:00 ein zeitgesteuertes Re-Init.
Ansonsten läuft alles voll automatisch.

MT4 wir noch lange laufen, der Kundenverlust wäre zu hoch wenn die Broker ihre MT4 Server abdrehen.

MT5 brauche ich eigentlich noch nicht, da ich Futures über eine OCaml Klient verarbeite. Einige wenige US Option* über einen WebClient im Set -and Forget Modus nutze.

Erst wenn MT5 in der Lage ist einen Zugriff auf Domain 0-X zu zulassen, dann könnte man mittels MT5 EA parallel Orders an verschiedene Märkte und verschiedene Broker senden - mit einem Broker geht das natürlich bereits jetzt - dann ist MT5 eine echte Alternative um das Problem Mehrfach Broker/Programme/Konten zu lösen.
Jeder bessere Webmail Klient kann Multi Login mittels Scripting, Multi Domain, Multi Account...
Im kleinen "Ansatz" kann das MT5 ja schon, mit dem vom Broker erlaubten Transfer von Funds zwischen verschiedenen Broker Konten im MT5.

Ja, leider bieten zuwenige Broker Api, Bidge Anbindung an

Fazit: Ich verschiebe eine mögliche Umstellung auf MT5, da nicht zeitkritisch und mache eine Rundabfrage wieviele Broker API, Bridge anbieten, OCaml, C# und natürlich das sichere und bessere Rust (hat sich einiges von OCaml abgeschaut!) als C/C++, sind mögliche Alternativen

AVT 13.07.22 17:46

Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von traderdoc (Beitrag 46172)
Außer bei der Herausforderung, einen horizontalen Strich in den Kerzenkörper bei einem bestimmten Preis zu zeichnen. Oder auch einen vertikalen Strich zwischen zwei Kerzen!!
Das würde ich gern mal sehen wollen. Klingt einfach - probiert es aus!

Manuell geht das mit dem anghängten Script.
Man ist da aber immer auf den Benutzer angewiesen, der mit der Maus den Punkt genau bestimmt, für solche Sachen wie PriceToY oder TimeToX gibt es wohl keine Lösung.
AVT

traderdoc 13.07.22 21:26

Ne, das ist keine Lösung, das müsste schon automatisch gehen.

traderdoc


Alle Zeitangaben in WEZ +2. Es ist jetzt 05:46 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