Diskussion zum Artikel "Bibliothek für ein leichtes und schnelles Entwickeln vom Programmen für den MetaTrader (Teil XXIV): Handelsklassen - automatische Korrektur ungültiger Parametern" - Seite 3

 
hsyhsy863 :
Hallo, haben Sie das von mir erwähnte Problem gefunden?
Ich betrachte keine Ex-Dateien.
 

Hallo Artyom - bei der Arbeit näher mit diesem Code, bemerkte ich diese Besonderheit der"Verschiebung" Wert in EventsHandling() und OnDoEasyEvent() für die korrekte Behandlung von Handelsereignissen implementiert, wenn im Tester ausgeführt... Ich verstehe, wie Sie in dem Artikel darauf hinweisen, dass im Live-Betrieb Handelsereignisse einzeln von OnChartEvent() geliefert werden, da sie von der Engine ausgelöst werden, während sie im Testmodus gruppiert und als Liste geliefert werden...

Meine Frage ist: Wäre es nicht besser, einen dedizierten Funktionsparameter im Event-Handler zu implementieren, anstatt'lparam' zu opfern, das nützliche Informationen für den Event-Handler enthalten kann? Ich denke auch, dass es den Code einfacher / lesbarer macht; stimmen Sie zu?

PS: Wie auch immer, ich finde diese Bibliothek sehr mächtig, aber auch komplex und schwer zu durchschauen, aber wenn man sie einmal beherrscht, sollte es möglich sein, alle Arten von EA-gestützten Strategien sehr schnell zu entwickeln... Neben der enormen Lernkurve fällt mir auch auf, dass die Backtesting-Performance eher langsam ist. Ich hoffe, Sie können diesen Punkt angehen, sobald Sie den Funktionsumfang von DoEasy vervollständigt haben, der Ihnen vorschwebt.

void EventsHandling(void)
  {
//--- Wenn ein Handelsereignis vorhanden ist
   if(engine.IsTradeEvent())
     {
      //--- Anzahl der gleichzeitig aufgetretenen Handelsereignisse
      int total = engine.GetTradeEventsTotal();
      for (int i = 0; i < total; i++)
        {
         //--- Abrufen des nächsten Ereignisses aus der Liste der gleichzeitig aufgetretenen Ereignisse nach Index
         CEventBaseObj *event = engine.GetTradeEventByIndex(i);
         if(event == NULL)
            continue;
         int   shift  = i;
         long   lparam = event.LParam();
         double dparam = event.DParam();
         string sparam = event.SParam();
         OnDoEasyEvent(CHARTEVENT_CUSTOM+event.ID(), lparam, dparam, sparam, shift);
        }
     }
   //...
   //...
  }

void OnDoEasyEvent(const int id, const long &lparam, const double &dparam, const string &sparam, int shift=0)
  {
   //...
   //...
//--- Behandlung von Handelsereignissen
   if(idx > TRADE_EVENT_NO_EVENT && idx < TRADE_EVENTS_NEXT_CODE)
     {
      //--- Abrufen der Liste der Handelsereignisse
      CArrayObj *list = engine.GetListAllOrdersEvents();
      if(list == NULL) return;

      //--- get the event index shift relative to the end of the list
      //--- in the tester, the shift is passed by the lparam parameter to the event handler
      //--- outside the tester, events are sent one by one and handled in OnChartEvent()
      int shift=(testing ? (int)lparam : 0);
      
      CEvent *event=list.At(list.Total()-1-shift);
      if(event==NULL) return;
   //...
   //...
  }


 
Dima Diall :

Hallo Artyom - bei der Arbeit näher mit diesem Code, bemerkte ich diese Besonderheit der ' shift ' Wert in EventsHandling() und OnDoEasyEvent() für die korrekte Behandlung von Handelsereignissen implementiert, wenn im Tester ausgeführt... Ich verstehe, wie Sie in dem Artikel darauf hinweisen, dass im Live-Betrieb Handelsereignisse einzeln von OnChartEvent() geliefert werden, da sie von der Engine ausgelöst werden, während sie im Testmodus gruppiert und als Liste geliefert werden...

Meine Frage ist: Wäre es nicht besser, einen eigenen Funktionsparameter in den Event-Handler zu implementieren, anstatt ' lparam ' zu opfern, das nützliche Informationen für den Event-Handler enthalten kann? Ich denke auch, dass es den Code einfacher / lesbarer macht; stimmen Sie zu?

PS: Wie auch immer, ich finde diese Bibliothek sehr mächtig, aber auch komplex und schwer zu durchschauen, aber wenn man sie einmal beherrscht, sollte es möglich sein, alle Arten von EA-gestützten Strategien sehr schnell zu entwickeln... Neben der enormen Lernkurve fällt mir auch auf, dass die Backtesting-Performance eher langsam ist. Ich hoffe, Sie können diesen Punkt angehen, sobald Sie den Funktionsumfang von DoEasy vervollständigt haben, der Ihnen vorschwebt.


Nein. Ich habe nicht vor, hier irgendetwas neu zu machen, und werde es wahrscheinlich auch nicht tun. Alle erforderlichen Daten werden bereits an Ereignisobjekte geliefert, und der Rest der Daten wird bereits von den Objekten übernommen, deren Ereignis registriert wurde.

 
Artyom Trishkin:

Nein. Hier hatte ich nicht vor, irgendetwas neu zu machen, und werde es höchstwahrscheinlich auch nicht tun. Alle erforderlichen Daten werden bereits an Ereignisobjekte geliefert, und der Rest der Daten wird bereits von den Objekten übernommen, deren Ereignis registriert wurde.

OK, na gut... Ich stimme zu, dass alle erforderlichen Daten in den Ereignisobjekten enthalten sind.

 
Könnten Sie mir bitte ein Code-Beispiel geben, um das Auftrags-/Positions-Ticket und andere Eigenschaften zu ziehen, nachdem Sie das letzte Handelsereignis erhalten haben?
 
leonerd:
Könnten Sie bitte einen Beispielcode zur Verfügung stellen, damit Sie, wenn Sie das letzte Handelsereignis erhalten, das Auftrags-/Positionsticket und andere Eigenschaften abrufen können?
Nicht vor einer Woche - nicht vor Ort.