Hallo Leute,
wenn man einen EA startet, hat man die Möglichkeit eine *.set Datei aus dem Ordner "Presets" über die Button "Laden" oder "Speichern" zu erzeugen, bzw. zu laden.
Gibt es eine Möglichkeit das auch über einen Befehl im EA zu tun?
Gruß Uwe
Nein
Hallo Leute,
wenn man einen EA startet, hat man die Möglichkeit eine *.set Datei aus dem Ordner "Presets" über die Button "Laden" oder "Speichern" zu erzeugen, bzw. zu laden.
Gibt es eine Möglichkeit das auch über einen Befehl im EA zu tun?
Gruß Uwe
Hallo,
ich denke nicht, dass MQL4 oder 5 den #include für den Presets/Ordner haben. Und die Endung von Presetsdateien ist .set und wird Wahrscheinlich einen Fehler senden.
Habe sowas noch nie ausprobiert. Man kann aber für jeden Instrumenten eine Extra Funktion schreiben, damit per _Symbol die Einstellungen geladen werden.
Gruß Igor
Hallo Leute,
wenn man einen EA startet, hat man die Möglichkeit eine *.set Datei aus dem Ordner "Presets" über die Button "Laden" oder "Speichern" zu erzeugen, bzw. zu laden.
Gibt es eine Möglichkeit das auch über einen Befehl im EA zu tun?
Gruß Uwe
Man kann in OnInit() eine Datei laden und den Parametern des EAs entsprechende Werte aus dieser Datei zuweisen. In MT5 dürfen es keine #input-Parameter sein, weil die intern nicht geändert werden können, aber kann ja 'Spiegelvariable' erstellen mit einem zusätzlichen _ zB. versehen.
Danke für die Infos.
Gruß Uwe
Danke für die Infos.
Gruß Uwe
Da ich einer ähnlichen Anforderung gegenüber stand, habe ich dazu eine Include-Datei gebaut. Ich teile sie hier, allerdings ist diese noch nicht fertig entwickelt.
Irgendwann, in einer fernen Zukunft werde ich sie auch in der CodeBase veröffentlichen.
Ansonsten viel Spass damit.
Hier ein Beispiel wie diese verwendet werden sollte:
#include "lib_input.mqh" //*********************************************************************************************************************************************************/ // User configuration input (Edit/Add) // // Inputs input group "[Wave] Profit settings" /* input uint pos_profit_fractions = 0; // Set profit zones total (0 = auto or ticks; 19 = max, 1 = off) input uint pos_profit_zone_ticksize = 100; // Set profit zone size in ticks input uint pos_fraction_hysteresis = 50; // Hysteresis in % on switching zones (0 = off) input uint pos_volume_reduction = 25; // Percentage rate at which volume is reduced (0 = auto) input uint pos_sl_recovery_fraction = 1; // Zone to set SL to break even (0 = off, 1 = auto) input double pos_sl_recovery_level = 7.5; // Percentage level of TP to set SL to break even (0 = off) input double pos_vol = 0.03; // Volume */ input double pos_profit = 2.0; // Profit factor input double pos_stop = 3.0; // Loss factor // Register managed input variables #ifdef LIB_USER_INPUT_MQH_INCLUDED /* LIB_USER_INPUT_ADD(uint, pos_profit_fractions, "Set profit zones total (0 = auto or ticks; 19 = max, 1 = off)"); LIB_USER_INPUT_ADD(uint, pos_profit_zone_ticksize, "Set profit zone size in ticks"); LIB_USER_INPUT_ADD(uint, pos_fraction_hysteresis, "Hysteresis in % on switching zones (0 = off)"); LIB_USER_INPUT_ADD(uint, pos_volume_reduction, "Percentage rate at which volume is reduced (0 = auto)"); LIB_USER_INPUT_ADD(uint, pos_sl_recovery_fraction, "Zone to set SL to break even (0 = off, 1 = auto)"); LIB_USER_INPUT_ADD(double, pos_sl_recovery_level, "Percentage level of TP to set SL to break even (0 = off)"); */ LIB_USER_INPUT_ADD(double, pos_profit, "Profit factor"); LIB_USER_INPUT_ADD(double, pos_stop, "Loss factor"); #endif // // END User configuration input //*********************************************************************************************************************************************************/ const int OnInit() { // Show currently loaded configuration LIB_USER_INPUT_LOAD_SETTINGS; } void OnDeinit(const int reason) { // Save user input configuration LIB_USER_INPUT_SAVE_SETTINGS; return; } void OnTick() { if(bShort) { abs_sl = money_calc::mm_calc_stack.symbol_ask - (bb_signal[index] * LIB_USER_INPUT(pos_stop)); abs_tp = money_calc::mm_calc_stack.symbol_bid + (bb_signal[index] * LIB_USER_INPUT(pos_profit)); } else { abs_sl = money_calc::mm_calc_stack.symbol_bid - (bb_signal[index] * LIB_USER_INPUT(pos_stop)); abs_tp = money_calc::mm_calc_stack.symbol_ask + (bb_signal[index] * LIB_USER_INPUT(pos_profit)); } }
Wie gesagt, die include ist noch in Entwicklung, allerdings nutze ich sie schon relativ lange. Daher müsste diese all deinen Anforderungen gerecht werden.
Ich habe sie damals entwickelt um einen Verlauf der Eingabeparameter zu generieren. Die Dateien werden in common\files abgelegt und nach dem Schema "EA-Name"+AccountNummer+TimeFrame+Symbol+"Dein Dateiname".ini erstellt.
Die resultierenden Dateien sind lesbar, editierbar und ladbar.
Folgende Makros sind bereits funktionstüchtig:
LIB_USER_INPUT_LOAD_SETTINGS
LIB_USER_INPUT_SAVE_SETTINGS
LIB_USER_INPUT(name)
LIB_USER_INPUT_ADD(type, name, desc)
LIB_USER_INPUT_ADD_FROM_NAMESPACE(ns, type, name, desc)
LIB_USER_INPUT_SET(name, value)
LIB_USER_INPUT_NAME(name)
LIB_USER_INPUT_DESC(name)
Wobei "name" durch den Variablen-Name ersetzt wird. Auch zu sehen im obigen Beispiel.
Zum anlegen einer neuen Variable wird das Makro LIB_USER_INPUT_ADD(type, name, desc) und LIB_USER_INPUT_ADD_FROM_NAMESPACE(ns, type, name, desc) benutzt. - Das Zweite wird für Input-Variablen benutzt, welche sich in einem NAmespace befinden, falls notwendig.
Die Sync-Makros funktionieren noch nicht. (Ich hatte bisher keine Zeit und keinen Bedarf diese fertig zu entwickeln.)
Hallo Leute,
wenn man einen EA startet, hat man die Möglichkeit eine *.set Datei aus dem Ordner "Presets" über die Button "Laden" oder "Speichern" zu erzeugen, bzw. zu laden.
Gibt es eine Möglichkeit das auch über einen Befehl im EA zu tun?
Gruß Uwe
Also ein direkten Befehl gibt es nicht.
Aber:
Ich selber erzeuge mir dir Konfig-Datei, um den Tester extern zu starten auch selber.
Ist eine Text-Datei mit dem Schema der Windows .ini Dateien.
Das mache ich aus MatLab heraus.
Funktioniert sehr gut.
Da die .set Datei aber ein eigens Format hat müsstest du dir einen SetFile-Loader-Writer schreiben.
Falls das klappt kommt die Hürde das die Datei eventuell nicht schreibbar ist wenn der EA aktiv ist.
Musst du mal ausprobieren.
Wahrscheinlich ist es aber nicht möglich die Datei aus dem EA direkt zu ändern. Weil sie in einem anderen geschütztem Pfad liegt.
Da du aber so tief schon im Metatrader rumwurschtelst empfehle ich dir ein externen Steuerprogram.
Welche Sprache dir liegt musst du selber sehen.
Dann kannst du nach belieben die Dateien bearbeiten.
Man sollte dem Metatrader am besten das machen lassen was er gut kann.
Ticks bereitstellen und Trades absetzen.
Alles andere wo es knifflig wird externe Lösungen anstreben.
Das ist meine Meinung.
Für alle gängigen Sprachen gibt es so viele fertige lösungen für Probleme, da macht es wenig Sinn sich mit dem MT5 abzumühen.
Z.B. der INI-Reader-Writer mit em ich in MatLab arbeite kommt von GitHub.
kleiner Denkanstoß ....nicht immer das Rad neu erfinden
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Hallo Leute,
wenn man einen EA startet, hat man die Möglichkeit eine *.set Datei aus dem Ordner "Presets" über die Button "Laden" oder "Speichern" zu erzeugen, bzw. zu laden.
Gibt es eine Möglichkeit das auch über einen Befehl im EA zu tun?
Gruß Uwe