Farbe der Standardanzeige

 

Guten Tag!

Wie ändert man die Farbe des Standardanzeigers?

Vielen Dank, Mikhail

 
Mikalas:

Wie kann ich die Farbe des Standardanzeigeprogramms ändern?

Ich habe das noch nie gemacht, aber hier ist eine Idee. Sie sollten den Code des Standardindikators öffnen und dort Zeilen mit indicator_color* finden

Etwa so.

//--- японские свечи будут рисоваться цветом clrDodgerBlue
#property indicator_color1  clrDodgerBlue

Dann fügen Sie die gewünschte Farbe ein. Siehe auch MQL5-Referenz / Benutzerdefinierte Indikatoren / Beziehung zwischen Indikatoreigenschaften und Funktionen und MQL5-Referenz / Standardkonstanten, Aufzählungen und Strukturen / Indikatorkonstanten / Zeichnungsstile

 

Ich danke Ihnen natürlich.

Aber es stellt sich heraus, dass ich jedes Mal, wenn ich den Code korrigieren muss?

Mikhail

 
Mikalas:

Ich danke Ihnen natürlich.

Aber bedeutet das, dass Sie den Code jedes Mal ändern müssen?

Machen Sie sich den "Standard"-Indikator zu eigen, - und fügen Sie Ihre Optionen darin ein. Zum Beispiel (reine Idee): Farben in Eingabeparameter setzen und dann in Oninit() mit der Funktion PlotIndexSetInteger(N-1, PLOT_LINE_COLOR, nColor) verarbeiten. Die Beispiele in der Referenz können dabei helfen. Dann können Sie nicht den Code selbst bearbeiten, sondern die gewünschte Farbe über die Eigenschaften des Indikators einstellen, wenn Sie ihn starten oder ändern.
 
Mikalas:

Ich danke Ihnen natürlich.

Aber es stellt sich heraus, dass Sie den Code jedes Mal korrigieren müssen?

Ihre Logik hat es in sich. Ihre ursprüngliche Frage lautete:

Mikalas:

Wie lässt sich die Farbe des Standardindikators programmatisch ändern?

 
abolk:

Ihre Logik hat es in sich. Sie haben ursprünglich gefragt:

Liebe abolk!

Offensichtlich von Ihrem Code.

Mikhail

 
Yedelkin:
Machen Sie sich das "hausinterne" Kennzeichen zu eigen, - und fügen Sie Ihre Optionen darin ein. Zum Beispiel (reine Idee): Farben in Eingabeparameter setzen und dann in Oninit() mit der Funktion PlotIndexSetInteger(N-1, PLOT_LINE_COLOR, nColor) verarbeiten. Die Beispiele in der Referenz können dabei helfen. Dann können Sie nicht den Code selbst bearbeiten, sondern die gewünschte Farbe über die Eigenschaften des Indikators einstellen, wenn Sie ihn starten oder ändern.

Ich danke Ihnen vielmals.

Schade, dass die Entwickler nicht daran gedacht haben.

Dieser Code hätte funktionieren müssen, ABER.... leider...

params[0].type = TYPE_INT;
        params[0].integer_value = 10;
        
        params[1].type = TYPE_INT;
        params[1].integer_value = 0;
        
        params[2].type = TYPE_INT;
        params[2].integer_value = MODE_SMA;
        
        params[3].type = TYPE_INT;
        params[3].integer_value = PRICE_MEDIAN;
        
        params[4].type = TYPE_COLOR;
        params[4].double_value = clrBlue;
        
        ma_handle = IndicatorCreate( NULL, PERIOD_CURRENT, IND_MA, 5, params );
        if ( ma_handle != INVALID_HANDLE )
      {
        ChartIndicatorAdd( 0, 0, ma_handle );
      }
 
Mikalas:

Dieser Code hätte funktionieren müssen, ABER.... leider...

Hat nicht mit der Funktion IndicatorCreate() funktioniert - es hat sich herausgestellt, dass es einfacher ist, eigene Indikatoren zu erstellen. Da Sie jedoch nur einen Teil des Codes zitiert haben, eine Frage: haben Sie die Variable params vor ihrer Verwendung auf Null gesetzt? Zum Beispiel so:

MqlParam params;
ZeroMemory(params); 

Und welchen Fehlercode fordert Ihr Eintrag zurück?

Sie haben es getan:

ArrayResize(params,5);
?

Außerdem hat der Indikator IND_MA(iMA) keinen solchen Parameter wie "Farbe", und Sie haben ihn angegeben. Sehen Sie sich hier ein Beispiel für die Verwendung von iMA an: MQL5 Referenz / Zugriff auf Zeitreihen und Indikatoren / IndicatorCreate.

 
Mikalas:

Dieser Code hätte funktionieren müssen

Warum ist das so? Erklären Sie zunächst, warum die Farbe eine reelle Zahl ist?

        params[4].type = TYPE_COLOR;
        params[4].double_value = clrBlue;
 

Guten Tag, stringo und Yedelkin!

Wahrscheinlich haben Sie meine Nachricht nicht genau gelesen, in der es hieß

"Schade, dass die Entwickler nicht daran gedacht haben. "

Lassen Sie mich nun erklären, warum ich den obigen Code geschrieben habe.

Anhand der Einstellungen des gleitenden Durchschnitts können Sie deutlich erkennen, dass der Indikator 7 Parameter hat (5 Hauptparameter + 2 Linien).

So steht es auf der Registerkarte "Parameter".

Wenn Sie ALLE Parameter "manuell" ändern können, bedeutet dies, dass es eine

was die Entwickler getan haben - ALLE Parameter programmatisch zu ändern!

In der Funktion IndicatorCreate, aber nicht bis zum Ende (sonst ist es ein BAG).

MA

Die Struktur MqlParam ermöglicht die Eingabe einer Farbe - TYPE_COLOR(ENUM_DATATYPE);

Aus der MQL5-Referenz:

Der Farbtyp dient der Speicherung von Farbinformationen und belegt 4 Bytes im Speicher. Das erste Byte wird ignoriert, die restlichen 3 Bytes enthalten die RGB-Komponenten.

......

Ganzzahlen werden als hexadezimale oder dezimale Zahlen dargestellt. Einehexadezimale Zahl ist 0x00BBGGRR

//--- ganzzahlige Darstellung
0xFFFFFFFF //Weiß
16777215 //weiß
0x008000 //grün
32768 //grün

Ende des Zitats.

struct MqlParam
{
ENUM_DATATYPE type; // Typ des Eingangsparameters, ENUM_DATYPE Aufzählungswert
long integer_value; // Feld zum Speichern eines Integer-Wertes
double double_value; // Feld zur Speicherung von Double- oder Float-Werten
string string_value; // Feld für die Speicherung von Werten des Typs string
};

(Ich habe es zuerst mit "long" versucht, was nicht funktionierte, und dann mit "double" - auch das funktionierte nicht, was im Code bleibt).

Das sollte so sein:

MqlParam params[5];


.........

params[4].type = TYPE_COLOR;
params[4].integer_value = clrBlue; // - blaue Farbe 0x00FF0000 (16711680)

stringo, ich habe Ihre Frage "warum zum Teufel nicht" beantwortet.

Wieder einmal ist es schade, dass die Entwickler keine Farbänderung vorgenommen haben.

Hochachtungsvoll, Mikhail

 
Mikalas:

Guten Tag, stringo und Yedelkin!

Wahrscheinlich haben Sie meine Nachricht nicht genau gelesen, in der es hieß

"Schade, dass die Entwickler nicht daran gedacht haben. "

Mikalas, hier gibt es bereits so viele Experten, die voreilige Schlüsse für andere ziehen, dass es beängstigend ist. Erhöhen Sie bitte nicht ihre Zahl.

Als Nächstes habe ich Ihnen geholfen, indem ich konkrete, emotionslose Fragen gestellt habe. Anstatt sie zu beantworten, erzählen Sie mir, "wie Sie zu diesem Punkt in Ihrem Leben gekommen sind". Was wollen Sie? -Jemanden davon überzeugen, dass es Fehler gibt, die Sie entdeckt haben, oder Ihren Code "programmatisch" verbessern? Wenn Sie einen "Fehler" entdecken, wenden Sie sich mit einer vollständigen Beschreibung der Situation an den Service Desk. Wenn Sie "programmatisch" arbeiten wollen, sollten Sie sich eingehend mit der Erstellung und Bedienung der Indikatoren befassen.