Set-Datei aus einem EA heraus schreiben und lesen

 

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

 
Uwe Koeppe:

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

 
Uwe Koeppe:

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

 
Uwe Koeppe:

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

 
Uwe Koeppe:

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

Dateien:
lib_input.mqh  35 kb
 
Uwe Koeppe:

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