Diskussion zum Artikel "Ein visueller Strategieentwickler Erstellen eines Handelsroboters ohne zu programmieren" - Seite 6

 
Andrey Barinov:
...

Ich werde in zukünftigen Versionen Rad-Scrolling hinzufügen....

Ich möchte meine Erfahrungen bei der Implementierung des Bildlaufs mit dem Rad weitergeben. Vielleicht passt meine Technologie nicht zu Ihnen, aber sie kann Ihnen die richtige Idee geben (wenn Sie sich noch nicht für eine Implementierungsmethode entschieden haben).

Innerhalb der Funktion OnChartEvent() in der Bedingung :

if(id == CHARTEVENT_CHART_CHANGE && !a)

1. verwende ich die Funktion ChartNavigate und setze den aktuellen Chart auf die Position -100 Bars zurück.

2. Ich setze die Nummer des ersten sichtbaren Balkens mit ChartGetInteger(0,FIRST_VISIBLE_BAR) auf die statische Variable "First_bar_number".

3. Als nächstes fixiere ich das Chart-Ereignis CHARTEVENT_CHART_CHANGE einmal durch (ich verwende dazu Flag "a" und Flag "b").

4. Ich vergleiche "Number_of_the_first_bar" und "Number_of_this_bar" (die ich auch über ChartGetInteger(0,FIRST_VISIBLE_BAR) erhalte, aber bei jedem CHARTEVENT_CHART_CHANGE-Ereignis, nicht einmalig wie bei "Number_of_the_first_bar") und bestimme die Richtung der Chartverschiebung.

und bestimmen Sie die Richtung der Chartverschiebung.

5. Als Nächstes ist alles ganz einfach - ich verschiebe das Kanvas-Bild mit ObjectSetInteger(0,G_CORE[CANVAS][_NAME],OBJPROP_YOFFSET,G_CORE[CANVAS][_FIELD_TO_VIEW_Y_DISTANCE]); ich bringe das Diagramm an seine ursprüngliche Position zurück - ChartNavigate(0,CHART_END,-100);

6. Ich überspringe das nächste Chart-Ereignis, weil es von der aufgerufenen ChartNavigate-Funktion erzeugt wird . Dann wiederholt sich alles.

Hier ist der Code:

 if(id == CHARTEVENT_CHART_CHANGE && !a)
   {
    //------------------------------------ 
    if(!Номер_первого_бара)
      {
       ChartNavigate(0,CHART_END,-100); 
       Номер_первого_бара = ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR);
      }
    //------------------------------------ 
    Номер_этого_бара = ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR);
    //------------------------------------
    if(Номер_этого_бара > Номер_первого_бара)
      {
       Прокрутка_вниз = 1;
       Прокрутка_вверх = 0;
       Сдвиг = 25;
       a = 1;
      }
    if(Номер_этого_бара  < Номер_первого_бара) 
      {
       Прокрутка_вниз = 0;
       Прокрутка_вверх = 1;
       Сдвиг = -25;
       a = 1;
      }
    //------------------------------------
    G_CORE[КАНВАС][_IMAGE_VIRTUAL_Y] -= Сдвиг;
    //------------------------------------ 
    G_CORE[КАНВАС][_FIELD_TO_VIEW_Y_DISTANCE] = G_CORE[Поле_обзора][_Y] - G_CORE[КАНВАС][_IMAGE_VIRTUAL_Y];  
    //------------------------------------
    ObjectSetInteger(0,G_CORE[КАНВАС][_NAME],OBJPROP_YOFFSET,G_CORE[КАНВАС][_FIELD_TO_VIEW_Y_DISTANCE]);
    //------------------------------------    
  }
//------------------------------------------------------
if(b){a = 0; b = 0;} 
if(a == 1){ChartNavigate(0,CHART_END,-100);  b = 1;} 
//------------------------------------------------------

Der Nachteil dieser Methode ist, dass das Diagramm im Hintergrund zuckt. Allerdings nimmt Ihr Konstruktor den gesamten sichtbaren Teil des Diagramms ein, so dass dies nicht auffällt.

Der Vorteil dieser Methode ist, dass Sie mit dem Mausrad einen hervorragenden Bildlauf erhalten, der dem Bildlauf von Windows-Fenstern in nichts nachsteht. Es gibt Energie, Verlangsamung... Wenn ich mit dem Mausrad über eine horizontale Bildlaufleiste fahre, habe ich auch eine horizontale Bildlaufleiste. Das ist einfach zu bewerkstelligen.

Mit diesem Bildlauf haben die Benutzer das Gefühl, dass sie in der Aufrollphase arbeiten.)

So sieht es aus: https://www.mql5.com/ru/forum/139237/page7

 
Реter Konow:

Ich möchte meine Erfahrungen mit der Implementierung des Bildlaufs mit dem Rad teilen. Vielleicht passt meine Technik nicht zu Ihnen, aber sie kann Ihnen die richtige Idee vermitteln (wenn Sie sich noch nicht für die Methode der Implementierung entschieden haben).

Innerhalb der Funktion OnChartEvent() in der Bedingung :

1. benutze ich die Funktion ChartNavigate und setze den aktuellen Chart auf die Position -100 Bars zurück.

2. Ich setze die Nummer des ersten sichtbaren Balkens mit ChartGetInteger(0,FIRST_VISIBLE_BAR) in die statische Variable "First_bar_number".

3. Als nächstes fixiere ich einmalig das Chart-Ereignis CHARTEVENT_CHART_CHANGE (ich verwende dazu Flag "a" und Flag "b").

4. Ich vergleiche "Number_of_the_first_bar" und "Number_of_this_bar" (die ich auch über ChartGetInteger(0,FIRST_VISIBLE_BAR) erhalte, aber bei jedem CHARTEVENT_CHART_CHANGE-Ereignis, nicht einmal wie bei "Number_of_the_first_bar").

und die Richtung der Chartverschiebung bestimmen.

5. Als nächstes ist alles ganz einfach - ich verschiebe das Kanvas-Bild mit ObjectSetInteger(0,G_CORE[CANVAS][_NAME],OBJPROP_YOFFSET,G_CORE[CANVAS][_FIELD_TO_VIEW_Y_DISTANCE]); ich bringe das Diagramm an seine ursprüngliche Position zurück - ChartNavigate(0,CHART_END,-100);

6. Ich überspringe das nächste Chart-Ereignis, weil es von der aufgerufenen ChartNavigate-Funktion erzeugt wird . Dann wiederholt sich alles.

Hier ist der Code:

Der Nachteil dieser Methode ist, dass das Diagramm im Hintergrund zuckt. Allerdings nimmt Ihr Konstruktor den gesamten sichtbaren Teil davon ein, so dass dies nicht auffällt.

Der Vorteil dieser Methode ist, dass Sie ein ausgezeichnetes Scrollen mit dem Rad erhalten, das dem Scrollen von Windows-Fenstern nicht nachsteht. Es gibt Energie, Verlangsamung... Wenn ich mit dem Mauszeiger über eine horizontale Bildlaufleiste fahre und mit dem Rad scrolle, habe ich auch eine horizontale Bildlaufleiste. Es ist einfach, dies zu tun.

Mit diesem Bildlauf haben die Benutzer das Gefühl, als würden sie im Windup-Modus arbeiten.)

So sieht es aus: https://www.mql5.com/ru/forum/139237/page7

Danke!

Was ist falsch an CHARTEVENT_MOUSE_WHEEL?

https://www.mql5.com/de/docs/constants/chartconstants/enum_chartevents&nbsp;

Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Типы событий графика
Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Типы событий графика
  • www.mql5.com
Существуют 11 видов событий, которые можно обрабатывать с помощью функции предопределенной функции OnChartEvent(). Для пользовательских событий предусмотрено 65535 идентификаторов в диапазоне от CHARTEVENT_CUSTOM до CHARTEVENT_CUSTOM_LAST включительно. Для генерации пользовательского события необходимо использовать функцию EventChartCustom...
 
Andrey Barinov:

Ich danke Ihnen.

Was ist falsch an CHARTEVENT_MOUSE_WHEEL?

https://www.mql5.com/de/docs/constants/chartconstants/enum_chartevents&nbsp;

Als ich den Bildlauf mit dem Rad gemacht habe, war es noch nicht da. Also habe ich es gar nicht erst versucht. (Außerdem arbeite ich noch mit MT4, und dort scheint es nicht verfügbar zu sein).

Gibt es Energie und Verlangsamung?

 
Реter Konow:

Als ich den Bildlauf mit dem Rad gemacht habe, war er noch nicht da. Deshalb habe ich es gar nicht erst probiert. (Außerdem arbeite ich noch an MT4, und dort scheint es nicht verfügbar zu sein).

Gibt es Energie und Verzögerung?

Ich weiß es nicht, ich habe es nicht ausprobiert. Ich erinnere mich nur daran, dass es ein solches Ereignis gibt.

 

Guten Tag!

Ich bin der NEOPROGRAMMIST, für den dieses Produkt und der Artikel darüber existieren.

Ich habe eine Frage - zu Lehrzwecken habe ich versucht, den Expert Advisor aus dem Beispiel Nummer 1 (Kreuzung von Fast und Slow MA) zu reproduzieren. Ich habe alles wie im Artikel gemacht, Buchstabe für Buchstabe. Das Ergebnis ist, dass der Expert Advisor manchmal mehrere Positionen öffnet und sofort wieder schließt, was sofort zu einem Verlust führt. Und manchmal öffnet er eine einzige Position, ganz wie es sein sollte, und schließt sie, wenn das entgegengesetzte Signal eintrifft. Alles schien gut zu sein, zumindest mit diesen, aber ich bemerkte, dass sie immer nur Bai sind.

Das Schema löste sich nach dem Neustart des Computers (Update in der Nacht), so kann ich nicht finden, einen möglichen Fehler, in den Code ist noch zu schwach, und es ist so groß und unverständlich.

Wären Sie in der Lage, den Code zu überprüfen und vorschlagen, was ich falsch gemacht habe?

Dateien:
 
Andrey Barinov:

Ich weiß es nicht, ich habe es nicht ausprobiert. Ich erinnere mich nur daran, dass es ein solches Ereignis gibt.

Das Ereignis ist da, aber niemand hat es bisher genutzt).

Ich würde gerne meine Methode wegen des Chart Twitching loswerden, aber MT4 hat dieses Ereignis nicht, und MT5 weiß noch nicht, wie es funktioniert....

 
 
Sergey Voytsekhovsky:

Guten Tag.

Ich bin der NEOPROGRAMMIST, für den dieses Produkt und der Artikel darüber existiert.

Ich habe eine Frage - zu Lehrzwecken habe ich versucht, den Expert Advisor aus dem Beispiel Nummer 1 (Kreuzung von Fast und Slow MA) zu reproduzieren. Ich habe alles wie im Artikel gemacht, Buchstabe für Buchstabe. Das Ergebnis ist, dass der Expert Advisor manchmal mehrere Positionen öffnet und sofort wieder schließt, was sofort zu einem Verlust führt. Und manchmal öffnet er eine einzige Position, ganz wie es sein sollte, und schließt sie, wenn das entgegengesetzte Signal eintrifft. Alles schien gut zu sein, zumindest mit diesen, aber ich bemerkte, dass sie immer nur Kaufen sind.

Das Schema löste sich nach dem Neustart des Computers (Update in der Nacht), so kann ich nicht finden, einen möglichen Fehler, in den Code ist noch zu schwach, und es ist so groß und unverständlich.

Wären Sie in der Lage, den Code zu überprüfen und vorzuschlagen, was ich falsch gemacht habe?

Schauen Sie sich zunächst Muster 1 an. Dies ist genau das gleiche Muster, das in dem Artikel betrachtet wird (nur Travelling und Lossless sind hinzugefügt). Sie können die Parameter aller Elemente sehen und mit ihnen spielen.

In Ihrem Expert Advisor gibt es eine Reihe von Fehlern. Einer davon ist, dass Sie die Art der Transaktion im Element für Verkäufe nicht geändert haben (dort steht "Kauf" statt "Verkauf").

 
Andrey Barinov:

Beginnen Sie mit dem Studium von Muster 1. Dies ist genau das Schema, das in diesem Artikel betrachtet wird (nur Travelling und Breakeven sind hinzugefügt). Sie können die Parameter aller Elemente sehen und mit ihnen spielen.

Es gibt einige Fehler in Ihrem Expert Advisor. Einer davon ist, dass Sie die Art der Transaktion im Element für den Verkauf nicht geändert haben (es steht "Kauf" statt Verkauf).

Vielen Dank, ich war sehr angenehm überrascht von der Schnelligkeit Ihrer Antwort.

Ich verstehe das mit der unveränderten Transaktionsart, deshalb funktionieren normalerweise nur Käufe.

Aber an welcher Stelle ist es falsch, dass in einer halben Sekunde, anscheinend bei jedem Tick, eine ganze Reihe von Aufträgen auf einmal geöffnet und geschlossen wird, und es gibt sowohl Kauf- als auch Verkaufsaufträge. ???

 
Sergey Voytsekhovsky:

Vielen Dank, ich bin sehr angenehm überrascht von der prompten Antwort.

Ich verstehe die unveränderte Transaktionsart, sie ist der Grund, warum nur Käufe normalerweise funktionieren.

Aber an welcher Stelle ist es falsch, dass in einer halben Sekunde, anscheinend bei jedem Tick, eine ganze Reihe von Aufträgen geöffnet und sofort wieder geschlossen wird, und es gibt sowohl Kauf- als auch Verkaufsaufträge. ???

Nun, sehen Sie, Sie haben einen Kauf- statt einen Verkaufsauftrag. Wenn ein Verkaufssignal gegeben wird, sollten die Käufe gleichzeitig geschlossen werden! Was er auch tut.

Es erscheint ein Verkaufssignal, der Roboter eröffnet aus Versehen einen Kauf- statt einen Verkaufsauftrag und schließt ihn sofort wieder, dann öffnet er ihn erneut und schließt ihn wieder, usw.

Ansonsten war in Ihrem Schema alles korrekt.