Jump to content
Tom Next - Daytrading Community

MT4 offline zum laufen bringen


Forex1+

Recommended Posts

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+

Link to comment
Share on other sites

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...

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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_MT4


Habe 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 by Forex1+
Link to comment
Share on other sites

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

Link to comment
Share on other sites

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 ?

  • Upvote 2
Link to comment
Share on other sites

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 by Forex1+
Link to comment
Share on other sites

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

  • Upvote 2
Link to comment
Share on other sites

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.

  • Upvote 1
Link to comment
Share on other sites

.... 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.

Link to comment
Share on other sites

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ß

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.
Link to comment
Share on other sites

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.mq4

bzw.

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.

  • Upvote 2
Link to comment
Share on other sites

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ß

Link to comment
Share on other sites

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 -> M2

MT4-ONLINE M1-Online-Chart => Period_Converter(PeriodMultiplier=2) erzeugt in MT4-Online einen M2-Offline-Chart

und snychronisiert wie gehabt diesen mit MT4-OFFLINE mit dem M2-Offline-Chart mit Endlos-Script und PostMessageA(...)

 

2. Beispiel mit M2 -> M10

MT4-ONLINE M2-Offline-Chart => Period_Converter(PeriodMultiplier=5) erzeugt in MT4-Online einen M10-Offline-Chart

und 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.

 

 

Link to comment
Share on other sites

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):

  • Date
  • Time
  • Open
  • High
  • Low
  • Close
  • Volume

 

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:

  • Bars
  • Low
  • High
  • Close
  • Volume
  • Digits (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+

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

Test nur mit Transfer der .hst

Die Ergebnisse:

//Simple Predefined Variables

  • Ask: Geht nicht -> Wert 0
  • Bid: Geht nicht -> Wert 0
  • Bars: Funktioniert
  • Point: 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-Timeseries

  • Time[0]: Funktioniert (aktualisiert nur am Anfang eines neuen Bars)
  • Open[0]: Funktioniert
  • Close[0]: Funktioniert
  • High[0]: Funktioniert
  • High[5]: Funktioniert
  • Low[0]: Funktioniert
  • Low[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 nicht
  • Alles andere geht gut
  • Syncronisieren von weiteren Dateien wie symbols.raw symbol.sel symgroups.raw usw bringt keinen Mehrwert

 

F1+

Link to comment
Share on other sites

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ß

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...