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

 

Herzlichen Dank an den Autor für den Artikel und den Code. Heute habe ich den Code eines einfachen Expert Advisors für die Model-Klasse neu gestaltet. Nach einigen Bemühungen ist es mir gelungen, eine parallele Arbeit auf verschiedenen Paaren und Zeitrahmen zu erreichen.

Das Einzige, was ich im Code korrigieren musste, war die Funktion GetMyPosition() leicht zu modernisieren, so dass sie das Volumen nur anhand des als Parameter übergebenen Symbols zählt. Andernfalls erhält ein Modell, das mit einem Bündel von zwei oder mehr Paaren arbeitet, beim Aufruf von GetMyPosition() das Gesamtvolumen für mehrere Paare anstelle des erforderlichen separaten Volumens für jedes Paar. Ich habe auch eine Methode zur Klasse CTableOrders hinzugefügt, um das Auftragssymbol zu erhalten.

string            OrderSymbol(){return(m_symbol);}


Nochmals vielen Dank!

 

Ich danke Ihnen, liebe Freunde, für die Wertschätzung meiner Arbeit! Es ist schön zu sehen, dass die Themen, die ich behandle, relevant und notwendig sind. Lassen wir uns nicht auf eine Polemik mit ungebildeten Kritikern ein. Es wird sie immer geben, und sie werden sich auch in offensichtlichen Dingen nicht überzeugen lassen.

H.Y. Es ist besser, die Methode double GetMyPosition() entsprechend zu überladen: double GetMyPosition(string Symbol). Das wird Ihnen mehr Flexibilität und Vielseitigkeit geben.

Zweifellos wird der Code im Laufe der Zeit verbessert und verändert werden, denn es ist unmöglich, alle möglichen Anwendungsbereiche auf einmal zu berücksichtigen.

Nochmals vielen Dank und ein gutes neues Jahr 2011! Viel Glück und viel Erfolg!

 
Огромное спасибо автору за статью, обязательно возьму себе на вооружение.
 

Danke Vasily für den Artikel - meiner Meinung nach ist dies der beste Ansatz bisher. Es ist einfach unglaublich, wie Sie diesen Code debuggen konnten.

Vasily - wie haben Sie diesen Code ohne Debugger in einem Tester debuggt? Ich finde es sehr schwierig, ohne Debugger in einem Tester zu arbeiten - weil die Signale anders sind und unter anderen Bedingungen.

Teilen Sie Ihre Erfahrungen mit dem Debuggen.

 

Hallo. Respekt für dieses tolle Tutorial.Sehr großes Lob an dich.

Ich habe diesen Code debugged und finde einen Fehler in Zeile 355 in Model.mqh

switch(op_type)
 {
 case ORDER_TYPE_BUY:
 case ORDER_TYPE_SELL:
 rez=m_trade.PositionOpen(m_symbol,op_type,lot_send,price,0.0,0.0,comment);
 break;

unter ORDER_TYPE_BUY: ist keine Funktion.Ist das richtig?Keine Funktion bei Buy?
Ich habe den Code geändert in:

switch(op_type)
 {
 case ORDER_TYPE_BUY:
 rez=m_trade.PositionOpen(m_symbol,op_type,lot_send,price,0.0,0.0,comment);
 break;
 case ORDER_TYPE_SELL:
 rez=m_trade.PositionOpen(m_symbol,op_type,lot_send,price,0.0,0.0,comment);
 break;


Aber in Jornual sieht man, dass er keine Long Position hat nur Short.


ea_modelclass



Ich finde den Fehler nicht.brauche Hilfe.


MfG Christian

Dateien:
logfile.txt  100 kb
 
Nach den letzten Terminal-Updates funktioniert das Modell nicht mehr. Kann jemand erklären, was passiert ist?
 
YYURIYY:
Nach den letzten Terminal-Updates funktioniert das Modell nicht mehr. Kann mir jemand erklären, was passiert ist?


Das Gleiche gilt für mich. Ich habe den Code eine Woche lang Komma für Komma geparst. Die Strategie platziert Verkaufsaufträge, aber die Funktion GetNumberOrders() liefert nur Verkaufsaufträge = 0, aber Kaufaufträge = 1.

Ich möchte Vasily, den Entwickler dieses Codes, bitten, mir zu helfen. Ich kann noch nicht herausfinden, was der Grund dafür ist.

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 

Kompliment für diesen Artikel!!

Ich bin froh, dass mehr Menschen über diese Idee denken. Vor einiger Zeit habe ich versucht, ein Multicurrency Multistrategy EA Template in MQL4 zu entwickeln.

Seit MQL5 da ist, habe ich versucht, das Objektmodell eines solchen EAs zu entwerfen und mit der Implementierung zu beginnen.

Leider habe ich keine freie Zeit für diese Aktivitäten... :-(

Bitte machen Sie weiter mit diesem Projekt... das ist der Weg, den ich denke... ein Framework zu haben, wo es möglich ist, einfach eine Menge von Strategien zu implementieren und mit der Möglichkeit, jede von ihnen ein- und auszuschalten, manuell oder sogar automatisch. So können wir ein Portfolio von EA's haben und sogar einige EA's hinzufügen oder entfernen, wenn es erforderlich ist.

Vielen Dank dafür!!

PS: hier ist ein Link, wenn Sie daran interessiert sind...

https:// www.mql5.com/en/forum/118148

Cooperation on interesting projects: TRENDLINE AUTOTRADER and UNIVERSAL MULTICURRENCY MULTISTRATEGY TRADER TEMPLATE - MQL4 forum
  • www.mql5.com
Cooperation on interesting projects: TRENDLINE AUTOTRADER and UNIVERSAL MULTICURRENCY MULTISTRATEGY TRADER TEMPLATE - MQL4 forum
 
YYURIYY:
Nach den letzten Terminal-Updates funktioniert das Modell nicht mehr. Kann mir jemand erklären, was passiert ist?

Ich glaube, ich habe es herausgefunden. Im Code muss man :

#property copyright "Copyright 2010, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"

#include <Trade\_OrderInfo.mqh>
#include <Trade\_HistoryOrderInfo.mqh>
#include <Arrays\List.mqh>
class CTableOrders : CObject
{
private:
   ulong             m_magic;       // Magik des Experten, der den Auftrag erteilt hat
   ulong             m_ticket;      // Ticket des Hauptauftrags
   ulong             m_ticket_sl;    // Ticket des Rückkaufsauftrages des auf Basis des Hauptauftrages ausgeführten Geschäftes (Stop Loss)
   ulong             m_ticket_tp;    // Ticket des Rückkaufsauftrages des auf Basis des Hauptauftrages ausgeführten Geschäftes (Take Profit)
   ENUM_ORDER_TYPE   m_type;         // Hauptauftragsart
   datetime          m_time_setup;  // Uhrzeit der Bestellung
   double            m_price;       // Preis bestellen
   double            m_sl;          // Vorgeschlagener Stop-Loss-Kurs
   double            m_tp;          // Preis der geschätzten Gewinnmitnahme
   double            m_volume_initial;      // Auftragsvolumen
public:
                     CTableOrders();
   bool              Add(COrderInfo &order_info, double stop_loss, double take_profit);
   bool              Add(CHistoryOrderInfo &history_order_info, double stop_loss, double take_profit);
   double            StopLoss(void){return(m_sl);}
   double            TakeProfit(void){return(m_tp);}
   ulong             Magic(){return(m_magic);}
   ulong             Ticket(){return(m_ticket);}
   int               Type() const;
   datetime          TimeSetup(){return(m_time_setup);}
   double            Price(){return(m_price);}
   double            VolumeInitial(){return(m_volume_initial);}
};

CTableOrders::CTableOrders(void)
{
   m_magic=0;
   m_ticket=0;
   m_type=0;
   m_time_setup=0;
   m_price=0.0;
   m_volume_initial=0.0;
}

bool CTableOrders::Add(CHistoryOrderInfo &history_order_info, double stop_loss, double take_profit)
{
   if(HistoryOrderSelect(history_order_info.Ticket())){
      m_magic=history_order_info.Magic();
      m_ticket=history_order_info.Ticket();
       m_type=history_order_info.OrderType();
      m_time_setup=history_order_info.TimeSetup();
      m_volume_initial=history_order_info.VolumeInitial();
      m_price=history_order_info.PriceOpen();
      m_sl=stop_loss;
      m_tp=take_profit;
      return(true);
   }
   else return(false);
}

bool CTableOrders::Add(COrderInfo &order_info, double stop_loss, double take_profit)
{
   if(OrderSelect(order_info.Ticket())){
      m_magic=order_info.Magic();
      m_ticket=order_info.Ticket();
      m_type=order_info.OrderType();
      m_time_setup=order_info.TimeSetup();
      m_volume_initial=order_info.VolumeInitial();
      m_price=order_info.PriceOpen();
      m_sl=stop_loss;
      m_tp=take_profit;
      return(true);
   }
   else return(false);
}

int   CTableOrders::Type() const
{
   return((ENUM_ORDER_TYPE)m_type);
}
 

Der Umfang dieses Artikels ist groß und *sehr* gut durchdacht.

Ich kann gar nicht in Worte fassen, wie sehr ich Ihre Bemühungen beim Aufbau dieses Rahmens schätze; Sie haben auch die Gründe für Ihren Ansatz auf einer verständlichen Ebene erklärt (zumindest für mich!). Dieser Artikel geht viel weiter als Konzepte, da stimme ich zu - das ist praktische, richtige und vor allem umsichtige Anwendung von Handels- und OO-Programmiertechniken!

Eine Bitte - können Ihre Kommentare in den englischen Dateien übersetzt werden? Und kann mir jemand Tools für die weitere Arbeit mit der russischen Sprache empfehlen? Die Kommentare in MetaEditor erscheinen nicht einmal in russischer Sprache, sondern als verstümmelte Zeichen mit Akzent, die sich nicht wesentlich von diesem Beispiel unterscheiden:

 // Èíèöèàëèçèóðóåì óêàçàòåëü ìîäåëüþ MACD

Ich benutze seit einiger Zeit Chrome+Google Translate, um die russische Website zu lesen, aber bei längeren Artikeln (vor allem bei diesem) kann ich nur eine begrenzte Länge des Dokuments übersetzt bekommen. Ich wollte diesen Artikel unbedingt in voller Länge lesen und musste einige Zeit warten, was zumindest für mich kaum erträglich war! Jeder Ratschlag, wie man fremdsprachenfreundlicher werden kann, wird mit Hochachtung angenommen!

Ein Meisterwerk, Herr Sokolov. Ich spreche Ihnen mein Kompliment und meine Dankbarkeit für Ihre Arbeit aus und freue mich darauf, meine Visionen für diesen großartigen Ansatz für Handelssysteme umzusetzen. Sie haben viele Konflikte gelöst, die ich hatte, als ich versuchte, ein System zu entwerfen, das meinen Anforderungen an das System, das ich letztendlich handeln möchte, gerecht werden könnte. Für die verbleibenden Probleme, die noch zu lösen sind, führt dieser Rahmen meine Bemühungen in die richtige Richtung.