Diskussion zum Artikel "Erzeugung von Multi-Expert Advisors auf Grundlage von Handelsmodellen" - Seite 5

 

MetaTrader 5 Client Terminal build 381

...

MQL5: Die Standardbibliothek wurde aktualisiert: die Type()-Methoden der Klassen CDealInfo, CHistoryOrderInfo, COrderInfo und CPositionInfo wurden in DealType(), OrderType() bzw. PositionType() umbenannt.

...


Da sich das Modell auf die Basis-Handelsklassen stützt, sind selbst kleine Änderungen an deren Schnittstellen kritisch. In diesem Fall kann der Fehler leicht behoben werden, indem einfach die Methode Type() in der Datei TableOrders.mqh in die entsprechende OrderType() geändert wird.

In naher Zukunft werden die dem Artikel beigefügten Codes aktualisiert, damit sie mit den neuesten Builds des Compilers und des Terminals korrekt funktionieren.

 

chr1sch4n: Es gibt keinen Fehler... Ihr Code, den Sie neu geschrieben haben, ist identisch.

In der Sprache C fallen case-Anweisungen durch, weshalb Sie die break-Anweisung einfügen müssen, so dass die Buy-Anweisung zur nächsten Anweisung durchfällt und trotzdem den Auftrag ausführt.

Siehe: http: //en.wikipedia.org/wiki/Switch_statement ; Abschnitt C, C++, Java, PHP, ActionScript, JavaScript; "Dies ist ein klassisches Beispiel für das Weglassen der Break-Zeile, um ein Durchfallen zu ermöglichen".

Prost

 
Lugner:

Eine Bitte - können die Kommentare in den englischen Dateien übersetzt werden?

Behoben. Dankeschön.
 
Einer der besten Artikel, die ich je gelesen habe, vielen Dank.
 

Ich scheine nicht zu bekommen, die beeindruckende Backtest in dem Artikel gezeigt. was sind die Einstellungen, die ich tun müssen?

 

"Es lohnt sich, die Variablem_timing gesondert zu beschreiben. Im Verlauf der Arbeit des Expert Advisors ist es erforderlich, bestimmte Ereignisse in bestimmten Zeitintervallen aufzurufen.Die FunktionOnTimer()ist dafür nicht geeignet, da verschiedene Modelle unterschiedliche Zeitintervalle haben können.

Einige Ereignisse müssen zum Beispiel bei jedem neuen Balken aufgerufen werden. Bei einem Modell, das auf einem Stundenchart handelt, sollten solche Ereignisse jede Stunde aufgerufen werden, bei einem Modell, das auf einem Tageschart handelt, bei jedem neuen Tagesbalken. Es ist klar, dass diese Modelle unterschiedliche Zeiteinstellungen haben und jedes in seinem eigenen Modell entsprechend gespeichert werden sollte. Die in der Klasse CModel enthaltene Struktur t_period ermöglicht die separate Speicherung dieser Einstellungen in jeweils einem eigenen Modell.

Hier sehen Sie, wie diese Struktur aussieht:

struct t_period
{
 большая структура 
};

Wie Sie sehen können, enthält sie die übliche Aufzählung von Zeitrahmen. Um herauszufinden , ob ein neuer Balken aufgetreten ist, müssen wir die Zeit des letzten Balkens mit der in der t_period-Struktur gespeicherten Zeit vergleichen. Wenn die Zeit nicht übereinstimmt, dann ist ein neuer Balken aufgetreten, die Zeit in der Struktur sollte auf die Zeit des aktuellen Balkens aktualisiert werden und ein positives Ergebnis (true) zurückgeben. Wenn die Zeit des letzten Balkens und die Struktur übereinstimmen, bedeutet dies, dass noch kein neuer Balken aufgetreten ist, und wir müssen nur ein negatives Ergebnis (false) zurückgeben.

Hier ist eine Funktion, die nach dem beschriebenen Algorithmus funktioniert:

bool timing(string symbol, ENUM_TIMEFRAMES tf, t_period &timeframes)
{
большой swich
} 

"

Ich bin natürlich nur ein unerfahrener Programmierer, aber vielleicht ist es möglich, den Beginn eines neuen Balkens zu bestimmen, um dies zu tun (während die Variable m_timing nur datetime ist):

Sollte ich mich mit den Schlussfolgerungen irren, entschuldige ich mich im Voraus und bitte Sie, mich zu korrigieren. Wenn ich mich nicht irre - ich danke dieser Website und insbesondere alle diejenigen, die hier arbeiten - Artikel, Dokumentation schreibt - ich begann, etwas zu verstehen.

bool timing(string symbol, ENUM_TIMEFRAMES tf, t_period &timeframes)
{
   int rez;
   MqlRates raters[1];
   rez=CopyRates(symbol, tf, 0, 1, raters);
   if(rez==0)
   {
      Print("Error timing");
      return(false);
   }
   if (TimeCurrent()-raters.time)>PeriodSeconds(tf) return(true); else return(false);
   
} 


P.S.:By the way, danke für einen großen Artikel.

 

Hallo!

wie kann ich das Modell oder die Funktion Processing() erweitern, um den Paarhandel (ein anderes Symbol) zu unterstützen? Jetzt funktioniert alles mit dem Indikator und dem anschließenden Handel nur mit demselben Symbol. Wie kann ich Symbol1 und Symbol2 hinzufügen, damit ich Symbol1 kaufen und Symbol2 gleichzeitig verkaufen kann?

Vielen Dank für Ihre Hilfe

P.S.: Oder kaufen/verkaufen Sie Symbol1 basierend auf dem Verhalten des Indikators auf Symbol2...

 
P_Cherry:

Hallo!

wie kann ich das Modell oder die Funktion Processing() erweitern, um den Paarhandel (ein anderes Symbol) zu unterstützen? Jetzt funktioniert alles mit dem Indikator und dem anschließenden Handel nur mit demselben Symbol. Wie kann ich Symbol1 und Symbol2 hinzufügen, damit ich Symbol1 kaufen und Symbol2 gleichzeitig verkaufen kann?

Vielen Dank für Ihre Hilfe

P.S.: Oder Kauf/Verkauf von Symbol1 basierend auf dem Verhalten des Indikators auf Symbol2...

Ich hoffe, das ist möglich?
 
Automated-Trading:
Behoben. Ich danke Ihnen.
danke.
 

Hallo!

Danke für diesen tollen Artikel...

In der Funktion ReplacedDelayedOrders ist die Codezeile: for(int b=0;i<history_orders;b++)

Ich denke, das führt zu einer Endlosschleife, oder liege ich da falsch?

Ich denke, die Codezeile muss lauten: for(int b=0;b<history_orders;b++)

Tschüss, T.