Sehr geehrte Damen und Herren.
Ichversuche, einen benutzerdefinierten Indikator auf Basis von iBand zu erstellen.
Nach langem Suchen habe ich beschlossen, hier zu posten, vielleicht kann mir jemand helfen.
Hier ist der vollständige Indikator.
Problem 1 ist:
Sie können in Bild anhängen sehen, ich weiß nicht, warum ich grün unter Chart haben.
Ichversuche, einen benutzerdefinierten Indikator auf Basis von iBand zu erstellen.
Nach langem Suchen habe ich beschlossen, hier zu posten, vielleicht kann mir jemand helfen.
Hier ist der vollständige Indikator.
//Das ist MQL5\Indikatoren\Anhnt\iBand_Display.mq5 #property indicator_chart_window #property indicator_buffers 3 #property indicator_plots 3 //--- Handlung Mitte #property indicator_label1 "Middle" #property indicator_type1 DRAW_LINE //--- Plot Obere #property indicator_label2 "Upper" #property indicator_type2 DRAW_LINE //--- plot Lower #property indicator_label3 "Lower" #property indicator_type3 DRAW_LINE //================================================== // Eingabeparameter //================================================== input int InpBBPeriod = 14; input ENUM_APPLIED_PRICE inp_Applied_Price = PRICE_MEDIAN; input double InpBBDeviation = 2.0; input int InpBBShift = 0; input color InpMiddleColor = clrYellow; input color InpUpperColor = clrYellow; input color InpLowerColor = clrYellow; input int InpMiddleWidth = 2; input int InpUpperWidth = 2; input int InpLowerWidth = 2; input bool inp_BB_Show_Upper = true; input bool inp_BB_Show_Middle = true; input bool inp_BB_Show_Lower = true; input ENUM_LINE_STYLE InpMiddleStyle = STYLE_DOT; input ENUM_LINE_STYLE InpUpperStyle = STYLE_DOT; input ENUM_LINE_STYLE InpLowerStyle = STYLE_DOT; //================================================== #include <Anhnt/Configuration/NamingConfiguration.mqh> //================================================== // Indikatorpuffer //================================================== double MiddleBuffer[]; double UpperBuffer[]; double LowerBuffer[]; //================================================== // Globale Variablen //================================================== int g_bb_handle = INVALID_HANDLE; //https://www.mql5.com/de/docs/indicators/ibands //--- wir behalten die Anzahl der Werte im Bollinger Bands Indikator bei //+------------------------------------------------------------------+ int OnInit() { //================================================== // Puffer einstellen //================================================== SetIndexBuffer(BASE_LINE, MiddleBuffer, INDICATOR_DATA); SetIndexBuffer(UPPER_BAND, UpperBuffer, INDICATOR_DATA); SetIndexBuffer(LOWER_BAND, LowerBuffer, INDICATOR_DATA); ArraySetAsSeries(MiddleBuffer, true); ArraySetAsSeries(UpperBuffer, true); ArraySetAsSeries(LowerBuffer, true); //================================================== // INPUT-Werte auf Plots anwenden (laufzeitsicherer Weg) //================================================== PlotIndexSetInteger(BASE_LINE, PLOT_LINE_COLOR, InpMiddleColor); PlotIndexSetInteger(UPPER_BAND, PLOT_LINE_COLOR, InpUpperColor); PlotIndexSetInteger(LOWER_BAND, PLOT_LINE_COLOR, InpLowerColor); PlotIndexSetInteger(BASE_LINE, PLOT_LINE_STYLE, InpMiddleStyle); PlotIndexSetInteger(UPPER_BAND, PLOT_LINE_STYLE, InpUpperStyle); PlotIndexSetInteger(LOWER_BAND, PLOT_LINE_STYLE, InpLowerStyle); PlotIndexSetInteger(BASE_LINE, PLOT_LINE_WIDTH, InpMiddleWidth); PlotIndexSetInteger(UPPER_BAND, PLOT_LINE_WIDTH, InpUpperWidth); PlotIndexSetInteger(LOWER_BAND, PLOT_LINE_WIDTH, InpLowerWidth); PlotIndexSetInteger( BASE_LINE, PLOT_DRAW_TYPE, inp_BB_Show_Middle ? DRAW_LINE : DRAW_NONE ); PlotIndexSetInteger( UPPER_BAND, PLOT_DRAW_TYPE, inp_BB_Show_Upper ? DRAW_LINE : DRAW_NONE ); PlotIndexSetInteger( LOWER_BAND, PLOT_DRAW_TYPE, inp_BB_Show_Lower ? DRAW_LINE : DRAW_NONE ); string name = SMT_PREFIX + SMT_BB_NAME + "(" + (string)InpBBPeriod + "," + DoubleToString(InpBBDeviation, 1) + ")"; IndicatorSetString(INDICATOR_SHORTNAME, name); //================================================== // iBands-Handle erstellen //================================================== g_bb_handle = iBands( _Symbol, _Period, InpBBPeriod, InpBBShift, InpBBDeviation, inp_Applied_Price ); if(g_bb_handle == INVALID_HANDLE) { Print("iBand_Display INIT FAILED. Unable to create iBands handle. GetLastError = ", GetLastError()); return INIT_FAILED; } Print("iBand_Display INIT SUCCESS"); return INIT_SUCCEEDED; } //+------------------------------------------------------------------+ int OnCalculate( const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[] ) { //https://www.mql5.com/de/docs/indicators/ibands&nbsp; //--- warten, bis iBands bereit ist int calculated = BarsCalculated(g_bb_handle); if(calculated <= InpBBPeriod) return 0; // Print("DEBUG from OnCalculate After Waiting BarsCalculated | Symbol=", _Symbol, // " | Zeitraum=", _Zeitraum, // " | BarsCalculated(iBands)=", calculated); //--- Dieser Block wird ausgeführt, wenn der Indikator zum ersten Mal an ein Diagramm angehängt wird if(prev_calculated == 0) { ArrayInitialize(MiddleBuffer, EMPTY_VALUE); ArrayInitialize(UpperBuffer, EMPTY_VALUE); ArrayInitialize(LowerBuffer, EMPTY_VALUE); int to_copy = MathMin(calculated, rates_total); // Alle verfügbaren Daten auf einmal kopieren CopyBuffer(g_bb_handle, BASE_LINE, 0, to_copy, MiddleBuffer); CopyBuffer(g_bb_handle, UPPER_BAND, 0, to_copy, UpperBuffer); CopyBuffer(g_bb_handle, LOWER_BAND, 0, to_copy, LowerBuffer); // Print("DEBUG von OnCalculate First Initial | Symbol=", _Symbol, // " | Zeitraum=", _Zeitraum, // " | BarsCalculated(iBands)=", calculated); return rates_total; } //--- Dieser Block wird bei jedem neuen geöffneten Balken ausgeführt if(prev_calculated != rates_total && prev_calculated != 0) { //================================================== // NEXT RUNS: // Nur den neuesten Balken (Index 0) aktualisieren. // Verschieben Sie Arrays NICHT manuell (die Serie übernimmt das). //================================================== double tmp[1]; if(CopyBuffer(g_bb_handle, BASE_LINE, 0, 1, tmp) > 0) MiddleBuffer[0] = tmp[0]; if(CopyBuffer(g_bb_handle, UPPER_BAND, 0, 1, tmp) > 0) UpperBuffer[0] = tmp[0]; if(CopyBuffer(g_bb_handle, LOWER_BAND, 0, 1, tmp) > 0) LowerBuffer[0] = tmp[0]; return rates_total; } return rates_total; } //+------------------------------------------------------------------+ bool FillArraysFromBuffers( double &base_values [], // MiddleBuffer double &upper_values [], // ObererPuffer double &lower_values [], // UntererPuffer int shift, // shift = 0 → echtzeit int ind_handle, int amount ) { // ANMERKUNG: // Derzeit nicht verwendet. // Wie geplant für zukünftige Helfer / EA-Logik aufbewahrt. ResetLastError(); if(CopyBuffer(ind_handle, BASE_LINE, -shift, amount, base_values) < 0) return false; if(CopyBuffer(ind_handle, UPPER_BAND, -shift, amount, upper_values) < 0) return false; if(CopyBuffer(ind_handle, LOWER_BAND, -shift, amount, lower_values) < 0) return false; return true; }Sehr einfach möchte ich nur ermöglichen, dass der Benutzer einzelne Linien wie BASE_LINE,UPPER_BAND,LOWER_BAND und Custom Farbe nuranzeigen oder ausblenden .
Problem 1 ist:
Sie können in Bild anhängen sehen, ich weiß nicht, warum ich grün unter Chart haben.
Dateien:
Problem_1.jpg
217 kb
Nguyen Tuấn Anh # :
Karos.
Ich möchte einen persönlichen Indikator auf Basis des iBand erstellen.
Depois de muita pesquisa, decidi postar aqui, talvez alguém possa me ajudar.
Aqui está o indicador completo. Ganz einfach, ich möchte, dass der Benutzer einzelne Linien, wie BASE_LINE, UPPER_BAND, LOWER_BAND und nur eine persönliche Linie anzeigen kann .
O problema 1 é:
Como você pode ver na imagem em anexo, não sei por que há uma área verde embaixo do gráfico.
Diese grünen Linien sind die Lautstärkeanzeige. Um sie zu deaktivieren, müssen Sie die Diagrammeigenschaften öffnen und den Lautstärke-Indikator ausschalten. Oder setzen Sie einfach die Volumenfarbe auf CL_NONE, damit diese grünen Linien verschwinden.
Karos.
Ich möchte einen persönlichen Indikator auf Basis des iBand erstellen.
Depois de muita pesquisa, decidi postar aqui, talvez alguém possa me ajudar.
Aqui está o indicador completo. Ganz einfach, ich möchte, dass der Benutzer einzelne Linien, wie BASE_LINE, UPPER_BAND, LOWER_BAND und nur eine persönliche Linie anzeigen kann .
O problema 1 é:
Como você pode ver na imagem em anexo, não sei por que há uma área verde embaixo do gráfico.
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Neuer Artikel Von der Grundstufe bis zur Mittelstufe: Indikator (III) :
Im vorherigen Artikel „Vom Anfänger zur Mittelstufe: Indikator (II)“ haben wir viel gelernt, denn es wurde gezeigt, wie man einen gleitenden Durchschnitt auf sehr einfache, praktische und voll funktionsfähige Weise implementiert. Das Gezeigte kann jedoch nur als kurze Einführung in die Welt der MQL5-Programmierung betrachtet werden, da das Material recht grundlegend, einfach und überschaubar ist. Aber wir können noch viel mehr tun.
Bemühen Sie sich also, die hier vorgestellten Konzepte zu verstehen. Kopieren Sie nicht einfach den Code, und denken Sie nicht, dass, wenn Sie es nicht können, es auch niemand anderes kann. Das Verständnis des Konzepts ist wichtiger als das Verständnis des Codes selbst, da der Code je nach Autor variieren kann, während das Konzept konstant bleibt. Wir werden mit etwas sehr Einfachem beginnen, denn was Sie sehen werden, kann sehr komplex werden, wenn wir plötzlich bestimmte Funktionen anwenden.
Autor: CODE X