Zum Inhalt springen
View in the app

A better way to browse. Learn more.

#T/N/X/T

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

MQL-Script von einem anderen MQL-Script aufrufen

Geschrieben

Hallo,

 

von mir auch mal wieder eine Frage in die Expertenrunde:

Kann man von einem MQL-Script ein anderes MQL-Script aufrufen und diesem anderen Script Parameter übergeben?

 

- wie sieht der Aufruf aus (aufrufendes Script)?

- wie sieht die Parameterauswertung im aufgerufenen Script aus?

 

Danke

 

wingman

 

:blink:

Featured Replies

Geschrieben

Darf man fragen, was genau passieren soll?

Da ich eigentlich gar nicht mit Skripten arbeite, kann ich hier nur vermuten, dass es nicht so ohne weiteres geht (ist aber nur so ein Gefühl). Ob es so oder so die eleganteste Lösung wäre, kann man erst beurteilen, wenn das "Problem" etwas näher definiert wurde. Tendiere da eher zu einer Lösung via Indikator und/oder EA.

Geschrieben

Kann man von einem MQL-Script ein anderes MQL-Script aufrufen und diesem anderen Script Parameter übergeben?

Ja, das geht.

Du mußt dazu die user32.dll includieren.

 

#import "user32.dll"
  int RegisterWindowMessageA(string MessageName);
  int PostMessageA(int hwnd, int msg, int wparam, string Name);
  void keybd_event(int VirtualKey, int ScanCode, int Flags, int ExtraInfo);
#import
void StartScript(int hWnd, string ScriptName, bool AutomaticallyAcceptDefaults = false)
{
  int MessageNumber = RegisterWindowMessageA("MetaTrader4_Internal_Message");
  PostMessageA(hWnd, MessageNumber, 16, ScriptName);
  if (AutomaticallyAcceptDefaults) ClearConfigDialog();
}


void ClearConfigDialog()

{
  Sleep(100);
  keybd_event(13, 0, 0, 0);
}
Aufruf:
StartScript(WindowHandle(Symbol(),0), "ScriptName", true);

Bei diesem Aufruf wird das Parameterwindow des Scripts einfach mit den Default-Werten akzeptiert.

Probiers mal aus und bei Fragen, du weißt ja...

Geschrieben

Ja, das geht.

Du mußt dazu die user32.dll includieren.

Das fällt bei mir schon unter "geht nicht ohne Weiteres" :w00t:.

Geschrieben

Ich reih mich mal in die "wozu?"-Reihe ein ;)

Sobald du den Source des Script hast, wärs doch schöner zumindest ne include draus zu machen und die einzubinden. Mit der dll gehts (scheinbar, selber nit getestet), aber schöner wärs doch ohne oder?

 

Oder hast du den Source nicht? Dann gehts vermutlich nur über die dll, hilft dir aber nit was die Parameter angeht...

Geschrieben

...und diesem anderen Script Parameter übergeben?

:blink:

Ähm, weil ich's grad seh. :cleanglasses:

Das geht mit meiner Lösung leider nicht. Hier werden immer nur die Defaultparameter verwendet.

Zum Thema Parameterübergeben fiele mir auf die Schnelle nur ein, das über ein File zu machen, also im aufrufenden Skript die zu verwendenden Parameter in ein File zu schreiben und dann im aufgerufenen Skript die Parameter wiederum aus dem File auslesen.

 

Ist halt etwas aufwändiger als ein iCustom. Wobei wir bei der Frage von conglom-o und Mythos wären, "wofür brauchst du das genau"?

Geschrieben
  • Autor

Ähm, weil ich's grad seh. :cleanglasses:

Zum Thema Parameterübergeben fiele mir auf die Schnelle nur ein, das über ein File zu machen, also im aufrufenden Skript die zu verwendenden Parameter in ein File zu schreiben und dann im aufgerufenen Skript die Parameter wiederum aus dem File auslesen.

 

...also Deine obere Lösung sieht auf jeden Fall gut aus... :cura1-1:

Allerdings habe ich sie noch nicht ausprobiert, da ich gerade keinen Metatrader griffbereit habe.. Aber wenn nur Defaultparameter übergeben werden scheint das für mich doch nicht zu funktionieren...

 

Wozu brauche ich das ganze:

 

Ich habe einen EA der Trendlinien auswertet - diese werden per script vorher erzeugt und nicht per EA, damit man diese in Ruhe und ausserhalb der Market-Zeiten einzeichnen kann. Leider wird ein EA ja erst

ausgeführt, wenn der Markt geöffnet hat (selbst der Init-Part). Da ich aber üblicherweise am Wochenende mein Setup überarbeite, lege ich alle Parameter ausserhalb der Marktzeiten fest und starte dann den EA.

 

Dieses Haupt-Script nun wieder kann verschiedenste Presets ausführen und idealerweise hätte ich für jedes Preset eine Art Start-Script...

 

Ich könnte das ganze natürlich in eine DLL auslagern, aber das ist mit Kanonen auf Spatzen geschossen...

Geschrieben

Ich könnte das ganze natürlich in eine DLL auslagern, aber das ist mit Kanonen auf Spatzen geschossen...

 

Naja, aber was is mit einer include? (oder MT-interne Libs)

Versteh ich dich richtig: du willst von einem Script aus nicht ein spezielles anderes, sondern ein gewähltes aus einer fixen Liste von möglichen?

Dann könntest die Scripte mit kleiner änderung (start umbennen und parameter geben) als include einbinden und halt die entsprechende Funktion statt dem Script aufrufen...

Geschrieben
  • Autor

Ja - ich glaube ich werde es mal mit einem #Include versuchen - allerdings muss ich dann das Ganze etwas umbauen - und das wollte ich vermeiden. (Metatrader ist manchmal wirklich ganz schön primitiv...)

 

Danke für die zahlreichen Tipps!

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

Account

Navigation

Suche

Suche

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.