English Русский 中文 Español 日本語 Português
preview
Indikatoren mit interaktiven Steuerelementen auf dem Chart

Indikatoren mit interaktiven Steuerelementen auf dem Chart

MetaTrader 5Indikatoren | 7 Juli 2022, 16:15
331 0
Aleksandr Kononov
Aleksandr Kononov

Einführung

Ich handle seit 2008 und habe mir dabei eine ansehnliche Menge an Wissen angeeignet. Jetzt nutze ich dieses Wissen, um meine Produkte zu entwickeln. Nachdem ich im Laufe der Jahre Dutzende verschiedener Handelsstrategien ausprobiert und Hunderte verschiedener Indikatoren getestet habe, bin ich zu einigen Schlussfolgerungen gekommen, die ich Ihnen in diesem Artikel mitteilen möchte. Nach wie vor steht die Qualität der MetaTrader-Handelsplattformen außer Zweifel. Aber unter modernen Bedingungen werden die Nutzer immer anspruchsvoller in Bezug auf die ihnen zur Verfügung gestellten Produkte. Also dachte ich, dass es schön wäre, ein Prinzip zu schaffen, das einfach auf jeden Indikator angewendet werden kann. Dieses Prinzip zielt auf mehr Interaktion zwischen einem Nutzer und einem Programm ab. 


Über Indikatoren

MetaTrader-Plattformen bieten verschiedene Arten von Handelsprogrammen an. Dies sind Expert Advisors (EAs), Skripte und Indikatoren. Ich werde über Indikatoren sprechen.

Es gibt verschiedene Arten von Indikatoren: Unterstützungs-/Widerstandslinien, Kerzen-Fraktale oder -Muster, Volumina oder andere Daten zu Handelsvorgängen an der Börse, Oszillatoren oder Histogramme. Wir brauchen sie alle, um ein bestimmtes Preisbewegungsmuster aufzuzeigen, das wiederum ein Handelssignal bildet. Je öfter das Muster auftritt, desto stärker ist das Signal. 

Ein Muster ist eine sich wiederholende oder sehr ähnliche Preisbewegung, die bei bestimmten Indikatorwerten auftritt. Wenn zum Beispiel der schnelle gleitende Durchschnitt den langsamen nach oben kreuzt, während der Preis ihn nach unten kreuzt, dann ist es wahrscheinlicher, dass der Preis von dieser Linie abprallt und weiter steigt. Solche Muster können bei der Verwendung eines beliebigen Indikators gefunden werden. 

Jeder Indikator zeigt unabhängig von seinem Zweck Muster für einen bestimmten Zeitraum. Dies bedeutet, dass ein Signal auf der Grundlage vergangener Preisbewegungen in einem Bereich historischer Daten gebildet wird. Es können 10 H1-Balken oder 1000 D1-Balken sein. Ein Zeitraum, in dem wir nach einem Muster suchen, wird als „period“, der Periodenlänge des Indikators bezeichnet.

Da alle Indikatoren anhand historischer Daten berechnet werden, hat jeder Indikator einen Berechnungszeitraum. Wenn wir den Periodenwert auf 100 setzen und den Indikator auf dem H1-Chart platzieren, erhalten wir das Ergebnis der Indikatorberechnung für die letzten 100 H1-Kerzen. Der Anzeigezeitraum bleibt unverändert, bis wir ihn selbst ändern. Wenn sich die Art der Preisbewegung ändert, die Bewegung beispielsweise volatiler wird, müssen wir den Zeitraum verlängern, damit der Indikator der aktuellen Marktsituation entspricht. 

Dazu müssen wir zu den Indikatoreinstellungen gehen und einen neuen Periodenwert auswählen. Der Parameter muss schrittweise geändert werden. Der Schritt sollte intuitiv gewählt werden — er sollte nicht zu groß sein, um das gewünschte Signal nicht zu verpassen, aber auch nicht zu klein — um nicht zu viel Zeit damit zu verbringen. Wenn Sie es oft während eines Tages tun, können Sie viel Zeit damit verbringen. Tatsächlich ist die Arbeit mit Indikatoren eine Art Kompromiss zwischen dem gewünschten Ergebnis, seiner Genauigkeit und der Zeit, die ein Trader zu investieren bereit ist.

Eine weitere Option ist das gleichzeitige Öffnen aller erforderlichen Diagramme mit unterschiedlichen Indikatoreinstellungen. In diesem Fall ist der gesamte Arbeitsbereich mit Fenstern vollgestopft, die gleichartige Indikatoren enthalten, die sich nur in den Periodeneinstellungen voneinander unterscheiden. Auch in Bezug auf die Arbeitsplatzgestaltung ist diese Lösung nicht perfekt. Leider sind beide Optionen alles andere als bequem.


Das Herzstück des Problems

Ich möchte das Problem anhand einer Handelsstrategie hervorheben, die ich seit langem in meinem Handel verwende. Ich denke, viele Händler stehen jeden Tag vor dem gleichen Problem. Jemand merkt es einfach nicht und nimmt es als selbstverständlich hin, während es für jemanden Unbehagen erzeugt, genau wie für mich. Die Strategie basiert auf den Angaben der Linien des gleitenden Durchschnitts. Es funktioniert gut in Trendbewegungen. Sein Wesen liegt in der Tatsache, dass ein begonnener Trend höchstwahrscheinlich fortgesetzt wird und das Handelssignal die Rückkehr des Preises auf die langsame Linie während der Korrektur ist. 

Um die langsame Linienperiode zu berechnen, müssen wir während der vorherigen Korrektur eine bestimmte Position der schnellen und langsamen gleitenden Durchschnitte finden. 

Bild_01

Um einen erforderlichen Zeitraum zu finden, müssen Sie eine Reihe von sich wiederholenden Vorgängen ausführen. Die Besonderheit dieser Strategie besteht darin, dass sich die Periodenlänge der Linien immer um das Doppelte unterscheiden sollten. Wenn zum Beispiel die Periodenlänge der schnellen Linie 20 ist, sollte die Periodenlänge der langsamen gleich 40 sein. In diesem Fall müssen Sie den Mindestwert für die Zeilenperioden finden, bei dem die schnelle Zeile die langsame während der Korrektur nicht kreuzt. Das Bild zeigt Indikatorlinien mit Periodenlängen von 25 bzw. 50. Wie wir sehen können, haben sich die Linien während der vorherigen Korrektur nicht gekreuzt. So können wir ihre Perioden weiter verkürzen. Öffnen Sie die Einstellungen der schnellen Linie und ändern Sie die Periodenlänge. Öffnen Sie dann die Einstellung der langsamen Linie und ändern Sie auch deren Periodenlänge. Wir müssen diesen Vorgang mehrmals durchführen, bis die Linien so nah wie möglich zusammenlaufen.

Bild_03

Die Linien kreuzen sich noch nicht. Aber wir müssen zuerst die Extremposition finden, an der sich die Linien schneiden, und dann ihre Periode um einen Schritt erhöhen. Also ändern wir die Periodeneinstellungen wieder auf 7 bzw. 14.

  

Bild_04

Jetzt kreuzen sie sich. Das bedeutet, dass eine extreme Position gefunden wurde und nun die Perioden um einen Schritt erhöht werden müssen. Öffnen Sie die Einstellungen für jede Zeile erneut und ändern Sie die Periodenwerte.

Bild_05

Als Ergebnis wurde die gewünschte Kombination von Leitungsparametern gefunden und das Signal erfolgreich generiert. Allerdings nahm die Vorbereitung der Suche eine gewisse Zeit in Anspruch und zwang mich zu eintönigen, ja mühsamen Handlungen. Vergessen Sie nicht, dass dies nur ein Zeitrahmen für ein einzelnes Währungspaar ist. Um mehrere Währungspaare in unterschiedlichen Zeiträumen zu verfolgen, müssen solche Aktionen sehr oft durchgeführt werden. Meine Erfahrung zeigt, dass der Prozess mindestens die Hälfte der Arbeitszeit in Anspruch nimmt, wenn Minuten-Zeitfenster verwendet werden. Diese Strategie ist wahrscheinlich sehr beliebt. Ich denke, viele Händler verwenden etwas Ähnliches in ihrem täglichen Handel.

Die Nachteile der Strategie liegen auf der Hand. Abgesehen davon, dass solche ständigen Manipulationen mit Indikatoreinstellungen viel Zeit in Anspruch nehmen, lenken sie auch von der Haupttätigkeit ab – dem Handel. Während Sie einen neuen Linienparameter auswählen, kann ein bereits gebildetes Signal für ein anderes Währungspaar oder einen anderen Zeitrahmen einfach unbemerkt bleiben. Darüber hinaus können Sie ein Geschäft möglicherweise nicht rechtzeitig mit maximalem Gewinn oder minimalem Verlust abschließen. Darüber hinaus beginnt jede Person nach mehreren Stunden solcher Arbeit müde zu werden. Monotone Aktionen lassen Trader auf der Hut sein und erhöhen das Risiko eines Fehlers, ganz zu schweigen von der aufgewendeten Zeit. Nach einigen Jahren der Arbeit am Computerbildschirm beginnen Sie, Ihre Zeit zu schätzen und die Bedeutung solcher scheinbar unbedeutenden Dinge zu verstehen.


Prinzip der Schnittstelle

Die Idee hinter der Schnittstelle besteht darin, die Periodenlänge des Indikators durch Scrollen mit dem Mausrad direkt auf dem Chart zu ändern, ohne in die Einstellungen zu gehen. Wir werden die Schaltfläche verwenden, um den Bildlaufmodus zu aktivieren.

Laden Sie den Quellcode des Button CCI-Indikators in der angehängten Datei herunter, um ihn auszuprobieren, oder laden Sie die neueste kostenlose Version von mit zusätzlichen Funktionen herunter und sehen Sie sich eine detaillierte Beschreibung der Einstellungen an indem Sie dem Link folgen.

Das Problem ist klar. Offensichtlich müssen wir das Bestimmen der Periodenlänge irgendwie beschleunigen. Es gibt nur einen Weg, dies zu tun — die Automatisierung des Prozesses. Es ist möglich, einen Algorithmus zu erstellen, der die Periodenwerte selbst auswählt. Aber der Algorithmus braucht trotzdem eine eigene Rechenzeit! Das bedeutet, dass wir die Anzahl der vom Algorithmus verwendeten Kerzen manuell festlegen müssen, um den Zeitraum des gleitenden Durchschnitts auszuwählen! Dies ist eine Art Meta-Periodenlänge. Dadurch wird das Problem mit der für die Auswahl der gewünschten Periodenlänge aufgewendeten Zeit gelöst, aber diese Lösung hat ihre Nachteile aufgrund ihrer Komplexität. Dieser Ansatz ist im kostenlosen Dynamic Double Moving Averages Indikator implementiert. In Zukunft plane ich, es zu verbessern, damit es einfacher zu verwalten ist und auf Änderungen der von einem Nutzer eingegebenen Einstellungen reagiert.

Eine andere Methode ist meiner Meinung nach einfacher und gleichzeitig interaktiver. Es beinhaltet die Änderung der Periodenlänge durch einen Händler, wenn auch in einer bequemeren Form. Unabhängig davon, wie intelligent der Algorithmus ist, wissen Händler immer noch besser, welche Indikatoreinstellungen sie benötigen, und unsere Aufgabe ist es, ihnen zu helfen und den Prozess zu erleichtern. Um die Periodenlänge zu ändern, verwenden wir das Scrollen mit dem Mausrad. Der Scrollmodus selbst wird durch Einschalten der Schaltfläche rechts auf der Karte aktiviert.


GIF_01

Das Bild zeigt, wie einfach es ist, die Periodenlänge des Indikators mit einer einzigen Bewegung zu ändern. Aktivieren Sie einfach die Schaltfläche des erforderlichen Indikators und drehen Sie das Mausrad in die gewünschte Richtung. Sie können auch eine notwendige Schrittweite der Änderung der Periodenlängen einstellen. Sie können auch die Periodenlänge mehrerer Indikatoren auf einmal ändern, indem Sie einfach die erforderlichen Schaltflächen aktivieren. Diese Funktionen eignen sich hervorragend für die oben beschriebene Strategie. Sie können beispielsweise den Schritt zum Ändern der schnellen Linie auf 1 und der langsamen Linie auf 2 einstellen, das Scrollen für beide Linien aktivieren und ihre Periodenlängen gleichzeitig ändern, wobei das Verhältnis 1/2 beibehalten wird.


Vorteile

    Indikatoren mit dieser Schnittstelle haben eine Reihe von Vorteilen.
    • Erstens können Händler die Periodenlänge des Indikators wie gewohnt anpassen, obwohl sie viel weniger Zeit und Mühe aufwenden müssen.
    • Zweitens ist eine solche Schnittstelle intuitiv und einfach zu bedienen. Nach längerer Verwendung eines solchen Indikators möchten Sie nicht mehr zur Standardoberfläche zurückkehren.
    • Darüber hinaus ermöglicht Ihnen die Verwendung eines solchen Indikators, nur ein Fenster zu verwenden, das mehrere Indikatoren des gleichen Typs durch einen ersetzt. Dadurch wird der Arbeitsbildschirm von Unordnung befreit.
    • Ein weiterer Vorteil ist die Verbesserung der Handelsqualität aufgrund der erhöhten Konzentration auf den Prozess selbst und nicht auf die Indikatoreinstellungen.
    • Die Suche nach Signalen in einem sich schnell verändernden Markt wird ebenfalls beschleunigt, was zur Steigerung der Produktivität des Händlers beiträgt.

    Nachteile

    Bei all diesen Vorteilen hat eine solche Schnittstelle ihre Nachteile.

    • Erstens ist es aufgrund technischer Einschränkungen der MQL4-Sprache schwierig, es für MetaTrader 4 zu reproduzieren.
    • Zweitens verlangsamen sich die Indikatoren bei Berechnungen mit einer großen Datenmenge (mehr als 20.000 Balken) merklich.

    Aber die historische Analyse wird nicht so oft benötigt, und Sie können die Datenmenge für die Berechnung für den täglichen Gebrauch begrenzen.  Diese Mängel sind nicht kritisch und beeinträchtigen die tägliche Verwendung solcher Indikatoren in MetaTrader 5 nicht.


    Erstellen eines Indikators mit einem scrollenden Zeitraum basierend auf dem gleitenden Durchschnitt

    Auf der Grundlage des oben Gesagten entschied ich, dass es nützlich wäre, einen Indikator mit der bequemsten Schnittstelle zu erstellen, der Nutzer vor Routineaktionen bewahrt. Außerdem war das Ziel, das einfachste Prinzip für die meisten Indikatoren zu schaffen, so dass eine ähnliche Schnittstelle leicht auf jedem anderen Indikator reproduziert werden kann.

    Ich habe mich entschieden, den beliebtesten Indikator – den gleitenden Durchschnitt – als Beispiel zu nehmen. Die Komplexität der Idee liegt in der Tatsache, dass wir, wenn wir den Zeitraum dynamisch ändern wollen, Dutzende oder sogar Hunderte von Indikatoren gleichzeitig verwenden müssen. Da das System die in einem Fenster verwendeten Indikatoren durch einen Kurznamen und einen Satz von Parametern unterscheidet, unterscheidet sich der Parametersatz bei jedem Änderungsschritt immer im Parameter „period“, und für jede Periodenlänge wird ein neuer Indikator-Handle erstellt, der kann die Arbeit erheblich verlangsamen. Bei der Suche nach einer Lösung bin ich in den Foren auf Kritik an dieser Methode gestoßen. Erfahrene Programmierer sagten, dass eine solche Implementierung auf Sprachebene verboten und im Allgemeinen unmöglich ist, da ein Speicherüberlauf unvermeidlich ist (was mir in MetaTrader 4 ständig begegnet ist). Tatsächlich ist das Problem für MetaTrader 4 unlösbar.

    In MQL5 wird jedoch für jeden Indikator auf dem Chart einmal ein Handle erstellt und dann bei Bedarf darauf zugegriffen. Mit anderen Worten, selbst wenn wir bei jedem Tick ein neues Handle erstellen, wird es nicht neu erstellt, sondern wir greifen auf das bereits erstellte zurück. Das erleichtert schon den Speicherbedarf. Es ist jedoch möglich, alle erforderlichen Handles in OnInit im Voraus zu erstellen, sodass wir dieses Problem vollständig vergessen können. Die einzige Einschränkung besteht darin, dass wir vordefinieren müssen, innerhalb welcher Grenzen sich der Zeitraum ändert, um alle erforderlichen Handles bei der Initialisierung des Indikators zu erstellen. Der maximale Zeitraum wird vom Händler vorab in den Einstellungen über den Parameter period_ma_max begrenzt. Mit dem Schritt sparen wir noch mehr Speicher, indem wir die Berechnung unnötiger Handles vermeiden. Der Schritt wird ebenfalls vom Händler festgelegt. Der Standardwert ist 1.

    int OnInit()
    {
    //Create all necessary handles
    for(int i=1; i<=period_ma_max; i+=step)
        handle=iMA(_Symbol,_Period,i,0,method_MA,price_MA);
         
    }
    

    Jetzt müssen wir die Funktionalität zum Implementieren des Scrollens von Periodenlängen erstellen. Lassen Sie uns dazu eine On-Chart-Schaltfläche erstellen, die den Scrollmodus für die Periodenlänge mit dem Mausrad aktiviert.

    //+------------------------------------------------------------------+
    //|              CREATING BUTTON IN OnInit()                          
    //+------------------------------------------------------------------+
     
       ObjectDelete(0,name);
       ObjectCreate(0,name,OBJ_BUTTON,0,0,0);
       ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
       ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr_Text_Button);
       ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,clr_Button);
       ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,CORNER_RIGHT_UPPER);
       ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,distance_X);
       ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,distance_Y);
       ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,size_X);
       ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,size_Y);
       ObjectSetInteger(chart_ID,name,OBJPROP_STATE,true);
       ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,true);
       ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,true);
       ObjectSetInteger(chart_ID,name,OBJPROP_STATE,press_Button);
       ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,1);
    
       ChartRedraw();
    

    Wenn Sie zwei oder mehr Indikatoren in einen Chart laden, werden ihre Schaltflächen an derselben Stelle erstellt, was unpraktisch ist. Daher müssen wir beim Hinzufügen jedes nachfolgenden Indikators die Schaltfläche entlang einer Achse verschieben. Dazu müssen Sie zunächst genau berechnen, wie viele unserer Indikatoren bereits in den Chart hochgeladen wurden. Lassen Sie uns zuerst die Gesamtzahl der Indikatoren im Fenster ermitteln:

    int      total_Indicators=ChartIndicatorsTotal(0,0),
             this_indicators=0;
    

    Als Nächstes wählen wir unsere Indikatoren aus:

    for(int i=0; i<total_Indicators; i++)
         {
          if(ChartIndicatorName(0,0,i)=="Button_MA")
             this_indicators++;
         }
    IndicatorSetString(INDICATOR_SHORTNAME,"Button_MA")
    

    Wenn wir auf diese Weise nach einem Indikator nach einem kurzen Namen suchen, sollten wir immer daran denken, dass, wenn wir nach der Schleife einen kurzen Indikatornamen erstellen, der Name des aktuellen Indikators, den wir dem Diagramm hinzufügen, seinem Dateinamen entspricht. Wenn sich der Dateiname in diesem Fall von INDICATOR_SHORTNAME unterscheidet, wird der aktuelle Indikator in der Schleife nicht berechnet.

    Bewegen Sie nun die Schaltfläche um die X-Achse:

    distance_X=size_X*this_indicators;

    Danach erscheinen die Schaltflächen aller zum Chart hinzugefügten Indikatoren in einer Reihe. Leider muss ein Nutzer die Schaltfläche umbenennen, wenn er mehr als einen Indikator zu einem Diagramm hinzufügt, oder zumindest andere Indikatoreingaben in den Einstellungen ändern. Dies geschieht, weil es verboten ist, Indikatoren mit denselben Eingaben zu einem Fenster in MetaTrader 5 hinzuzufügen. Daran kann nichts geändert werden, also müssen wir die manuelle Änderung der Einstellungen auf den Händler verlagern. Da eine Änderung der Einstellungen nicht immer erforderlich ist, verschieben wir den Schaltflächennamen in die Anzeigeeinstellungen. Auf diese Weise schlagen wir zwei Fliegen mit einer Klappe: Wir ändern die Indikatoreingaben und geben Objekten auf demselben Chart unterschiedliche Namen. Darüber hinaus sind Schaltflächen mit unterschiedlichen Namen informativer und bequemer. 

    input string  name_Line = "MA_1"; 
    string   name = name_Line,
             text = name_Line;
    

    Wenn ein Nutzer jetzt jede Schaltfläche umbenennt, werden Anzeigen und Schaltflächen selbst leicht zum Fenster hinzugefügt, und der auf den Schaltflächen angezeigte Text entspricht ihren Namen. Damit sind die Tasten fertig. Jetzt müssen wir einen Mechanismus zum Scrollen der Periodenlängen erstellen. Aktivieren Sie die Scrollrad- und Maustastenklick-Ereignisse.

    ChartSetInteger(0,CHART_EVENT_MOUSE_WHEEL,1);
    ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,1);
    
    

    Als Nächstes arbeiten wir in der Funktion OnChartEvent(). Es wird überprüft, ob die Taste gedrückt ist. Wenn nicht, wird seinen Namen darauf angezeigt. Wenn die Taste gedrückt wird, wird der Modus zum Scrollen der Indikatorperiodenlänge aktiviert und das Scrollen des Charts deaktiviert. Wenn die Taste nicht gedrückt wird, wird dementsprechend bleit das Scrollen des Charts aktiviert.


    void OnChartEvent(const int id,
                      const long &lparam,
                      const double &dparam,
                      const string &sparam)
      {
    //---
       if(!press_Button)
          ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
       if(id==CHARTEVENT_OBJECT_CLICK)
         {
          if(sparam==name)
            {
             press_Button=ObjectGetInteger(chart_ID,name,OBJPROP_STATE);
             if(press_Button)
               {
                scroll_Button=true;
                ChartSetInteger(0,CHART_MOUSE_SCROLL,0);
                ChartRedraw();
               }
             else
               {
                scroll_Button=false;
                ChartSetInteger(0,CHART_MOUSE_SCROLL,1);
                ChartRedraw();
               }
            }
         }
      }
    

    Wenn der Scrollmodus der Periodenlänge aktiviert ist, wird der Status des Mausrads überprüft. Je nach Scrollrichtung wird die Periodenlänge erhöht oder vermindert. Der Gesamtradscrollwert (total) wird ausgelöst, wenn er +120 oder -120 erreicht.

    if(scroll_Button)
          if(id==CHARTEVENT_MOUSE_WHEEL)
            {
             int delta = (int)dparam;
             if(delta>119)
                if(period_ma<period_ma_max)
                  {
                   period_ma+=step;
                   ChartRedraw();
                  }
             //
             if(delta < -119)
                if(period_ma>step)
                  {
                   period_ma-=step;
                   ChartRedraw();
                  }
    

    Hier greifen wir auf den Indikator-Handle mit einem neuen Periodenlänge zu und zeichnen die Indikatorlinie neu ('total' ist in OnCalculate definiert). Es wird auch der Schaltflächentext vom Namen in die aktuellen Periodenlänge geändert.

    handle = iMA(_Symbol,_Period,period_ma,0,method_MA,price_MA);
          
             ArraySetAsSeries(Label1Buffer,true);
             for(int i = 0; i<total; i++)
               {
                double MA[];
                CopyBuffer(handle,0,i,1,MA);
                Label1Buffer[i]=MA[0];
           
                ChartRedraw();
    
               }
             ArraySetAsSeries(Label1Buffer,false);
             if(press_Button)
                ObjectSetString(chart_ID,name,OBJPROP_TEXT,IntegerToString(period_ma));
            }
    

    Hier zeichnen wir die Linie neu, damit wir nicht auf einen neuen Tick warten müssen, um die Indikatorlinie mit einem neuen Periodenlänge anzuzeigen. Somit wird die Linie unabhängig von der Ankunft neuer Ticks immer sofort wieder neu gezeichnet.

    Eine weitere Einschränkung, die nicht umgangen werden kann, betrifft die Schaltfläche. Wenn der Drag-and-Drop-Modus aktiviert ist, ist der Tastendruckmodus deaktiviert und umgekehrt. Daher können wir die Schaltfläche nur einmal an eine günstigere Stelle ziehen. Nachdem wir den Drag & Drop-Modus deaktiviert haben, werden wir ihn nicht mehr aktivieren. Bei der nächsten Initialisierung merkt sich die Schaltfläche ihre Position nicht und kehrt an ihren ursprünglichen Platz in der allgemeinen Reihe zurück.

    if(id==CHARTEVENT_OBJECT_CLICK)
         {
          if(sparam==name)
            {
             long select = ObjectGetInteger(chart_ID,name,OBJPROP_SELECTED);
             if(select==0)
               {
                ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,false);
                ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,false);
                flag_drag=false;
               }
             ChartRedraw();
             }
          }
    

    Die Linie des Hauptindikators wird in OnCalculate() erstellt, wie gewöhnlich

    total=rates_total-1;
       if(Limit_for_Calc)
          if(total>Limit)
             total=Limit;
       handle = iMA(_Symbol,_Period,period_ma,0,method_MA,price_MA);
       if(handle==INVALID_HANDLE)
         {
          Print("invalid handle ");
          return(rates_total);
         }
       ResetLastError();
       while(BarsCalculated(handle)<=0)
         {
          // indicator values are not calculated yet, try next time
          return(0);
         }
    
       for(int i = prev_calculated>0?prev_calculated-1:0; i<rates_total; i++)
         {
          double MA[];
          CopyBuffer(handle,0,time[i],1,MA);
          Label1Buffer[i]=MA[0]+level;
         }
    
    Hier können wir die Berechnung der Linie beim Scrollen nur auf die neusten Daten beschränken, um Rechenressourcen zu sparen. Wir überlassen es dem Händler, auszuwählen, ob er das Berechnungslimit in den Einstellungen aktivieren möchte und wie viele Balken für die Berechnungen herangezogen werden sollen.
    input bool    Limit_for_Calc = false;
    input int     Limit = 20000;
    


    Ergebnis

    Wir haben die Hauptpunkte der Indikatorentwicklung analysiert. Das Ergebnis ist ein vollwertiger Indikator, der dem Standard in nichts nachsteht und dabei komfortabler ist. Es hat jedoch noch einige Nachteile. Zum Beispiel erlebte ich eine Verlangsamung durch eine Historie von mehr als 20.000 Balken. Aber die historische Analyse wird nicht so oft benötigt, und wir können die Anzahl der Balken für die Berechnung für den täglichen Gebrauch begrenzen. Das manuelle Umbenennen der Schaltflächen und die Unmöglichkeit, eine Schaltfläche mehr als einmal zu ziehen, sind ebenfalls ziemlich unpraktisch.

    Im Allgemeinen wurden die Ziele erreicht – der Indikator ändert reibungslos die Periodenlänge beim Scrollen des Mausrads, während die Scrollfunktion durch Drücken von nur einer Taste direkt auf dem Chart ein- und ausgeschaltet wird.


    Schlussfolgerung

    Eine solche Schnittstelle, obwohl nicht ohne Mängel, kann dennoch als bequemer bezeichnet werden als die Standardschnittstelle. Es ermöglicht Händlern, die erforderlichen Indikatoreinstellungen mit minimalem Aufwand und Zeit zu erhalten, gleichartige Indikatoren aus dem Arbeitsbereich zu entfernen und in einem sich schnell verändernden Markt innerhalb eines begrenzten Zeitraums genauere Signale zu liefern. 

    Mit einer solchen Schnittstelle erstellte Indikatoren sind einfach zu bedienen, intuitiv und zeitsparend. Sie ermöglichen es Ihnen, sich auf den Handel zu konzentrieren, wodurch dessen Qualität verbessert und Ihre Produktivität gesteigert wird.

    Darüber hinaus können Sie mit diesem Ansatz nicht nur den Punkt, sondern auch alle anderen Einstellungen erhalten, die Sie auf einer Schaltfläche oder einem Bedienfeld platzieren möchten. Solche Einstellungen können Farbe, Linienbreite, Objektgröße usw. umfassen. Zusätzlich zum Scrollen können Sie Objekte ziehen, Hotkeys verwenden oder einfach den Cursor über ein Objekt oder einen Chartbereich bewegen. Eine der Funktionen ist im Indikator Button MA implementiert. Sie können das Scrollen durch Perioden nicht nur durch Drücken der Taste verwenden, sondern auch, indem Sie einfach mit der Maus darüber fahren. Darüber hinaus merkt es sich die Schaltflächenpositionen nach dem Ziehen, auch wenn Sie den Zeitrahmen ändern.

    Der Artikel behandelte die grundlegenden Schritte zum Erstellen eines Indikators mit Perioden-Scrolling basierend auf dem gleitenden Durchschnitt. Im Anhang unten finden Sie den Code des vorgefertigten Indikators auf Basis von CCI. Es ist sogar noch einfacher, da die Schaltflächen auf einem Chart nicht umbenannt werden müssen. Ihre Namen werden automatisch entsprechend der Anzahl der eingestellten Schaltflächen indiziert.

    GIF_02


    Übersetzt aus dem Russischen von MetaQuotes Ltd.
    Originalartikel: https://www.mql5.com/ru/articles/10770

    Beigefügte Dateien |
    Button_CCI.mq5 (28.95 KB)
    Lernen Sie, wie man ein Handelssystem mit Williams PR entwirft Lernen Sie, wie man ein Handelssystem mit Williams PR entwirft
    Ein neuer Artikel in unserer Serie über das Lernen, wie man ein Handelssystem durch die beliebtesten technischen Indikatoren von MQL5 zu entwerfen, um in den MetaTrader 5 verwendet werden. In diesem Artikel lernen wir, wie man ein Handelssystem mit Hilfe des Indikators Williams' %R entwickelt.
    Einen handelnden Expert Advisor von Grund auf neu entwickeln (Teil 13): Times and Trade (II) Einen handelnden Expert Advisor von Grund auf neu entwickeln (Teil 13): Times and Trade (II)
    Heute werden wir den zweiten Teil des Systems Times & Trade (Zeiten und Handel) zur Marktanalyse aufbauen. Im vorangegangenen Artikel „Times & Trade (I)“ haben wir eine alternative Chartorganisation besprochen, die es erlauben würde, einen Indikator für die schnellstmögliche Interpretation der am Markt getätigten Geschäfte zu haben.
    Neuronale Netze leicht gemacht (Teil 14): Datenclustering Neuronale Netze leicht gemacht (Teil 14): Datenclustering
    Es ist mehr als ein Jahr her, dass ich meinen letzten Artikel veröffentlicht habe. Das ist eine ganze Menge Zeit, um Ideen zu überarbeiten und neue Ansätze zu entwickeln. In dem neuen Artikel möchte ich von der bisher verwendeten Methode des überwachten Lernens abweichen. Diesmal werden wir uns mit Algorithmen des unüberwachten Lernens beschäftigen. Wir werden insbesondere einen der Clustering-Algorithmen - K-Means - betrachten.
    Einen handelnden Expert Advisor von Grund auf neu entwickeln (Teil 12): Times and Trade (I) Einen handelnden Expert Advisor von Grund auf neu entwickeln (Teil 12): Times and Trade (I)
    Heute werden wir „Times and Trade“ (Zeiten und Handel) mit einer schnellen Interpretation erstellen, um den Auftragsfluss zu lesen. Es ist der erste Teil, in dem wir das System aufbauen werden. Im nächsten Artikel vervollständigen wir das System mit den fehlenden Informationen. Um diese neue Funktionsweisen zu implementieren, müssen wir dem Code unseres Expert Advisors mehrere neue Dinge hinzufügen.