Ich habe versucht, meinen eigenen Indikator mit Hilfe des veröffentlichten Codes zu schreiben und dabei die Zeicheneigenschaft DRAW_FILLING zu verwenden.
Aber ich habe Probleme mit dem Verkleben von benachbarten gezeichneten Abschnitten, die durch leere Werte getrennt sind.
Wenn zwei gezeichnete Abschnitte in einem Fenster erscheinen, dann wird dieser leere Abschnitt trotz der Tatsache, dass sie durch einen Indikatorabschnitt mit dem Wert EMPTY_VALUE getrennt sind, immer noch mit den Werten der benachbarten Abschnitte gezeichnet.
Ich habe diesen Fall aufgegriffen, weil die veröffentlichten Codes für den Sitzungsindikator bei mir nicht funktionieren, also habe ich beschlossen, alles neu zu schreiben.
Hier ist ein Entwurf.
Ich kann nur diese Option anbieten
Danke, aber ein bisschen geht nicht, ich werde vielleicht auf Grafikobjekte verzichten.
Vielen Dank, aber ein wenig wird nicht gehen, werde ich auf Graph-Objekte zu stoppen.
- www.mql5.com
Da beim Zeichnen im Stil von DRAW_FILLING mit Polygonen gearbeitet wird, kann man leider keine schönen Rechtecke erhalten.
Ich bin auf das gleiche Problem gestoßen (Aufkleben auf Bereiche mit leeren Werten). Obwohl es oben heißt, dass es unmöglich ist, Rechtecke zu erhalten, aber da es ein Beispiel gibt, das diese Rechtecke zeichnet(Indikator für Handelssitzungen), beschloss ich, mich mit dem Thema zu beschäftigen.
Ehrlich gesagt, konnte ich nicht verstehen, wie man Rechtecke in dem oben genannten Indikator erhält. Daher bin ich für jede Erklärung dankbar (von den Entwicklern der Plattform, dem Autor oder Drittanbietern).
Andererseits hat sich im Laufe der Experimente herausgestellt, dass es gar nicht so schwierig ist, Rechtecke zu erhalten - man muss nur die Ablagepuffer nach einem Abschnitt mit leeren Werten austauschen. Mit anderen Worten: Dieser Code
... //--- for ( int bar = startBar; bar < rates_total && !IsStopped(); bar++ ) { if ( prev_calculated != rates_total && bar == rates_total - 1 ) { _up = up; } if ( bar % 4 == 0 ) { if ( up ) { draw(bar, high[bar], low[bar]); up = false; } else { draw(bar, low[bar], high[bar]); up = true; } } } //--- Rückgabe des Wertes von prev_calculated für den nächsten Aufruf return(rates_total); } //+------------------------------------------------------------------+ void draw(int bar, double price1, double price2) { //--- int start = bar-2; for ( int i = start; i <= bar; i++ ) { FillingBuffer1[i] = price1; FillingBuffer2[i] = price2; } //--- }
führt zu diesem Ergebnis:

Es scheint, dass das Problem gelöst ist. Ich habe einen Indikator geschrieben, der vom Benutzer angegebene Zeitintervalle auf täglicher Basis zuweist, und ich habe eine neue Überraschung erlebt:

Egal wie ich es drehe und wende, ich kann die "Nebeneffekte" nicht entfernen. Beachten Sie, dass im ersten Fall (Code und Bild oben) nichts dergleichen beobachtet wurde.
Daher die Fragen:
- Warum hat der Trading-Sessions-Indikator (Link am Anfang des Beitrags) nicht das Problem, dass er an den Bereichen mit leeren Werten hängen bleibt?
- Warum werden in einigen Fällen die Rechtecke normal gezeichnet, während in anderen Fällen Seiteneffekte auftreten? Die Codes sind am Ende des Beitrags angehängt. (Ja, wenn solche Phänomene immer auftreten, würde ich der Aussage über Polygone zustimmen).
Ich wiederhole: Ich werde für alle Erklärungen dankbar sein.
P.S.1 Wie es mir scheint, ist die Lösung für das Problem der Rechtecke, eine gute Alternative zu den Objekten (die ich irgendwie nicht wirklich verwenden möchte). Immerhin ist es die gleiche Auswahl von Zeitintervallen, und lineare Umkehrung, und Darvas Bereichen, und die Auswahl der verschiedenen Muster, etc.
P.S.2 Ich dachte daran, den TimeZone-Indikator in die Codebasis aufzunehmen, aber lohnt sich das (mit diesen "linken" Balken)?
PlotIndexSetDouble (1,PLOT_EMPTY_VALUE,EMPTY_VALUE); verwenden, um den Bereich nicht zu füllen.
Warum manchmal Wirkung und manchmal keine Wirkung?
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.

DRAW_FILLING:
Der DRAW_FILLING Zeichenstil zeichnet eine gefüllte Fläche zwischen den Werten von 2 Indikatorspeichern. Eigentlich zeichnet er zwei Linien und füllt den dazwischen liegenden Raum mit einer angegebenen Farbe aus.
Autor: MetaQuotes Software Corp.