Bibliotheken: Expert - Seite 6

 
fxsaber:

Der Autor eines EA wird niemals den Handel mit seinem EA befürworten, wenn die Ergebnisse des Testers miserabel sind.

Das wird er nicht, aber das sind keine Signale - Expert Advisors werden unabhängig vom Brokerage Center verkauft. Dann sollte es obligatorisch sein, den Verkäufer anzugeben, wo er solche Ergebnisse erhält, und das ist eine Art Werbung für den DC....

 
Aleksey Vyazmikin:

Ich will mich nicht aufregen, aber das sind keine Signale - Berater werden unabhängig vom DC verkauft. Dann sollte es obligatorisch sein, den Verkäufer anzugeben, woher er solche Ergebnisse bekommt, und das ist eine Art Werbung für den DC....

Wahrscheinlich ist die theoretische Argumentation manchmal gut. Aber trotzdem interessiert mich die Praxis in Bezug auf diesen Beitrag. Es wurde in diesem Thread aus einem bestimmten Grund geschrieben.

Ich schlage vor, das Geplänkel von allen Seiten zu beenden.

 
fxsaber:

Auf dem Markt habe ich schon oft gesehen, dass Autoren für jeden Charakter Set-Dateien ihrer TCs beifügen. Dementsprechend nutzen die Käufer sie.


Ich schlage vor, die folgende Logik für Market TCs zu verwenden

  • Ein Eingabeparameter wird hinzugefügt
  • Wenn dieser Ordner vom Benutzer angegeben wird, holt der Expert Advisor automatisch alle Sets aus diesem Ordner und führt die entsprechenden Versionen aus.
  • Der Benutzer muss lediglich die Set-Datei in dem Ordner ablegen und den Pfad zu diesem Ordner beim Starten des Expert Advisors angeben (der Autor des Expert Advisors kann diesen Pfad gleich mit eingeben).
  • Wenn der Benutzer einen Fehler macht und ihn zweimal ausführt, kann dies automatisch verhindert werden.

Dieser Ansatz ist auch praktisch, um den eigenen TS mit einem Klick zu starten.

Natürlich kann die Lösung universell für beide Plattformen sein. Grob gesagt, muss nur eine Zeile in den Quellcode eines jeden Expert Advisors eingefügt werden.


Höchstwahrscheinlich werde ich von nun an EAs auf diese Weise starten. Wenn jemand einen Fehler in dieser Methode sieht oder eine Verbesserungsmöglichkeit sieht, lasst es mich wissen.

Die Ausführung im Tester wird sich von der Online-Ausführung unterscheiden (die Ordner sind schließlich unterschiedlich), und um eine bestimmte Kopie des EA einem Set zuzuordnen, muss man etwas Besonderes tun.

Nun, und allein die Verwaltung dieser Herde von EAs ohne eigene Visualisierung scheint schwierig zu sein.

Außerdem geht ein Wechsel des Sets mit einem Neustart aller EAs einher.


Einzelne MT-Charts dienen als "transparente Dateien", die im "harten Ordner" des Profils abgelegt werden. Dies ermöglicht es Ihnen, die notwendigen Informationen in jede Datei zu legen oder die benötigte Datei einfach herauszuziehen/zu ersetzen. Und Sie können zu einem anderen "festen Ordner" wechseln, indem Sie das Profil ändern. Ziemlich praktisch.

Ich hatte das Bedürfnis, einen Parameter in allen EAs zu ersetzen (z. B. Risiko). Ich habe es durch Massenersetzung in Vorlagendateien oder durch eine spezielle Mastervariable getan. Es wäre praktisch, dies in eine bequeme Funktion zu verpacken.

 
Andrey Khatimlianskii:

Die Ausführung im Tester unterscheidet sich von der Online-Ausführung (die Ordner sind unterschiedlich), um eine bestimmte Kopie des EA an den Satz anzupassen, müssen Sie etwas Besonderes tun.

Es wird keinen Unterschied geben.

Tja, und diese Herde von EAs ohne eigene Visualisierung zu verwalten, scheint schwierig zu sein.

Nicht komplizierter, als es jetzt ist.

Außerdem werden Änderungen am Set von einem Neustart aller Berater begleitet.

Der EA wird normal gestartet. Nur wenn Sie wollen, können Sie einen Ordner mit den Sets angeben.

Einzelne MT-Charts dienen als "transparente Dateien", die im "harten Ordner" des Profils abgelegt werden. Dies ermöglicht es Ihnen, die notwendigen Informationen in jede Datei zu legen oder die benötigte Datei einfach herauszuziehen/zu ersetzen. Und Sie können zu einem anderen "festen Ordner" wechseln, indem Sie das Profil ändern. Ziemlich praktisch.

Natürlich können Sie auch automatisch Profile in MQL5\Profiles\Charts\.... lesen/schreiben. Aber Profile sind etwas ganz anderes.

Ich bin auf die Notwendigkeit gestoßen, einen Parameter in allen EAs zu ersetzen (z. B. Risiko). Ich habe dies durch Massenersetzung in Vorlagendateien oder durch eine spezielle Mastervariable getan. Es wäre praktisch, dies in eine komfortable Funktion zu packen.

Eine solche Funktion ist in den Beispielen der Bibliothek enthalten.


Sie sollten jedoch zwischen der Änderung von Eingabeparametern durch die Neustartmethode und der manuellen Eingabe über F7 unterscheiden. Die erste Methode ist ein vollwertiger Neustart, die zweite nicht. Es gibt Zeiten, in denen Sie die zweite Methode benötigen. Dies kann jedoch nicht in MQL implementiert werden.

 
fxsaber:

Es wird keinen Unterschied geben.

Und wie? Indem Sie das gewünschte Set auswählen?


fxsaber:

Nicht komplizierter, als es jetzt ist.

Im Moment hat jeder laufende EA sein eigenes Set.

Aber wie verhält sich der "Manager", auf dem 10 Expert Advisors laufen, wenn einige von ihnen die Parameter manuell ändern? Und was passiert nach einem Neustart des Managers? Werden die ursprünglichen Sets gestartet?

 
Andrey Khatimlianskii:

Wie? Durch die Auswahl eines notwendigen Sets?

MQL_TESTER.

Jetzt hat jeder laufende Expert Advisor sein eigenes Set.

Aber wie verhält sich ein "Manager", auf dem 10 Expert Advisors laufen, wenn einige von ihnen ihre Parameter manuell geändert haben? Und was geschieht nach dem Neustart des Managers? Werden die ursprünglichen Sets gestartet?

Der Manager soll ja nicht benutzt werden. Offenbar kann ich nur mit Code zeigen, was ich meine. Vielen Dank für Ihre Teilnahme.

 
fxsaber:

MQL_TESTER.

Können Sie eine etwas ausführlichere Antwort geben?

Es ist natürlich möglich, festzustellen, dass der Startvorgang im Tester stattfindet. Aber es gibt keinen Zugriff auf den Ordner "Sets" (oder nur, wenn Sie Zugriff auf den Ordner "kamon" haben), und es hat keinen Sinn, diese Sets zu lesen - Sie müssen nur eines von ihnen testen.

Und nach dem Test müssen Sie ihn mit dem laufenden Expert Advisor abgleichen (z. B. um ihn zu stoppen oder einige Parameter zu ändern). Muss ich dazu in den Ordner mit den Sets gehen, das erforderliche Set suchen und es bearbeiten?


Dann sieht der Handel mit allen Sets von einem EA aus sinnvoller aus. Mit der Möglichkeit, eine oder mehrere Strategien (Sets) zu wählen.

 
Andrey Khatimlianskii:

Kann ich eine etwas ausführlichere Antwort erhalten?

Es ist natürlich möglich, festzustellen, dass der Startup im Tester ist. Aber es gibt keinen Zugriff auf den Ordner "sets" (oder es gibt ihn, wenn kamon), und es hat keinen Sinn, diese Sets zu lesen - Sie müssen nur eines davon testen.

Und nach dem Test müssen Sie ihn mit dem laufenden Expert Advisor abgleichen (z. B. um ihn zu stoppen oder einen Parameter zu ändern). Muss ich dazu in den Ordner mit den Sets gehen, das erforderliche Set suchen und es bearbeiten?

Für den Tester wird eine eigene opt-Datei verwendet. Von dort aus wird jedes Set mit einem Klick gestartet. Das ist superpraktisch.

Wenn Sie keine opt-Datei haben, arbeiten Sie auf die altmodische Weise. Das heißt, es ist überhaupt nichts kompliziert.

Dann sieht es sinnvoller aus, alle Sets von einem EA aus zu handeln. Mit der Möglichkeit, eine oder mehrere Strategien (Sets) zu wählen.

Eine solche Auswahl ist im Tester immer vorhanden - laden Sie ein Set.

 
Ich würde empfehlen, eine solche Prüfung in Ihre EAs einzubauen.
// Plattformübergreifendes Beispiel für den Schutz vor fehlerhaftem Start von EA-Klonen.

#include <fxsaber\Expert.mqh> // https://www.mql5.com/de/code/19003

string GetExpertData( const ulong Chart = 0 ) 
{ 
  string Str = NULL; 

  MqlParam Parameters[]; 
  string Names[]; 

  if (EXPERT::Parameters(Chart, Parameters, Names)) 
  { 
    Str += "\n" + ::ChartSymbol(Chart) + " " + ::EnumToString(::ChartPeriod(Chart)) + " " + Parameters[0].string_value + "\n"; 

    const int Amount = ::ArraySize(Names); 

    for (int i = 0; i < Amount; i++) 
      Str += (string)i + ": "+ Names[i] + " = " + Parameters[i + 1].string_value + "\n"; 
  } 

  return(Str); 
} 

// Läuft derselbe Berater?
long IsRunning( void )
{ 
  long Res = 0;
  const string Str = GetExpertData();
  long Chart = ::ChartFirst(); 

  while (!Res && (Chart != -1)) 
    if ((Chart != ::ChartID()) && EXPERT::Is() && (Str == GetExpertData(Chart)))
      Res = Chart;
    else
      Chart = ::ChartNext(Chart); 

  return(Res); 
}

input int Range1 = 1;
input int Range2 = 1;

int OnInit()
{
  return(!MQLInfoInteger(MQL_TESTER) && IsRunning() &&
         (MessageBox("This EA is already running." +
                     GetExpertData() + "\nRun?", MQLInfoString(MQL_PROGRAM_NAME), MB_YESNO) == IDNO) ?
         INIT_FAILED : INIT_SUCCEEDED);
}
 

// MT4-advisor zeigt an, in welchem Long/Short-Modus er ausgeführt wurde.

#include <fxsaber\Expert.mqh> // https://www.mql5.com/de/code/19003

int GetLongShortFlag( const int Chart_ID = 0 )
{
  MqlParam Params[];
  string Names[];
  
  const int Res = EXPERT::Parameters(Chart_ID, Params, Names);
  
  return(((Res & 3) << 1) + (Res & 1));
}

string LongShortToString( const int Chart_ID = 0 )
{
  const int Flag = GetLongShortFlag(Chart_ID);
  string Str = NULL;
  
  if ((bool)(Flag & SYMBOL_TRADE_MODE_LONGONLY) && (bool)(Flag & SYMBOL_TRADE_MODE_SHORTONLY))
    Str = "Long & Short";
  else if ((bool)(Flag & SYMBOL_TRADE_MODE_LONGONLY))
    Str = "Only Long";
  else if ((bool)(Flag & SYMBOL_TRADE_MODE_SHORTONLY))
    Str = "Only Short";
    
  return(Str);
}

int OnInit()
{
  Alert(LongShortToString());
  
  return(INIT_FAILED);
}