und werden Sie Mitglied unserer Fangruppe
Veröffentliche einen Link auf das Skript, damit die anderen ihn auch nutzen können
Bewerten Sie es im Terminal MetaTrader 5

Buffers for each hour (binary) and an hour buffer from 0-23 - for data collection purposes - Indikator für den MetaTrader 5
- Ansichten:
- 99
- Rating:
- Veröffentlicht:
-
Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance
Zweck
Nutzer können Daten für die Modellierung sammeln. Zeitdummies werden häufig in der Wirtschaftsmodellierung verwendet. Der nachstehende einfache Indikator, der leicht erweitert werden kann, stellt jede Stunde als binären Pufferarray-Vektor bereit. Ein letzter Puffer-Array-Vektor speichert die Stunde selbst.
Wenn Daten von anderen Indikatoren in einer CSV-Datei gesammelt werden, z. B. mit einer CopyBuffer-Funktion, ermöglicht dieser Indikator Dummy-Spalten für die Stunde, die als zusätzliche Daten gesammelt werden.
- Dies ist ein einfacher Code für diejenigen, die Daten sammeln, z. B. für ML-Zwecke, so dass Sie eine fertige Dummy-Variable (Puffer 0 bis 23) oder Stundenvariable (Puffer 24) für die Verwendung in der Modellierung haben können.
Gehen Sie durch den Code
- Zunächst werden Puffernummer und Plotnummer als 25 deklariert:
#property indicator_chart_window #property indicator_buffers 25 #property indicator_plots 25
Pufferbeschriftung
- Abgrenzung der Pufferbeschriftungen für das Datenfenster:
#property indicator_label1 "Hour 00" #property indicator_label2 "Hour 01" #property indicator_label3 "Hour 02" #property indicator_label4 "Hour 03" #property indicator_label5 "Hour 04" #property indicator_label6 "Hour 05" #property indicator_label7 "Hour 06" #property indicator_label8 "Hour 07" #property indicator_label9 "Hour 08" #property indicator_label10 "Hour 09" #property indicator_label11 "Hour 10" #property indicator_label12 "Hour 11" #property indicator_label13 "Hour 12" #property indicator_label14 "Hour 13" #property indicator_label15 "Hour 14" #property indicator_label16 "Hour 15" #property indicator_label17 "Hour 16" #property indicator_label18 "Hour 17" #property indicator_label19 "Hour 18" #property indicator_label20 "Hour 19" #property indicator_label21 "Hour 20" #property indicator_label22 "Hour 21" #property indicator_label23 "Hour 22" #property indicator_label24 "Hour 23" #property indicator_label25 "Hour"
Puffer-Deklarationen
- Deklarieren der Puffer und einer Integer-Variablen für die Stunde des Tages, die später berechnet wird.
double hourBuffer0[]; double hourBuffer1[]; double hourBuffer2[]; double hourBuffer3[]; double hourBuffer4[]; double hourBuffer5[]; double hourBuffer6[]; double hourBuffer7[]; double hourBuffer8[]; double hourBuffer9[]; double hourBuffer10[]; double hourBuffer11[]; double hourBuffer12[]; double hourBuffer13[]; double hourBuffer14[]; double hourBuffer15[]; double hourBuffer16[]; double hourBuffer17[]; double hourBuffer18[]; double hourBuffer19[]; double hourBuffer20[]; double hourBuffer21[]; double hourBuffer22[]; double hourBuffer23[]; double hourBuffer[]; int bar_hour;
Indizierung und Plot-Zeichnung
Setzen des Indexes für alle Puffer als Daten und Ausschalten des Plots mit Hilfe einer Schleife (der Versuch, die Indizierung mit einer Schleife vorzunehmen, führte zu der Fehlermeldung, dass man z.B. hourBuffer[q] nicht durch SetIndexBuffer leiten kann, daher wurde dies einzeln durchgeführt; aber die Schleife scheint für PlotIndexSetInteger zu funktionieren, was hilfreich ist).
// Puffer dem Index zuweisen, aus dem Diagramm ausblenden, im Datenfenster anzeigen SetIndexBuffer(0, hourBuffer0, INDICATOR_DATA); SetIndexBuffer(1, hourBuffer1, INDICATOR_DATA); SetIndexBuffer(2, hourBuffer2, INDICATOR_DATA); SetIndexBuffer(3, hourBuffer3, INDICATOR_DATA); SetIndexBuffer(4, hourBuffer4, INDICATOR_DATA); SetIndexBuffer(5, hourBuffer5, INDICATOR_DATA); SetIndexBuffer(6, hourBuffer6, INDICATOR_DATA); SetIndexBuffer(7, hourBuffer7, INDICATOR_DATA); SetIndexBuffer(8, hourBuffer8, INDICATOR_DATA); SetIndexBuffer(9, hourBuffer9, INDICATOR_DATA); SetIndexBuffer(10, hourBuffer10, INDICATOR_DATA); SetIndexBuffer(11, hourBuffer11, INDICATOR_DATA); SetIndexBuffer(12, hourBuffer12, INDICATOR_DATA); SetIndexBuffer(13, hourBuffer13, INDICATOR_DATA); SetIndexBuffer(14, hourBuffer14, INDICATOR_DATA); SetIndexBuffer(15, hourBuffer15, INDICATOR_DATA); SetIndexBuffer(16, hourBuffer16, INDICATOR_DATA); SetIndexBuffer(17, hourBuffer17, INDICATOR_DATA); SetIndexBuffer(18, hourBuffer18, INDICATOR_DATA); SetIndexBuffer(19, hourBuffer19, INDICATOR_DATA); SetIndexBuffer(20, hourBuffer20, INDICATOR_DATA); SetIndexBuffer(21, hourBuffer21, INDICATOR_DATA); SetIndexBuffer(22, hourBuffer22, INDICATOR_DATA); SetIndexBuffer(23, hourBuffer23, INDICATOR_DATA); SetIndexBuffer(24, hourBuffer, INDICATOR_DATA); for(int i = 0; i < 24; i++) { PlotIndexSetInteger(i, PLOT_DRAW_TYPE, DRAW_NONE); PlotIndexSetInteger(i, PLOT_SHOW_DATA, true); } return(INIT_SUCCEEDED); }
OnCalculate Funktionsschleifen und Programm
- Dann gehen wir zur Funktion OnCalculate über:
- Hier setzen wir alle Puffer auf Null zurück und ändern nur den Puffer für die aktuelle Stunde auf Eins. Möglicherweise lässt sich hier ein Effizienzgewinn erzielen, aber dazu später.
if(rates_total <= 0) return(0); // Wir rechnen ab dem ersten unbearbeiteten Takt neu int start = (prev_calculated > 0 ? prev_calculated - 1 : 0); for(int i = start; i < rates_total; i++) { // Berechnung der Stunde (0..23) für Takt i bar_hour = (int)((time[i] % 86400) / 3600); // 1) ALLE 24 Puffer für Takt i auf 0 setzen hourBuffer0[i] = 0.0; hourBuffer1[i] = 0.0; hourBuffer2[i] = 0.0; hourBuffer3[i] = 0.0; hourBuffer4[i] = 0.0; hourBuffer5[i] = 0.0; hourBuffer6[i] = 0.0; hourBuffer7[i] = 0.0; hourBuffer8[i] = 0.0; hourBuffer9[i] = 0.0; hourBuffer10[i] = 0.0; hourBuffer11[i] = 0.0; hourBuffer12[i] = 0.0; hourBuffer13[i] = 0.0; hourBuffer14[i] = 0.0; hourBuffer15[i] = 0.0; hourBuffer16[i] = 0.0; hourBuffer17[i] = 0.0; hourBuffer18[i] = 0.0; hourBuffer19[i] = 0.0; hourBuffer20[i] = 0.0; hourBuffer21[i] = 0.0; hourBuffer22[i] = 0.0; hourBuffer23[i] = 0.0; hourBuffer[i] = EMPTY_VALUE; // 2) Setzen Sie nun NUR den passenden Puffer auf 1 switch (bar_hour) { case 0: hourBuffer0[i] = 1.0; hourBuffer[i] = bar_hour; break; case 1: hourBuffer1[i] = 1.0; hourBuffer[i] = bar_hour; break; case 2: hourBuffer2[i] = 1.0; hourBuffer[i] = bar_hour; break; case 3: hourBuffer3[i] = 1.0; hourBuffer[i] = bar_hour; break; case 4: hourBuffer4[i] = 1.0; hourBuffer[i] = bar_hour; break; case 5: hourBuffer5[i] = 1.0; hourBuffer[i] = bar_hour; break; case 6: hourBuffer6[i] = 1.0; hourBuffer[i] = bar_hour; break; case 7: hourBuffer7[i] = 1.0; hourBuffer[i] = bar_hour; break; case 8: hourBuffer8[i] = 1.0; hourBuffer[i] = bar_hour; break; case 9: hourBuffer9[i] = 1.0; hourBuffer[i] = bar_hour; break; case 10: hourBuffer10[i] = 1.0; hourBuffer[i] = bar_hour; break; case 11: hourBuffer11[i] = 1.0; hourBuffer[i] = bar_hour; break; case 12: hourBuffer12[i] = 1.0; hourBuffer[i] = bar_hour; break; case 13: hourBuffer13[i] = 1.0; hourBuffer[i] = bar_hour; break; case 14: hourBuffer14[i] = 1.0; hourBuffer[i] = bar_hour; break; case 15: hourBuffer15[i] = 1.0; hourBuffer[i] = bar_hour; break; case 16: hourBuffer16[i] = 1.0; hourBuffer[i] = bar_hour; break; case 17: hourBuffer17[i] = 1.0; hourBuffer[i] = bar_hour; break; case 18: hourBuffer18[i] = 1.0; hourBuffer[i] = bar_hour; break; case 19: hourBuffer19[i] = 1.0; hourBuffer[i] = bar_hour; break; case 20: hourBuffer20[i] = 1.0; hourBuffer[i] = bar_hour; break; case 21: hourBuffer21[i] = 1.0; hourBuffer[i] = bar_hour; break; case 22: hourBuffer22[i] = 1.0; hourBuffer[i] = bar_hour; break; case 23: hourBuffer23[i] = 1.0; hourBuffer[i] = bar_hour; break; } string localHourText = HourToText(bar_hour); Comment("The hour is: ", localHourText); } // Rückgabe der Anzahl der verarbeiteten Takte return(rates_total);
Funktion zum Aufpeppen des Kommentars
- Und zu guter Letzt noch ein Programm für einen Kommentar:
- Dies ist eigentlich ein Debugging-Check, aber ich habe die Kommentierung drin gelassen.
string HourToText(int bh) { string TextHour; switch(bh) { case 0: TextHour = "12 am"; // Mitternachtsstunde im 12-Stunden-Format break; case 1: TextHour = "1 am"; break; case 2: TextHour = "2 am"; break; case 3: TextHour = "3 am"; break; case 4: TextHour = "4 am"; break; case 5: TextHour = "5 am"; break; case 6: TextHour = "6 am"; break; case 7: TextHour = "7 am"; break; case 8: TextHour = "8 am"; break; case 9: TextHour = "9 am"; break; case 10: TextHour = "10 am"; break; case 11: TextHour = "11 am"; break; case 12: TextHour = "12 pm"; // Mittagsstunde im 12-Stunden-Format break; case 13: TextHour = "1 pm"; break; case 14: TextHour = "2 pm"; break; case 15: TextHour = "3 pm"; break; case 16: TextHour = "4 pm"; break; case 17: TextHour = "5 pm"; break; case 18: TextHour = "6 pm"; break; case 19: TextHour = "7 pm"; break; case 20: TextHour = "8 pm"; break; case 21: TextHour = "9 pm"; break; case 22: TextHour = "10 pm"; break; case 23: TextHour = "11 pm"; break; default: // Nur für den Fall, dass 'bh' außerhalb des Bereichs liegt (0..23) TextHour = "Unknown"; break; } return TextHour;
Beachten Sie, dass dies derzeit nur über das Datenfenster angezeigt wird.
Frohe Weihnachten und ein gutes neues Jahr 2025.
Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/en/code/54446

"2 Moving Averages with Bollinger Bands" ist ein benutzerdefinierter MT5-Indikator, der zwei konfigurierbare gleitende Durchschnitte und optionale Bollinger-Bänder kombiniert. Er generiert Kauf- und Verkaufspfeile in Echtzeit, wenn Überschneidungen auftreten, mit optionalen Warnungen, Ton und E-Mail-Benachrichtigungen. Geeignet für alle Timeframes und Symbole

Kopieren Sie diese in jedem EA Sie sind damit beschäftigt, Codierung und Sie "ll haben eine trailing sl die einzigen Dinge, die Sie brauchen, um zu ändern wäre wahrscheinlich InpMagic für Ihre magische Zahl oder Sie könnten nur kopieren Sie meinen Code, wie es ist, Denken Sie daran, COrderinfo ord hinzufügen; und CPositionInfo pos;

Der Profit Maximiser (PMax) Indikator ist ein Indikator, der durch die Integration des gleitenden Durchschnitts des Supertrend Indikators erstellt wurde.

Schnittstelle zur Implementierung der asynchronen Ausführung von Algorithmen