MetaTrader5
Stunden-Puffer für Datenanalyse im MetaTrader 5
Zweck Mit diesem einfachen Indikator kannst du Daten für dein Modellierungsprojekt sammeln. Zeitdummy-Variablen sind in der ökonomischen Modellierung oft gefragt. Der folgende Indikator bietet dir für jede Stunde einen binären Puffer als Array. Ein abschließendes Array speichert die jeweilige Stunde. Wenn du beispielsweise Daten von anderen Indikatoren in eine CSV-Datei exportierst, ermöglicht dir dieser Indikator, Dummy-Spalten für die gesammelte Stunde als zusätzliche Daten zu erstellen. Dies ist ein einfacher Code für alle, die Daten sammeln, z. B. für ML-Zwecke. Du erhältst eine fertige Dummy-Variable (Puffer 0 bis 23) oder eine Stundenvariable (Puffer 24) zur Verwendung in deinen Modellen. Durch den Code gehen Wir beginnen mit der Deklaration der Puffer- und Plotnummer als 25: #property indicator_chart_window
#property indicator_buffers 25
#property indicator_plots 25 Puffer-Beschriftung Die Pufferbeschriftungen für das Datenfenster wurden festgelegt: #property indicator_label1 "Stunde 00"
#property indicator_label2 "Stunde 01"
#property indicator_label3 "Stunde 02"
#property indicator_label4 "Stunde 03"
#property indicator_label5 "Stunde 04"
#property indicator_label6 "Stunde 05"
#property indicator_label7 "Stunde 06"
#property indicator_label8 "Stunde 07"
#property indicator_label9 "Stunde 08"
#property indicator_label10 "Stunde 09"
#property indicator_label11 "Stunde 10"
#property indicator_label12 "Stunde 11"
#property indicator_label13 "Stunde 12"
#property indicator_label14 "Stunde 13"
#property indicator_label15 "Stunde 14"
#property indicator_label16 "Stunde 15"
#property indicator_label17 "Stunde 16"
#property indicator_label18 "Stunde 17"
#property indicator_label19 "Stunde 18"
#property indicator_label20 "Stunde 19"
#property indicator_label21 "Stunde 20"
#property indicator_label22 "Stunde 21"
#property indicator_label23 "Stunde 22"
#property indicator_label24 "Stunde 23"
#property indicator_label25 "Stunde" Puffer-Deklarationen Hier haben wir die Puffer sowie eine Ganzzahlvariable für die aktuelle Stunde des Tages deklariert, 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; Indexierung und Zeichnen der Plots Wir setzen alle Puffer als Datenindex und deaktivieren das Plotten in einer Schleife. Leider gab es einen Fehler, als ich versuchte, die Indizes mit einer Schleife zu setzen. Daher musste ich das manuell machen, aber das funktioniert gut für PlotIndexSetInteger. // Puffer zuweisen, vom Chart 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-Funktion und Programmablauf Hier setzen wir alle Puffer zurück und ändern nur den Puffer, der zur aktuellen Stunde passt. if(rates_total 0 ? prev_calculated - 1 : 0);
for(int i = start; i < rates_total; i++) {
// Berechne die Stunde (0..23) für Balken i
bar_hour = (int)((time[i] % 86400) / 3600);
// 1) Setze ALLE 24 Puffer für Balken i auf 0
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) Setze 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("Die Stunde ist: ", localHourText);
}
// Rückgabe der Anzahl der bearbeiteten Balken
return(rates_total); Funktion zur Verbesserung des Kommentars Und zu guter Letzt, ein Programm für einen Kommentar: Das ist in der Tat ein Debugging-Check, aber ich habe die Kommentarfunktion beibehalten. string HourToText(int bh) {
string TextHour;
switch(bh) {
case 0: TextHour = "12 Uhr nachts"; break;
case 1: TextHour = "1 Uhr morgens"; break;
case 2: TextHour = "2 Uhr morgens"; break;
case 3: TextHour = "3 Uhr morgens"; break;
case 4: TextHour = "4 Uhr morgens"; break;
case 5: TextHour = "5 Uhr morgens"; break;
case 6: TextHour = "6 Uhr morgens"; break;
case 7: TextHour = "7 Uhr morgens"; break;
case 8: TextHour = "8 Uhr morgens"; break;
case 9: TextHour = "9 Uhr morgens"; break;
case 10: TextHour = "10 Uhr morgens"; break;
case 11: TextHour = "11 Uhr morgens"; break;
case 12: TextHour = "12 Uhr mittags"; break;
case 13: TextHour = "1 Uhr nachmittags"; break;
case 14: TextHour = "2 Uhr nachmittags"; break;
case 15: TextHour = "3 Uhr nachmittags"; break;
case 16: TextHour = "4 Uhr nachmittags"; break;
case 17: TextHour = "5 Uhr nachmittags"; break;
case 18: TextHour = "6 Uhr nachmittags"; break;
case 19: TextHour = "7 Uhr nachmittags"; break;
case 20: TextHour = "8 Uhr abends"; break;
case 21: TextHour = "9 Uhr abends"; break;
case 22: TextHour = "10 Uhr abends"; break;
case 23: TextHour = "11 Uhr abends"; break;
default: TextHour = "Unbekannt"; break;
}
return TextHour;
} Beachte, dass dies derzeit nur im Datenfenster angezeigt wird. Frohe Weihnachten und einen guten Rutsch ins Jahr 2025!
2024.12.25