Diskussion zum Artikel "Entwicklung eines Expertenberaters für mehrere Währungen (Teil 1): Zusammenarbeit von mehreren Handelsstrategien" - Seite 3

 
Yuriy Bykov #:

Ich bin gerade dabei, meinen in den letzten Jahren geschriebenen Code fast von Grund auf neu zu gestalten

Beim Refactoring möchte man es immer so machen, dass man es später nicht noch einmal machen muss und es bequem/perspektivisch ist.

Child( const string sInputs ) : Parent(sInputs)
{
  this.SetInputs(sInputs);
}

virtual int SetInputs( const string sInputs )
{
  return(this.Inputs.FromString(sInputs) + this.Parent::SetInputs(sInputs));
} 

So bin ich zu dieser Lösung gekommen, mit Eingaben zu arbeiten.

 
fxsaber #:

Beim Refactoring sollte man immer so vorgehen, dass man es später nicht noch einmal machen muss und dass es bequem und übersichtlich ist.

Es scheint architektonisch vielversprechend zu sein, wenn CStrategy in drei Einheiten aufgeteilt ist: den Handelskern (gibt Signale), den Handelsteil (handelt Signale) und MM

class CSimpleVolumeStrategy : public CStrategy {
private:
   //--- Parameter des Öffnungssignals
   int               signalPeriod_;       // Anzahl der Kerzen für die Volumenmittelung
   double            signalDeviation_;    // Relative Abweichung vom Durchschnitt bei der Eröffnung des ersten Auftrags
   double            signaAddlDeviation_; // Relative Abweichung vom Durchschnitt für die Eröffnung des zweiten und der folgenden Aufträge

   //--- Parameter der schwebenden Aufträge
   int               openDistance_;       // Abstand vom Preis zum schwebenden Auftrag
   double            stopLevel_;          // Stop Loss (in Punkten)
   double            takeLevel_;          // Gewinnmitnahme (in Pips)
   int               ordersExpiration_;   // Verfallszeit der schwebenden Aufträge (in Minuten)

   //--- Parameter für die Kapitalverwaltung
   int               maxCountOfOrders_;   // Max. Anzahl der gleichzeitig geöffneten Aufträge

Hier haben wir sie alle zusammen. Es ist jedoch praktisch, wenn man denselben Kern (neuer Kern2 statt neuer Kern1) durch andere Eingaben ersetzen kann. Gleichzeitig kann die Ersetzung erfolgen, ohne dass man an den Eingängen herumfummeln muss, da sie syntaktisch auf die gleiche Weise definiert sind - eine Zeichenkette.


Ähnlich verhält es sich mit Control und MM. Im Allgemeinen schlage ich vor, erneut über eine universelle Architektur nachzudenken.

 
fxsaber #:
Es scheint architektonisch vielversprechend, wenn CStrategy in drei Einheiten aufgeteilt wird: Trading Core (gibt Signale), Trading Part (handelt Signale) und MM....

Es scheint, dass dieser Ansatz bereits in SB - CExpert Klasse implementiert ist.

Und es gibt sogar eine CStrategy-Klasse von Vasily Sokolov ))

Документация по MQL5: Стандартная библиотека / Модули стратегий / Базовые классы экспертов / CExpert
Документация по MQL5: Стандартная библиотека / Модули стратегий / Базовые классы экспертов / CExpert
  • www.mql5.com
CExpert - Базовые классы экспертов - Модули стратегий - Стандартная библиотека - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Ich habe die Standardklasse CExpert gesehen, aber sie hat für mich nicht funktioniert. Sie fügte zu viel hinzu, was ich nicht brauchte. Die Vererbungshierarchie war auch ein wenig entmutigend, wenn die Basisklasse für die Implementierung von Geld- und Risikomanagementalgorithmen und die Basisklasse für die Erstellung von Generatoren für Handelssignale von derselben Basisklasse geerbt werden.

Ich habe die Artikelserie von Vasily Sokolov nicht gesehen, danke für den Link, ich werde sie mir ansehen.

 
Denis Kirichenko #:

Wie es scheint, ist ein solcher Ansatz bereits in SB - Klasse CExpert- implementiert.

Es scheint, dass die Aufgabe der Integration in den Strategy Wizard dort gelöst wurde. Das heißt, der ursprüngliche Ansatz ist ganz anders. Sicherlich gibt es einige Überschneidungen, aber das ist eher ein Zufall.

 
Denis Kirichenko #:

Und es gibt sogar eine CStrategy-Klasse von Vasily Sokolov ))

Ich bin der Meinung, dass das architektonische Skelett äußerst prägnant und einfach zu verwenden sein sollte. Deshalb ist die Basisklasse von TS wie folgt.

Als nächstes eine kleine Sehnenmast. Es sollte sehr einfach sein.

Leider hat Vasily einen anderen Ansatz.

 
fxsaber #:

Ich bin der Meinung, dass das architektonische Skelett äußerst prägnant und einfach zu verwenden sein sollte. Deshalb ist die Basisklasse von TC so aufgebaut.

Als Nächstes werden die Sehnen ein wenig ausgearbeitet. Es sollte sehr einfach sein.

Es gibt etwas ähnlich einfaches (in Bezug auf die Schnittstelle), aber erweitertes (in Bezug auf die Implementierung) in dem Buch.

interface TradingSignal
{
   virtual int signal(void);
};

interface TradingStrategy
{
   virtual bool trade(void);
};

...
...
AutoPtr<TradingStrategy> strategy;
   
int OnInit()
{
   strategy = new SimpleStrategy(
      new BandOsMaSignal(...параметры...), Magic, StopLoss, Lots);
   return INIT_SUCCEEDED;
}
   
void OnTick()
{
   if(strategy[] != NULL)
   {
      strategy[].trade();
   }
}
...
Учебник по MQL5: Автоматизация торговли / Тестирование и оптимизация экспертов / Большой пример эксперта
Учебник по MQL5: Автоматизация торговли / Тестирование и оптимизация экспертов / Большой пример эксперта
  • www.mql5.com
Автоматизация торговли - Программирование на MQL5 для трейдеров - Учебник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Stanislav Korotky #:

In dem Buch gibt es etwas ähnlich Einfaches (in Bezug auf die Schnittstelle), aber Erweitertes (in Bezug auf die Implementierung).

Wo kann ich den Quellcode herunterladen?

 
fxsaber #:

Wo kann man den Quellcode herunterladen?

https://www.mql5.com/de/code/45595

Программирование на MQL5 для трейдеров — исходные коды из книги. Часть 6
Программирование на MQL5 для трейдеров — исходные коды из книги. Часть 6
  • www.mql5.com
В шестой части книги "Программирование на MQL5 для трейдеров" мы изучим ключевую составляющую языка MQL5 — автоматизацию торговли. Начнем с описания основных сущностей, таких как спецификации финансовых инструментов и настройки торгового счета, которые необходимы для создания корректных советников.
 
Sehr interessante Strategie!!