Andrey Khatimlianskii: Analysieren Sie zumindest den Preis. Vielleicht brauchen Sie gar nicht einzusteigen.
Ja, es gibt einen solchen Mechanismus. Und wo sollte er eingebaut werden, wenn nicht in der Klasse der Handelsaufträge? Und wie lässt sich ein solcher Mechanismus formalisieren, welche starke Bewegung sollte als kritisch angesehen werden?
Гога: Ja, es gibt einen solchen Mechanismus. Und wo sollte er eingebaut werden, wenn nicht in der Klasse der Handelsaufträge? Und wie lässt sich ein solcher Mechanismus formalisieren, welche scharfe Bewegung sollte als kritisch angesehen werden?
Nun, das ist die Frage! Deshalb ist er auch nicht in die Engine eingebaut.
Bei einer Strategie spielt ein Ausrutscher von 20 Pips keine Rolle, und man sollte trotzdem einsteigen, während bei einer anderen Strategie ein Ausrutscher von 2 Pips alle Statistiken sprengt, und man sollte nicht schlechter einsteigen.
Und was sollte eine universelle Handelsmaschine für diese beiden Strategien tun? Richtig, den Kurs zurückgeben und die Handelslogik eine Entscheidung treffen lassen.
Nun, oder eine Anpassung hinzufügen. Genauer gesagt, Einstellungen für alle Fälle des Lebens )
Auf Build 1241 wird der Code gut kompiliert, also habe ich versucht, einen Backtest durchzuführen. Es nimmt keine Trades.
Nachdem ich ein wenig gegraben habe, fand ich heraus, dass es am Füllmodus liegt. Der bei dem von mir verwendeten Broker/Symbol zulässige Modus ist ORDER_FILLING_IOC. Ihre TradeCustom-Klasse setzt den Füllmodus standardmäßig auf ORDER_FILLING_FOK. Ich weiß nicht, wie ich diesen Füllmodus ändern kann, damit der Agent.mq5 EA den Handel aufnehmen kann. Ich könnte suchen, aber es wird mich eine Menge Zeit kosten.
Das ist das Problem mit solchen Tools, sehr ähnlich wie MQL5 Wizard EA von Metaquotes, es ist fast unbrauchbar für jeden, der nicht alle Details der Klassen kennt. Sobald man auf ein Problem stößt, das nicht vom Autor bereitgestellt wurde, wird es zu einer echten Qual, es zu beheben oder zu ändern/hinzuzufügen. Ich sehe keinen wirklichen Unterschied zwischen Ihrer Lösung und der von Metaquotes (Assistent).
Wie auch immer, ich gratuliere Ihnen zu dieser enormen Arbeit. Es ist eine großartige Programmierarbeit.
Es gibt einige Klassen im MetaEditor5-Include-Ordner. Wenn uns jemand eine ausführliche Erklärung der Klassen des Expertenordners geben könnte, wäre das sehr hilfreich, da sie sehr kompliziert aussehen. Die Leute möchten Standard-EAs schreiben, die auf formalen Basisklassen basieren und nicht immer neue Räder erstellen.... Wie auch immer, dieser Artikel hilft eine Menge für nicht neu zu erstellen Räder.
Amy Liu: Es gibt einige Klassen im MetaEditor5 Include-Ordner. Wenn jemand uns eine ausführliche Erklärung der Klassen des Expertenordners geben kann, wäre das sehr hilfreich, da sie sehr kompliziert aussehen. Die Leute mögen es, Standard-EAs zu schreiben, die auf formalen Basisklassen basieren, und nicht immer neue Räder zu erstellen.... Wie auch immer, dieser Artikel hilft sehr dabei, Räder nicht neu zu erstellen.
Ich stimme zu. Das Problem ist, wenn es einen Fehler im Framework gibt. Bevor man ein Framework verwendet, sollte man sich entweder tief in die Materie einarbeiten oder sich vergewissern, dass es vom Autor gut unterstützt wird.
Alain Verleyen: Ich stimme zu. Das Problem ist, wenn es einen Fehler im Framework gibt. Bevor wir ein Framework verwenden, sollten wir entweder entscheiden, es tief zu lernen oder sicher sein, dass es vom Autor gut unterstützt wird.
Das ist der Grund, warum ich Klassen in MetaEditor5 lernen möchte, sie sind von der "Regierung" ;)
///////////MESSAGE in THE METAEDITOR compiler/////////////// expression not boolean NewBarDetector.mqh 87 24
sollte das richtig sein? bitte bestätigen Sie dies
//+------------------------------------------------------------------+//| Gibt true zurück, wenn für das angegebene Symbol und den Zeitrahmen |//| ein neuer Balken.|//+------------------------------------------------------------------+bool CBarDetector::IsNewBar(void)
{
datetime time[];
if(CopyTime(m_symbol, m_timeframe, 0, 1, time) < 1)return (false);
if(time[0] == m_last_time)return (false);
return (m_last_time == time[0]);
}
//+------------------------------------------------------------------+
bitte entschuldige, dass ich eine Frage zu deinem Artikel so weit unten stelle, nachdem du ihn geschrieben hast. Ich gehe die Artikel erst jetzt richtig durch auf der Suche nach Alternativen zu einem Framework. Etwas ist mir seltsam vorgekommen, was sehr wahrscheinlich auf mein Missverständnis zurückzuführen ist.
In Bezug auf die Ereignis-Handler für "New Tick" und "New Bar". Du durchläufst die Liste der hinzugefügten Ticks, baust dann die Ereignisstruktur auf und übergibst sie an Init- und Support-Ereignishandler, z.B. neues Tick-Ereignis unten:
In einem Ihrer Beispiele, z.B. gleitender Durchschnittsclip unten;
bool CMovingAverage::IsTrackEvents(const MarketEvent &event)
{
//--- Wir behandeln nur die Eröffnung eines neuen Balkens auf dem Arbeitssymbol und Zeitrahmenif(event.type != MARKET_EVENT_BAR_OPEN)returnfalse;
if(event.period != Timeframe())returnfalse;
if(event.symbol != ExpertSymbol())returnfalse;
returntrue;
}
Diese IsTrackEvents-Funktion scheint den Zweck der obigen NewTickDetect-Funktion zunichte zu machen! Das obige Beispiel des gleitenden Durchschnitts sollte also in der Lage sein, mit mehreren Instrumenten zu handeln, da es mehrere Symbole wie in NewTickDetect überprüfen kann, aber IsTrackEvents erlaubt den Handel nur für den Zeitrahmen der Strategie und das Symbol (das Symbol ist hier der Schlüssel). Bedeutet dies nicht, dass die NewTickDetect-Schleife nicht wirklich erforderlich ist, da die Strategie nur auf ihrem Symbol handeln kann? Tatsächlich sollte die NewTickDetect-Schleife nur prüfen, ob der empfangene Tick dem Symbol der Strategie entspricht - ohne Schleife. Was in der Tat ist ähnlich wie mit einem Strategie-Objekt für jedes Symbol von Interesse, die die CStragyList Schleifen über?
Ich hoffe sehr, dass ich mich verständlich ausdrücke, und hoffe, dass Sie mir das erklären können.
Ich liebe Ihre Arbeit. Ich habe viel aus Ihren Artikeln gelernt, also vielen Dank.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Erlauben Sie die Verwendung von Cookies, um sich auf der Website MQL5.com anzumelden.
Bitte aktivieren Sie die notwendige Einstellung in Ihrem Browser, da Sie sich sonst nicht einloggen können.
Sie sind angemeldet. Die Zwei-Faktor-Authentifizierung wurde deaktiviert. Richten Sie sie erneut ein und scannen Sie einen neuen QR-Code oder fahren Sie mit deaktivierter Zwei-Faktor-Authentifizierung fort.
Analysieren Sie zumindest den Preis. Vielleicht brauchen Sie gar nicht einzusteigen.
Ja, es gibt einen solchen Mechanismus. Und wo sollte er eingebaut werden, wenn nicht in der Klasse der Handelsaufträge? Und wie lässt sich ein solcher Mechanismus formalisieren, welche scharfe Bewegung sollte als kritisch angesehen werden?
Nun, das ist die Frage! Deshalb ist er auch nicht in die Engine eingebaut.
Bei einer Strategie spielt ein Ausrutscher von 20 Pips keine Rolle, und man sollte trotzdem einsteigen, während bei einer anderen Strategie ein Ausrutscher von 2 Pips alle Statistiken sprengt, und man sollte nicht schlechter einsteigen.
Und was sollte eine universelle Handelsmaschine für diese beiden Strategien tun? Richtig, den Kurs zurückgeben und die Handelslogik eine Entscheidung treffen lassen.
Nun, oder eine Anpassung hinzufügen. Genauer gesagt, Einstellungen für alle Fälle des Lebens )
Auf Build 1241 wird der Code gut kompiliert, also habe ich versucht, einen Backtest durchzuführen. Es nimmt keine Trades.
Nachdem ich ein wenig gegraben habe, fand ich heraus, dass es am Füllmodus liegt. Der bei dem von mir verwendeten Broker/Symbol zulässige Modus ist ORDER_FILLING_IOC. Ihre TradeCustom-Klasse setzt den Füllmodus standardmäßig auf ORDER_FILLING_FOK. Ich weiß nicht, wie ich diesen Füllmodus ändern kann, damit der Agent.mq5 EA den Handel aufnehmen kann. Ich könnte suchen, aber es wird mich eine Menge Zeit kosten.
Das ist das Problem mit solchen Tools, sehr ähnlich wie MQL5 Wizard EA von Metaquotes, es ist fast unbrauchbar für jeden, der nicht alle Details der Klassen kennt. Sobald man auf ein Problem stößt, das nicht vom Autor bereitgestellt wurde, wird es zu einer echten Qual, es zu beheben oder zu ändern/hinzuzufügen. Ich sehe keinen wirklichen Unterschied zwischen Ihrer Lösung und der von Metaquotes (Assistent).
Wie auch immer, ich gratuliere Ihnen zu dieser enormen Arbeit. Es ist eine großartige Programmierarbeit.
Es gibt einige Klassen im MetaEditor5 Include-Ordner. Wenn jemand uns eine ausführliche Erklärung der Klassen des Expertenordners geben kann, wäre das sehr hilfreich, da sie sehr kompliziert aussehen. Die Leute mögen es, Standard-EAs zu schreiben, die auf formalen Basisklassen basieren, und nicht immer neue Räder zu erstellen.... Wie auch immer, dieser Artikel hilft sehr dabei, Räder nicht neu zu erstellen.
Ich stimme zu. Das Problem ist, wenn es einen Fehler im Framework gibt. Bevor wir ein Framework verwenden, sollten wir entweder entscheiden, es tief zu lernen oder sicher sein, dass es vom Autor gut unterstützt wird.
Das ist der Grund, warum ich Klassen in MetaEditor5 lernen möchte, sie sind von der "Regierung" ;)
Herr Vasily,
sehr schöner Code... und nützlich für mich...
in den mt5-News-Builds (1952) haben wir eine "Nachricht" im Compiler,
//+------------------------------------------------------------------+
expression not boolean NewBarDetector.mqh 87 24
sollte das richtig sein? bitte bestätigen Sie dies
Hallo Vasiliy,
bitte entschuldige, dass ich eine Frage zu deinem Artikel so weit unten stelle, nachdem du ihn geschrieben hast. Ich gehe die Artikel erst jetzt richtig durch auf der Suche nach Alternativen zu einem Framework. Etwas ist mir seltsam vorgekommen, was sehr wahrscheinlich auf mein Missverständnis zurückzuführen ist.
In Bezug auf die Ereignis-Handler für "New Tick" und "New Bar". Du durchläufst die Liste der hinzugefügten Ticks, baust dann die Ereignisstruktur auf und übergibst sie an Init- und Support-Ereignishandler, z.B. neues Tick-Ereignis unten:
In einem Ihrer Beispiele, z.B. gleitender Durchschnittsclip unten;
Diese IsTrackEvents-Funktion scheint den Zweck der obigen NewTickDetect-Funktion zunichte zu machen! Das obige Beispiel des gleitenden Durchschnitts sollte also in der Lage sein, mit mehreren Instrumenten zu handeln, da es mehrere Symbole wie in NewTickDetect überprüfen kann, aber IsTrackEvents erlaubt den Handel nur für den Zeitrahmen der Strategie und das Symbol (das Symbol ist hier der Schlüssel). Bedeutet dies nicht, dass die NewTickDetect-Schleife nicht wirklich erforderlich ist, da die Strategie nur auf ihrem Symbol handeln kann? Tatsächlich sollte die NewTickDetect-Schleife nur prüfen, ob der empfangene Tick dem Symbol der Strategie entspricht - ohne Schleife. Was in der Tat ist ähnlich wie mit einem Strategie-Objekt für jedes Symbol von Interesse, die die CStragyList Schleifen über?
Ich hoffe sehr, dass ich mich verständlich ausdrücke, und hoffe, dass Sie mir das erklären können.
Ich liebe Ihre Arbeit. Ich habe viel aus Ihren Artikeln gelernt, also vielen Dank.
Mit freundlichen Grüßen,
Shep