Bibliotheken: Symbol - Seite 4

 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Maschinelles Lernen im Handel: Theorie und Praxis (Trading und nicht nur)

fxsaber, 2018.04.15 16:31

Erstellen wir ein benutzerdefiniertes Symbol mit der richtigen Tick-Verteilung und schreiben wir einen Gral TC. Lass uns einen Backtest machen und das Ergebnis posten.

// Beispiel für die Erstellung eines benutzerdefinierten Zeichens aus generierten Ticks

#property script_show_inputs

input string SymbName = "TESTER";

#include <fxsaber\ThirdPartyTicks\CustomSymbol.mqh> // https://www.mql5.com/de/code/20225

// Generierung der Tick-History mit der gewünschten Eigenschaft - technisches Beispiel
int GetTicks( MqlTick &Ticks[], const int Amount = 1 e5 )
{
  static const MqlTick NullTick = {0};
  
  const int Size = ArrayResize(Ticks, Amount);
  
  long time = (TimeCurrent() - 7 * 24 * 3600) * 1000;
  
  for (int i = 0; i < Size; i++)
  {
    Ticks[i] = NullTick;
    
    const double Price1 = NormalizeDouble(MathRand() / 1000.0, 3);
    const double Price2 = NormalizeDouble(MathRand() / 1000.0, 3);
    
    Ticks[i].bid = MathMin(Price1, Price2);
    Ticks[i].ask = MathMax(Price1, Price2);
    
    time += MathRand();
    
    Ticks[i].time_msc = time;
    Ticks[i].time = (datetime)(time / 1000);
  }
  
  return(Size);
}

void OnStart()
{  
  CUSTOMSYMBOL Symb(SymbName); // Erstellt ein Symbol

  if (Symb.IsCustom())
  {
    Symb.SetProperty(SYMBOL_TRADE_STOPS_LEVEL, 0);    

    // Die Währungen des Symbols zur Währung des Kontos machen
    Symb.SetProperty(SYMBOL_CURRENCY_PROFIT, AccountInfoString(ACCOUNT_CURRENCY));
    Symb.SetProperty(SYMBOL_CURRENCY_MARGIN, AccountInfoString(ACCOUNT_CURRENCY));
    Symb.SetProperty(SYMBOL_CURRENCY_BASE, AccountInfoString(ACCOUNT_CURRENCY));

    // Zur Berechnung des Gewinns
// Symb.SetProperty(SYMBOL_TRADE_TICK_VALUE, 1);
// Symb.SetProperty(SYMBOL_TRADE_TICK_SIZE, Symb.GetProperty(SYMBOL_POINT));
    
    MqlTick Ticks[];
    
    GetTicks(Ticks); // Bildung einer Tick-Historie
    
    if ((Symb.AddTicks(Ticks) > 0) && (Symb.DataToSymbol() > 0) && Symb.On()) // Senden des Tickverlaufs an das Symbol
      ChartOpen(Symb.Name, PERIOD_CURRENT); // Öffnete das Diagramm
  }
}

In diesem Skript müssen wir nur unser eigenes GetTicks schreiben. Basierend auf der generierten Historie, werden wir ein fast vollwertiges (benutzerdefiniertes) Symbol für den Handel im Tester zur Verfügung haben.


 
fxsaber:

Ein weiteres Szenario für die Verwendung benutzerdefinierter Symbole (nicht unbedingt mit Hilfe dieser Bibliothek).


Es ist möglich, den regelmäßigen Backtest des Expert Advisors auf frischen historischen Daten vollständig zu automatisieren und die Testergebnisse an den Expert Advisor zu übertragen, um das reale Bild mit dem Tester zu synchronisieren. Dies erlaubt es Ihnen, eine solche Handelslogik zu implementieren, ohne einen eigenen Tester zu schreiben.


Eine weitere Möglichkeit, dieses Schema zu nutzen:

Eine kostenlose Demoversion des Expert Advisors wird vom Markt genommen und im Tester mit frischen Kursen gejagt, der Kopierer übernimmt die Daten aus dem Ergebnis des Testers. Die kostenpflichtige Version ist demnach nicht erforderlich.


Vielleicht ist es notwendig, Market Expert Advisors Backtest auf eigene Symbole zu verbieten....

// Den aktuellen Tag in den Backtest einbeziehen
#property script_show_inputs

#include <Symbol.mqh> // https://www.mql5.com/de/code/18855

input int Offset = -24 * 7; // Offset in Stunden

#define  HOUR 3600

void OnStart()
{
  const SYMBOL Symb(_Symbol + "_Offset" + (string)Offset); // Erstellt ein Symbol

  if (Symb.IsExist()) // Wenn das Symbol erstellt wird
  {
    Symb.CloneProperties(); // Kopieren der Eigenschaften
    
    MqlRates Rates[];

    // Verschobene Taktzeiten
    for (int i = CopyRates(_Symbol, PERIOD_M1, 0, (int)SeriesInfoInteger(_Symbol, PERIOD_M1, SERIES_BARS_COUNT), Rates) - 1; i >= 0; i--)
      Rates[i].time += Offset * HOUR;
      
// Symb.CloneTicks(Ticks);

    // Aufzeichnung der versetzten Balken und Aufnahme des Symbols in den Market Watch
    if ((Symb.CloneRates(Rates) > 0) && Symb.On())
      ChartOpen(Symb.Name, PERIOD_CURRENT); // Öffnete eine neue Symboltabelle
  }
}

MT5 Build 1880 - funktioniert so weit.

 

Es gibt zwei Möglichkeiten, Slippages im Tester zu setzen

  1. Einfügen von Pseudo-Ticks (um den Slippage-Wert herabgesetzte Preise) zwischen echten Ticks. Dann ungerade Ticks - Analyse, gerade Ticks - Handel.
  2. Analyse durch ein reales Symbol, Handel - durch ein benutzerdefiniertes Symbol. Benutzerdefiniert - Verschlechterung des realen Preises um den Slippage-Wert.

 

große Bibliothek, aber, ich zitiere.

Andrey Khatimlianskii:

Ich danke Ihnen! Wie immer, ein bisschen komplizierter als ich möchte ;)

Ihre Codes haben einen unbestreitbaren Vorteil - sie können übernommen und verwendet werden. Aber es ist ziemlich schwierig, irgendetwas an ihnen zu ändern, das ist ein Nachteil.

Es ist sehr praktisch, dass ich mit einer Zeile eine fertige Kopie eines benutzerdefinierten Symbols erstellen kann, aber:

Sagen Sie mir, wie Sie Ihr eigenes Symbol mit Ihrer Bibliothek erstellen können, aber nicht, um historische Daten zu kopieren - ich möchte OHLC ändern, und möchte Ihren Code nicht verderben ))), vielen Dank im Voraus!

 
Und ich frage mich, warum benutzerdefinierte Symbole benötigt werden? Wenn echte Symbole, die bei DC verfügbar sind, gehandelt werden?
 
Viktar Dzemikhau:
Und ich frage mich, warum benutzerdefinierte Symbole benötigt werden? Wenn echte Symbole, die in DC verfügbar sind, gehandelt werden?

Ich entwickle den Gedanken von dickfix, wie "es ist nicht immer möglich, jedes Symbol für den automatischen Handel zu verwenden, wenn der EA nicht auf diesem Symbol funktioniert, braucht er vielleicht ein anderes Symbol oder benutzerdefinierte Charts".

Es gibt eine gewisse Logik darin.

;)

 
Igor Makanu:

Ich entwickle den Gedanken von dickfix, wie "dass es nicht immer möglich ist, jedes Symbol für den automatischen Handel zu verwenden, wenn der EA nicht auf diesem Symbol funktioniert, braucht er vielleicht ein anderes Symbol oder benutzerdefinierte Charts".

Es steckt eine gewisse Logik dahinter.

;)

Das ist Blödsinn. Welchen Unterschied macht es, welches Symbol? Wenn das Symbol real ist, kann man auf es zugreifen. Ich habe meine eigene Symbolklasse. Das einzige notwendige Mitglied der Klasse ist der Name des gehandelten Instruments. Sie geben ein anderes Instrument ein, und ich erhalte alle erforderlichen Daten. Ich habe mich also gefragt, nachdem ich in diesen Thread geraten bin, warum ein benutzerdefiniertes Symbol? Wenn es gehandelt werden kann, heißt es so und so, und wenn es nicht gehandelt werden kann... wie kann es das nicht?
 
Viktar Dzemikhau:
Wenn er gehandelt werden kann, heißt er so und so, und wenn er nicht gehandelt werden kann... wie kann er nicht gehandelt werden?

Warum kann sie nicht gehandelt werden? Der Expert Advisor funktioniert im Strategietester, Sie können also den Optimierer verwenden... das heißt, Sie können nach Mustern suchen.

Wie man sagt, hat jeder seinen eigenen Weg - wenn Sie denken, dass Sie Daten in einer Klasse speichern können, bitte sehr, für mich ist es einfacher, Daten in einem benutzerdefinierten Symbol auszugeben und dann Indikatoren auf diesem Chart zu verwenden.

Hier ist der EURUSD - GBPUSD Spread aus meiner Synthetik.

https://charts.mql5.com/18/849/spread-h1-alpari-international-limited.png

Es ist sehr praktisch, dass man den Chart visuell sehen und die Zeit der Balken analysieren kann, und außerdem gibt es alle TFs und man kann die Strategie im Strategietester laufen lassen, und es ist kein Problem, zu echten Symbolen zurückzukehren.

 
Igor Makanu:

Warum nicht? Im Strategietester wird der Expert Advisor funktionieren, so dass Sie den Optimierer verwenden können... das heißt, Sie können nach Mustern suchen.

Wie man so schön sagt, jeder hat seinen eigenen Weg - wenn Sie der Meinung sind, dass Daten in einer Klasse gespeichert werden können, bitte sehr, für mich ist es einfacher, Daten in einem benutzerdefinierten Symbol auszugeben und dann Indikatoren auf diesem Chart zu verwenden.

Natürlich mache ich das. Schließlich können Sie in 5 jederzeit auf verschiedene Tools zugreifen. Und für jedes Werkzeug eine eigene Klasse zu schreiben, ist überflüssig. Das ist so, als hätten wir Shapes, und wir verwenden nicht die grundlegende Shape-Klasse, sondern schreiben immer eine neue. Ich kritisiere das natürlich nicht. fxsaber schreibt manchmal recht kompetente Dinge. Und er weiß es besser, offenbar braucht er es. Aber ich denke, es ist unnötig.


Igor Makanu:

warum nicht? ein Expert Advisor funktioniert im Strategietester, man kann also den Optimierer benutzen... das heißt, Sie können nach Mustern suchen

Wie man sagt, hat jeder seinen eigenen Weg - wenn Sie denken, dass Daten in einer Klasse gespeichert werden können, bitte sehr, für mich ist es einfacher, Daten in einem benutzerdefinierten Symbol auszugeben und dann Indikatoren auf diesem Chart zu verwenden.

Hier ist eine Skizze des EURUSD - GBPUSD-Spreads aus meiner Synthetik.

https://charts.mql5.com/18/849/spread-h1-alpari-international-limited.png

Es ist sehr praktisch, dass man den Chart visuell sehen und die Zeit der Balken analysieren kann, und außerdem gibt es alle TFs, und man kann eine Strategie im Strategietester ausführen, und es ist kein Problem, zu echten Symbolen zurückzukehren.

Wenn ich gewusst hätte, was es bringen würde, hätte ich diese Idee vielleicht unterstützt. Aber so ist es...))

 
Igor Makanu:

bitte sagen Sie mir, wie Sie Ihr eigenes Symbol mit Ihrer Bibliothek erstellen können, aber nicht, um historische Daten zu kopieren - ich möchte OHLC ändern und möchte Ihren Code nicht verderben ))), danke im Voraus!

Oben ist ein kurzer Code. Dort gibt es ausführliche Kommentare.