Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 481

 
Hallo!

Hat jemand ein Code-Beispiel, das einige Symbole zeichnet, z. B. Pfeile auf dem Indikator-Chart, wenn sich die Linien kreuzen, wenn es zwei sind, oder wenn die "0"-Linie gekreuzt wird, oder irgendwelche anderen Kriterien? Vorzugsweise am oberen und unteren Rand des selbstskalierenden Anzeigefensters.
 
Sergei Vladimirov:
Drücken Sie "Laden". Nur die letzten 2048 Takte werden automatisch geladen, der Rest muss gekickt werden.
So sah es nach "Load" aus ...
 
Mike:
So ist es nach "Load" herausgekommen ...
Löschen Sie zwangsweise den Ordner des Verlaufsarchivs und starten Sie das Terminal - laden Sie dann alle Anführungszeichen.
 
Leo59:
Hallo!

Vielleicht hat jemand einen Beispielcode, der einige Symbole, wie z.B. Pfeile auf dem Indikatordiagramm, zeichnet, wenn die Linien gekreuzt werden, wenn es zwei gibt, oder wenn die "0"-Linie gekreuzt wird, oder jedes andere Kriterium? Vorzugsweise am oberen und unteren Rand des selbstskalierenden Anzeigefensters.

Hier ist einer meiner Truthähne, vielleicht hilft das ja. Der Code ist für MT4, genau wie er ist. Es funktioniert auch mit Protokollen.

void PlotArrowUP(int i)
{
    string sup = "\xE9"; //233
    datetime dt = iTime(NULL, 0, i); 
    double dprice = (WindowPriceMax()-WindowPriceMin())/(100.0/ArrowOffsetInPercentOfScreen); //настроить масштаб под свои нужды
    ObjectCreate("arr1"+ArrowIdx, OBJ_TEXT, 0, dt, FastBuffer[i]-dprice);   
    ObjectSetText("arr1"+ArrowIdx, sup, ArrowFontSize, "Wingdings", ColorArrowUp);
    ArrowIdx++;
    if(EnableLogFile)
    {
        string dts = TimeToStr(TimeCurrent(), TIME_DATE | TIME_MINUTES | TIME_SECONDS);
        FileWrite(LogFile1, dts, "  call PlotArrowUp(i) i=", i, "  FastBuffer[i]=", FastBuffer[i]);
    }
}

void PlotArrowDown(int i)
{
    string sup = "\xEA"; //234
    datetime dt = iTime(NULL, 0, i); 
    double dprice = (WindowPriceMax()-WindowPriceMin())/(100.0/ArrowOffsetInPercentOfScreen);
    dprice*= 2.0;
    ObjectCreate("arr0"+ArrowIdx, OBJ_TEXT, 0, dt, FastBuffer[i]+dprice);   
    ObjectSetText("arr0"+ArrowIdx, sup, ArrowFontSize, "Wingdings", ColorArrowDown);
    ArrowIdx++;
    if(EnableLogFile)
    {
        string dts = TimeToStr(TimeCurrent(), TIME_DATE | TIME_MINUTES | TIME_SECONDS);
        FileWrite(LogFile1, dts, "  call PlotArrowDown(i) i=", i, "  FastBuffer[i]=", FastBuffer[i]);
    }
}
 
Alexey Volchanskiy:

Вот из моего индюка, может, поможет. Код для МТ4, выкладываю, как есть. Там еще работа с логами.

Vielen Dank, Alexey, für dein Feedback!

In Ihrem Beispiel geht es um Objekte. Ich frage mich, ob es möglich ist, es durch Arrays zu tun, so dass, wenn ich Skala ändern, sie immer an der oberen und unteren Grenzen des Fensters sind?
 
Leo59:
Alexey Volchanskiy:
Vielen Dank, Alexey, für dein Feedback!

In Ihrem Beispiel sind es die Objekte. Ich frage mich, ob es möglich ist, es durch Arrays zu tun, so dass, wenn ich Skala ändern, sie immer am oberen und unteren Rand des Fensters sind?

Ich verstehe das mit den Arrays nicht. Siehe Kommentare, ich habe hinzugefügt

ObjectCreate("arr0"+ArrowIdx, OBJ_TEXT, 0, dt, FastBuffer[i]+dprice);
// "arr0"+ArrowIdx - формируем уникальное имя стрелки
// FastBuffer[i]+dprice - тут формируется цена, на которой будет рисоваться стрелка
   
ObjectSetText("arr0"+ArrowIdx, sup, ArrowFontSize, "Wingdings", ColorArrowDown);
ArrowIdx++; // для каждой стрелки нужно уникальное имя

Wenn Sie außerdem am oberen Rand zeichnen müssen, gehen Sie wie folgt vor

ObjectCreate("arr0"+ArrowIdx, OBJ_TEXT, 0, dt, ChartGetDouble(0,CHART_PRICE_MAX,0); 

Lesen Sie die Hilfe des Editors; sie wird hier ausführlich mit Beispielen beschrieben

MQL4 Referenz / Standardkonstanten, Aufzählungen und Strukturen / Diagrammkonstanten / Beispiele für die Arbeit mit Diagrammen

 
Alexey Volchanskiy:

Ich verstehe das mit den Arrays nicht. Siehe die Kommentare, die ich hinzugefügt habe

Wenn Sie außerdem am oberen Rand zeichnen müssen, gehen Sie wie folgt vor

Lesen Sie die Hilfe des Editors; sie wird hier ausführlich mit Beispielen beschrieben

MQL4 Referenz / Standardkonstanten, Aufzählungen und Strukturen / Diagrammkonstanten / Beispiele für die Arbeit mit Diagrammen

Ändern von

WindowPriceMax() и WindowPriceMin()

Objekte sollten zwangsweise in einem bestimmten Abstand von den Fensterrändern neu gezeichnet werden

 
Leo59:

Mit der Änderung

die Objekte müssen gezwungen werden, in einem bestimmten Abstand von den Fensterrändern neu gezeichnet zu werden

Die alten Objekte werden an ihrem Platz bleiben - zu den alten Preisen. Wenn Sie sie an die Grenzen verschieben müssen, müssen Sie sie manuell neu zeichnen. Ich weiß nicht genau, was Ihr Problem ist.

Sie können OnChartEvent verwenden, um Fensteränderungen zu verfolgen.

 
Alexey Volchanskiy:

Die alten Objekte werden an ihrem Platz bleiben - zu den alten Preisen. Wenn Sie sie an die Grenzen verschieben müssen, müssen Sie sie von Hand neu zeichnen. Ich kenne Ihre Aufgabe nur nicht vollständig.

Sie können OnChartEvent verwenden, um Fensteränderungen zu verfolgen.

Auf den ersten Blick scheint es eine einfache Aufgabe zu sein. ABER! ....
Es gibt eine Linie eines beliebigen Oszillators im Indikatorfenster, die sich relativ "0" mit unterschiedlicher Amplitude bewegt.
Das eigentliche Problem ist:
- Zeichnen Sie bei "0" einen Pfeil am unteren Rand des Indikatorfensters, der von unten nach oben verläuft,
- Bei "0" kreuzen Sie von oben nach unten, um einen Pfeil am oberen Rand des Anzeigefensters zu zeichnen,
- bei der Selbstskalierung des Oszillatorcharts im Indikatorfenster sollten die Pfeile automatisch an den Grenzen des Indikatorfensters bleiben.
Wenn Sie z.B. das Diagramm in der Historie vor- und zurückblättern oder die horizontale Skala ändern, bleiben die Pfeile immer an den Grenzen des Indikatorfensters.
 
Leo59:
Auf den ersten Blick scheint die Aufgabe so einfach wie drei Kopeken. ABER! ....
Im Indikatorfenster befindet sich eine Linie eines beliebigen Oszillators, der relativ "0" mit unterschiedlicher Amplitude rotiert.
Das eigentliche Problem ist:
- Zeichnen Sie bei "0" einen Pfeil am unteren Rand des Indikatorfensters, der von unten nach oben verläuft,
- Bei "0" kreuzen Sie von oben nach unten, um einen Pfeil am oberen Rand des Anzeigefensters zu zeichnen,
- bei der Selbstskalierung des Oszillatorcharts im Indikatorfenster sollten die Pfeile automatisch an den Grenzen des Indikatorfensters bleiben.
Wenn Sie z.B. das Diagramm in der Historie vor- und zurückblättern oder die horizontale Skala ändern, bleiben die Pfeile immer an den Grenzen des Indikatorfensters.

Die Aufgabe ist und bleibt ganz einfach.

Wenn das Fenster geändert oder gescrollt wird, wirdOnChartEvent aufgerufen, es übergibt ein Ereignis ohne Parameter:

CHARTEVENT_CHART_CHANGEEreignis zur Kartenänderung

Wenn dieses Ereignis eintritt, bestimmen wir den linken und rechten sichtbaren Balken und finden innerhalb dieser Grenzen alle Pfeile im Indikatorfenster. Wenn er gefunden wird, verschieben wir ihn an die erforderliche Grenze. Wenn Sie Pfeile erstellen, geben Sie ihnen Namen wie UpArrow***** und DownArrow*****, um Probleme im Zusammenhang mit der Analyse zu vermeiden. Rufen Sie dann vorsichtshalber ChartRedraw auf.

Grund der Beschwerde: