Forex1+ Posted October 25, 2013 Report Posted October 25, 2013 Hallo, ich versuche einen EA auf einem offline-MT zum laufen zu bringen. Das Erzeugen und realtimesyncronisieren der offlineChart-.hst-Datei vom brokerverbundenen MT4 zum offlineMT4 funktioniert einwandfrei. Den OfflineChart auf dem OfflineMT4 zu öffnen ist also kein Problem. Beim manuellen aktualisieren des Charts (rechte Maus, aktualisieren) wird stets der aktuelle Chart aktualisiert. Das Problem: Das soll automatisch funktionieren, der Chart soll sich selbst aktualisieren was leider nicht klappt. Gibt es irgendeine Lösung dafür? Gruß F1+
Vola Posted October 25, 2013 Report Posted October 25, 2013 Aktualisiert sich der EA denn automatisch, wenn Du Ihn auf einem Brokerverbunden MT4 Offline Chart laufen lässt ?(Ich weiß, dass ist nicht Dein Ziel, aber zur Fehlereingrenzung ist diese Frage eventuell förderlich) Bis sich die Cracks melden kannst Du ja mal hier (# 4) schauen, hört sich so an als wenn es das ist, was Du suchst, scheint aber noch nicht ganz fertig zu sein...
Kleinerbroker Posted October 25, 2013 Report Posted October 25, 2013 Bin kein Crack, nur der KB , aber ... wenn Du MT4 offline nimmst passiert Null , denn der MT4 Terminal reagiert nur auf einen Tick den er vom Broker bekommt, bei dem Du ein (Demo-)Konto hast . Der Broker schickt Dir nur seine Ticks, wenn die Börse tickt . Die einzige - mir bekannte - Chance einem Offline-MT4-Chart so etwas wie Leben einzuhauchen ist der Strageytester Guckst Du, wenn magst Hoffe hilft KB
Forex1+ Posted October 26, 2013 Author Report Posted October 26, 2013 (edited) Danke schonmal,ja der EA ist Fehlerfrei was das angeht das Problem ist ja das der Chart schon nichts macht. Danke für den Link bei dem Beitrag gibts leider keine Lösung ist aber genau das Thema in #4.Mit dem Strategietester kann ich leider nicht live traden sonst wäre das natürlich ok.Das Problem scheint echt schwerer zu sein als gedacht. Befindet sich der Offlinechart innerhalb des online-MT der diesen erzeugt dann gibt es keine Probleme. Der offlinechart ist hier realtime und wird getriggert.Befinden sich aber jetzt die Chartdaten der .hst in einem offline-MT unter den selben .hst-Bedingungen (realtime-aktuelle .hst) dann geht es nicht automatisch, eben nur manuell (rechte Maus, aktualisieren).Zumindest zeigt das schonmal das die Erzeugung der .hst am richtigen Ort nicht ausreicht um den Chart zu triggern.Habe bisher nur eine Sache gefunden die das wohl hinbekommt: Multi Quote Server http://de.mtiqs.com/Problem: Lizenz 899,00 € Zum Rumprobieren dann etwas zu teuer...Dort wird ein autorefresh-skript benutzt um den Chart zu triggern.http://www.mtiqs.com/help/English/index.php?s=FrmClient_MT4Habe so ein ähnliches Skript gefunden und ausprobiert, hat allerdings nicht geklappt. Bin daher nicht sicher ob das alleinige Triggern des Chartes ausreicht kann aber auch sein das das Skript nichts war.Das muss doch irgendwie gehen.F1+ Edited October 26, 2013 by Forex1+
Vola Posted October 26, 2013 Report Posted October 26, 2013 Das muss doch irgendwie gehen. Gehen tut es recht sicher, Script ist eine Möglichkeit, aber man kann auch das aktualisieren des Charts über Windows per Software steuern, man führt dem Rechner per Programm vor, was er machen soll, dann führt er diese Prozedur anschließend automatisch aus (können auch mehrere Dinge direkt hintereinander sein, dass ist dem Programm egal)Ich hatte so etwas vor Monaten selbst kurzzeitig in Verwendung, vllt. passt es ja für Dich ebenfalls. http://www.chip.de/downloads/GhostMouse_13004921.html
Forex1+ Posted October 26, 2013 Author Report Posted October 26, 2013 Coole Alternative, zu not dann damit Wenn die Märkte wieder offen sind teste ich noch ein paar Dinge durch und melde mich dann. Was auch noch spannend wird ist ob "int start()" im Code überhaupt getriggert wird das wäre ja die Grundbedingung zur Funktion des EAs...
Der Wolf Posted October 27, 2013 Report Posted October 27, 2013 Was auch noch spannend wird ist ob "int start()" im Code überhaupt getriggert wird das wäre ja die Grundbedingung zur Funktion des EAs...Verwendest Du denn in der MT4-Offline-Umgebung einen EA oder ein Skript ? Wenn Du einen EA verwendest, dann kann in einer Offline-Umgebung die Funktion start() nicht getriggert werden.Wenn Du ein Script verwendest, wird start() genau einmal ausgeführt. Wenn Du in die start()-Funktion des Skripts eine Endlos-Schleife einbaust und in dieser Endlosschliefe z.B. alle 30 Sekunden oder jede Minute etwas aufrufst, dann simulierst Du damit in einer Offline-Umgebung einen Tick.Somit kannst Du die gleiche Logik wie in einem EA in die start()-Funktion eines Skripts verlagern und auch Offline aufrufen. Habe das nur geschrieben, weil es mal um Script's und mal um EA's geht, vielleicht ist der Unterschied gar nicht so klar ? 2
Forex1+ Posted October 27, 2013 Author Report Posted October 27, 2013 (edited) Danke für die Info das war mir noch nicht klar. Ich wollte ein EA auf einer MT4-Offline-Umgebung verwenden und dazu erzeuge ich die Kursdaten mit einem Skript und transferiere sie auf die Offline-Umgebung. Dort sollte, da kein Trigger vorhanden ist, ein weiteres Skript den Chart triggern damit dann darauf der EA funktioniert... -> Da du aber schreibst, dass beim EA die Funktion start() sowieso nicht getriggert wird muss ich auf die Skriptvariante mit der Endlos-Schleife zurückgreifen. Freut mich aber sehr das dies überhaupt möglich ist so kann man also scheinbar doch MT offline zum leben bringen. Hast du zufällig so ein Skript, wo die start()-Funktion eine Endlos-Schleife eingebaut hat wo wiederum die Logik vom EA hineinkommt? Gruß Edited October 27, 2013 by Forex1+
Mythos Posted October 27, 2013 Report Posted October 27, 2013 Hi, sowas is recht simple: int start() { //---- while(!IsStopped( ) ) { RefreshRates(); mystart(); Sleep(interval); } //---- return(0); } und in "mystart()" kommt einfach das was normal in "start()" kommt. interval ist in dem Fall die Zeit zwischen zwei simulierten "Ticks" in millisekunden 2
Forex1+ Posted October 27, 2013 Author Report Posted October 27, 2013 (edited) Klasse das läuft ! Gibt es die Möglichkeit ohne ein externes Programm das Chartfenster zu aktualisieren? Also den Schritt "rechte Maustastaste -> Aktualisieren" direkt in MT im Intervall zu automatisieren? Danke und Gruß Edited October 27, 2013 by Forex1+
Der Wolf Posted October 28, 2013 Report Posted October 28, 2013 Gibt es die Möglichkeit ohne ein externes Programm das Chartfenster zu aktualisieren? Also den Schritt "rechte Maustastaste -> Aktualisieren" direkt in MT im Intervall zu automatisieren? Versuch doch mal, ob es damit funktioniert: WindowRedraw( ) Redraws the current chart forcedly. It is normally used after the objects properties have been changed. 1
Forex1+ Posted October 28, 2013 Author Report Posted October 28, 2013 Hab WindowRedraw(); in "mystart()" gelegt aber geht leider nicht... LG
Der Wolf Posted October 29, 2013 Report Posted October 29, 2013 .... das Erzeugen und realtimesyncronisieren der offlineChart-.hst-Datei vom brokerverbundenen MT4 zum offlineMT4 funktioniert einwandfrei.. . .Ich wollte ein EA auf einer MT4-Offline-Umgebung verwenden und dazu erzeuge ich die Kursdaten mit einem Skript und transferiere sie auf die Offline-Umgebung. Dort sollte, da kein Trigger vorhanden ist, ein weiteres Skript den Chart triggern damit dann darauf der EA funktioniert... . .. . Ich nehme an, Du machst die Synchronisation auf M1-Basis ? Der Chart den Du aktualiseren willst, ist der dann auch auf M1-Basis oder in einem höheren Timeframe? Falls in einem höheren Timeframe: wandelst Du die aktuellen Realtime-M1-Kurse selbst (also z.B. per Period_Converter.mq4-Script) auf die höheren Timeframes um (und hängst sie danach an die bestehenden .hst-Files dran) ?Oder läßt Du das durch die rechte Maustaste auf dem Chart den Metatrader machen ? Ich frage das, weil ja der Metatrader auf Basis der M1-Kurse arbeitet und ich vor längerer Zeit mal Imports in eine Offline-Umgebung durchgeführt habe (ohne die Kurse danach in Realtime zu synchronisieren).Da habe ich irgendwie noch in Erinnerung, daß ich danach alle Timeframes durchklicken mußte, damit der Metatrader die per Script von M1 hochgerechneten Timeframes auch im Chart angezeigt hat.Kann mich aber auch täuschen, ist halt schon länger her.
Forex1+ Posted October 29, 2013 Author Report Posted October 29, 2013 Ich nehme an, Du machst die Synchronisation auf M1-Basis ? Mache die Tests zurzeit auf M2 (erzeugt durch Indikator: Period_Converter_Opt) weil ich nichts besseres gefunden hab was M1 macht, ohne den originalen M1 zu beeiflussen...Man könnte mal in den Code vom Period_Converter_Opt reinschauen ob man nicht ein M1 als M2 erzeugen kann denn zurzeit entspricht der gewählte TF auch dem erzeugten TF-Namen. Der Chart den Du aktualiseren willst, ist der dann auch auf M1-Basis oder in einem höheren Timeframe? Der offlineChart den ich aktualisieren will ist genau eine Kopie von dem der Quelle (der M2 erzeugte offlineChart vom onlineMT).Also der Period_Converter_Opt erzeugt die .hst im OnlineMT-Verzeichnis und diese wird 1:1 in das offlineMT-Verzeichnis syncronisiert. Diese Übertragung funktioniert sehr gut was man durch die manuelle Aktualsierung bestätigt bekommt. Wäre natürlich gut wenn man aus dem zurzeit M2 noch höhere TF ableiten könnte aber vor allem natürlich als Basis vom Ganzen, dass sich der Chart selbst aktualisiert was leider nicht klappt. Leider geht das WindowRedraw(); in der Schleife vom Skript nicht, sonst könnte man auf diesen Chart wieder ein Period-Converter legen der dann die gewünschten TF erzeugt...Das Blöde ist eben, wenn man über MT die auto-Aktualisierung nicht hinbekommt, wird das mit einem externen Tool wie von Vola vorgeschlagen immer schwerer, je mehr Chart gleichzeitig getradet werden sollen (jeder Chart muss von dem Tool hintereinander einzelnd aktualisiert werden) Das Ziel bleibt EAs auf einer MT-Offlineumgebung laufen lassen. Ich mein bestenfalls gibt es eine Variante wo MT in der offlineUmgebung so funktioniert wie online dann kann man sich die obigen Probleme sparen aber sowas ist mir leider noch nicht über den Weg gelaufen. Gruß
Vola Posted October 29, 2013 Report Posted October 29, 2013 Das Blöde ist eben, wenn man über MT die auto-Aktualisierung nicht hinbekommt, wird das mit einem externen Tool wie von Vola vorgeschlagen immer schwerer, je mehr Chart gleichzeitig getradet werden sollen (jeder Chart muss von dem Tool hintereinander einzelnd aktualisiert werden) Schwerer wird es nicht, Du musst dem Tool nur einmal zeigen, dass es 20 Charts aktualisieren soll, dann macht es das auch in der Geschwindigkeit Deine Vorführens.Wirklich schön und elegant ist diese Lösung natürlich nicht, würde mir auf Dauer so auch nicht gefallen.
Mythos Posted October 29, 2013 Report Posted October 29, 2013 Klasse das läuft !Spannend wärs wie es sich auf dem nicht aktualisierten Chart verhält. Also wenn der Datenbestand im Hintergrund sich ändert (sprich nach Aktualisierung wäre der Chart anders) ob allein durch das RefreshRates() das Script die neuen Daten mitkriegt und sie nur nicht angezeigt werden, oder er sie auch nicht mitkriegt.
Der Wolf Posted October 29, 2013 Report Posted October 29, 2013 Der offlineChart den ich aktualisieren will ist genau eine Kopie von dem der Quelle (der M2 erzeugte offlineChart vom onlineMT).Also der Period_Converter_Opt erzeugt die .hst im OnlineMT-Verzeichnis und diese wird 1:1 in das offlineMT-Verzeichnis syncronisiert. Diese Übertragung funktioniert sehr gut was man durch die manuelle Aktualsierung bestätigt bekommt. Wenn die manuelle Aktualisierung funktioniert, dann muss wohl wirklich "nur" der Chart aktualisiert werden, das könnte auch über die user32.dll klappen.DLL-Ausführung muss aktiviert werden. Kannst ja vielleicht das da mal ausprobieren:http://www.forexmt4.com/mt_yahoo/TickSender.mq4bzw.http://forum.mql4.com/12970 oder alternativ das da: http://forum.mql4.com/18256 Dem habe noch ein Comment-Statement spendiert: refreshofflinemq4.mq4 P.S:: das ist ein Endlos-Script, kein EA !Also bitte auf dem M2-Offline-Chart ausführen. 2
Mythos Posted October 29, 2013 Report Posted October 29, 2013 Das PostMessageA(hwnd, WM_COMMAND, CHART_CMD_UPDATE_DATA, 1); aus dem refreshofflinemq4 script klingt doch sehr nach dem cmd das du brauchst...
Forex1+ Posted October 30, 2013 Author Report Posted October 30, 2013 Fantastisch das funktioniert! Wenn man den timedelay noch etwas runterdreht ist es sogar wie Realtime. Klasse! Da offline nur Skripte zu gebrauchen sind (Trigger bedingt) und man pro Chart nur ein Skript ausführen kann, wäre doch die Konsequenz, dass die EA-Logik in die Whileschleife dieses Skriptes muss. Bzw wenn man ein anderen TF erzeugen will muss man die Logik des Converters in die Whileschleife bringen oder? Gruß
Der Wolf Posted October 30, 2013 Report Posted October 30, 2013 Fantastisch das funktioniert!Freut mich. Da offline nur Skripte zu gebrauchen sind (Trigger bedingt) und man pro Chart nur ein Skript ausführen kann, wäre doch die Konsequenz, dass die EA-Logik in die Whileschleife dieses Skriptes muss.Klar, genau so. Ich würde die EA-Logik sauber in Funktionen zerlegen und diese Funktionen in Includes bzw. Libraries auslagern.Dann kann es Dir egal sein, ob diese Funktionen von einem Offline-Script oder einem Online-EA aus aufgerufen werden. Bzw wenn man ein anderen TF erzeugen will muss man die Logik des Converters in die Whileschleife bringen oder?Das wäre sicherlich eine Lösungsvariante. Vielleicht funktioniert aber auch so etwas: 1. Beispiel mit M1 -> M2MT4-ONLINE M1-Online-Chart => Period_Converter(PeriodMultiplier=2) erzeugt in MT4-Online einen M2-Offline-Chartund snychronisiert wie gehabt diesen mit MT4-OFFLINE mit dem M2-Offline-Chart mit Endlos-Script und PostMessageA(...) 2. Beispiel mit M2 -> M10MT4-ONLINE M2-Offline-Chart => Period_Converter(PeriodMultiplier=5) erzeugt in MT4-Online einen M10-Offline-Chartund snychronisiert diesen mit MT4-OFFLINE mit einem M10-Offline-Chart mit Endlos-Script und PostMessageA(...) Hätte den Vorteil, daß Du da nichts kodieren bräuchtest.
Forex1+ Posted November 2, 2013 Author Report Posted November 2, 2013 Next step: Wenn ich alles richtig gesehen hab enthält die .hsv diese 7 Variablen (zu sehen wenn man die History als htm oder csv exportiert):DateTimeOpenHighLowCloseVolume Alle Indis funktionieren auf dem Offlinechart daher hab ich mal in die Codes der MT-"Angepasste Indikatoren" geschaut um zu sehen auf welche Variablen zugegriffen wird: zB:BarsLowHighCloseVolumeDigits (MACD)Point (ZigZag)Erstaunlicherweise funktionieren auch Indis wo Variablen abgerufen werden die theoretisch überhaupt nicht abgerufen werden können da diese in der .hst nicht enthalten sind (Digits, Point). Wenn man den Code eines EAs in den Trigger-Skriptcode anpasst dann frage ich mich jetzt welche Variablen werden von wo abgerufen. Also kann man Time,Open,High,Low,Close,Volume so lassen weil sie aus der .hst gelesen werden? Was ist mit den anderen? Gibt es nicht zufällig eine andere ähliche Datei in MT die die aktuellen Variablen wie OrderMagicNumber, Digits, Point,TimeCurrent, Time, usw bereithält? Wenn nein, müsste man die Variablen über die filefunctions von MT übertragen. Den Pfad verlagere ich einfach mit einem symbolischen Link so bekommt man die Variablen gut aus dem MT-Verzeichnis hinaus (danke für den Tipp an RAiNWORM). Hat vielleicht jmd ein Beispiel wie man eine Reihe von Variablen über die filefunction in eine Datei schreibt und wie man sie wieder ausliest? Gruß F1+
Mythos Posted November 3, 2013 Report Posted November 3, 2013 Wenn man den Code eines EAs in den Trigger-Skriptcode anpasst dann frage ich mich jetzt welche Variablen werden von wo abgerufen. Also kann man Time,Open,High,Low,Close,Volume so lassen weil sie aus der .hst gelesen werden? Was ist mit den anderen? Gibt es nicht zufällig eine andere ähliche Datei in MT die die aktuellen Variablen wie OrderMagicNumber, Digits, Point,TimeCurrent, Time, usw bereithält?Also Time, Open, High, Low, Close, Volume sollte direkt aus den Daten des Charts (nicht des hst-Files) kommen. Da hier die Daten aus dem hst gelesen werden sollte es also passen. (Aber du hast trotzdem nur soviel History wie im Chart eingestellt ist, nicht wie im hst verfügbar). Digits und Point kommt AFAIK aus dem symbols.sel. Das ist leider nicht so schön lesbar wie ein hst file. TimeCurrent und aktuelle Orderinfos (MagicNumber etc.) werden möglicherweise nirgends gespeichert sondern direkt vom Server abgerufen wodurch du die nur über eigene Schnittstelle von Online auf Offline-MT bekommen kannst. Du musst ja auch die Orderaufträge etc. von Offline zurück auf den Online-MT übertragen oder soll der MT nur offline laufen aber keine Orderaufträge senden? hth
Forex1+ Posted November 3, 2013 Author Report Posted November 3, 2013 Ja genau für Orderaufträge und die fehlenden Variablen brauch ich noch eine Schnittstelle hab nur noch nicht so den Durchblick mit den filefunctions daher die Frage. Ich erweitere gerade das Skript zum Variablen austesten und sobald die Märkte offen sind werd ich mal genau gucken auf welche Variablen verlass ist und welche man per file-schnittstelle übertragen muss.Das mit dem symbols.sel ist interessant, werde das austesten bzgl. der Variablen.Sobald ich das ausgewertet hab meld ich mich
Forex1+ Posted November 4, 2013 Author Report Posted November 4, 2013 Test nur mit Transfer der .hstDie Ergebnisse://Simple Predefined VariablesAsk: Geht nicht -> Wert 0Bid: Geht nicht -> Wert 0Bars: FunktioniertPoint: Funktioniert (obwohl folgendes gelöscht: symbols.raw symbol.sel symgroups.raw)Digits: Funktioniert (obwohl folgendes gelöscht: symbols.raw symbol.sel symgroups.raw)//Predefined Arrays-TimeseriesTime[0]: Funktioniert (aktualisiert nur am Anfang eines neuen Bars)Open[0]: FunktioniertClose[0]: FunktioniertHigh[0]: FunktioniertHigh[5]: FunktioniertLow[0]: FunktioniertLow[5]: Funktioniert//Weiterer Test Indikatorwert auslesen: Funktioniert Sync. von: symbols.raw symbol.sel symgroups.raw-> keine Verbesserung (es werden bei Ask und Bid jetzt Werte angezeigt aber diese bleiben bei Kursänderung immer auf irgendeinem alten Wert). Auch fällt auf das die Bid Linie im Chart aktuell ist aber die Ask Linie immer gleich bleibt. Sync. von: signals.dat-> Auch keine Verbesserung Fazit:Ask und Bid geht nichtAlles andere geht gutSyncronisieren von weiteren Dateien wie symbols.raw symbol.sel symgroups.raw usw bringt keinen Mehrwert F1+
Forex1+ Posted November 4, 2013 Author Report Posted November 4, 2013 Also das heisst dann wohl Bid+Ask (+evt weitere Werte) müssen über eine Schnittstelle syncronisiert werden sowie die Order-Signale dann auf umgekehrtem Wege. Damit wäre ich wieder bei dieser Frage... ;-) Hat vielleicht jmd ein Beispiel wie man eine Reihe von Variablen über die filefunction in eine Datei schreibt und wie man sie wieder ausliest? Besten Gruß
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in
Sign In Now