MetaTrader5
Indicateur de Buffers Horaires pour MetaTrader 5 : Collecte de Données Efficace
Objectif Cet indicateur simple permet aux utilisateurs de collecter des données pour modéliser leurs analyses. Les variables temporelles sont souvent utilisées dans la modélisation économique. L'indicateur ci-dessous, facilement extensible, fournit chaque heure sous forme de tableau binaire. Un tableau final stocke l'heure elle-même. Si vous collectez des données d'autres indicateurs dans un fichier CSV, par exemple en utilisant la fonction CopyBuffer, cet indicateur permet d'ajouter des colonnes pour l'heure collectée comme données supplémentaires. C'est un code basique pour ceux qui collectent des données, par exemple pour du machine learning, afin d'avoir une variable binaire prête à l'emploi (buffers 0 à 23), ou une variable pour l'heure (buffer 24) pour l'utilisation en modélisation. Décomposition du Code On commence par déclarer le nombre de buffers et de graphiques comme étant 25 : #property indicator_chart_window
#property indicator_buffers 25
#property indicator_plots 25 Étiquetage des Buffers On a défini les étiquettes des buffers pour la fenêtre de données : #property indicator_label1 "Heure 00"
#property indicator_label2 "Heure 01"
#property indicator_label3 "Heure 02"
#property indicator_label4 "Heure 03"
#property indicator_label5 "Heure 04"
#property indicator_label6 "Heure 05"
#property indicator_label7 "Heure 06"
#property indicator_label8 "Heure 07"
#property indicator_label9 "Heure 08"
#property indicator_label10 "Heure 09"
#property indicator_label11 "Heure 10"
#property indicator_label12 "Heure 11"
#property indicator_label13 "Heure 12"
#property indicator_label14 "Heure 13"
#property indicator_label15 "Heure 14"
#property indicator_label16 "Heure 15"
#property indicator_label17 "Heure 16"
#property indicator_label18 "Heure 17"
#property indicator_label19 "Heure 18"
#property indicator_label20 "Heure 19"
#property indicator_label21 "Heure 20"
#property indicator_label22 "Heure 21"
#property indicator_label23 "Heure 22"
#property indicator_label24 "Heure 23"
#property indicator_label25 "Heure" Déclarations des Buffers On procède à la déclaration des buffers ainsi qu'à une variable entière pour l'heure du jour qui sera calculée plus tard. 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; Indexation et Dessin des Graphiques On définit l'index de tous les buffers comme données, et on désactive le dessin en utilisant une boucle. (Essayer de faire l'indexation avec une boucle a présenté une erreur, car on ne peut pas passer par exemple hourBuffer[q] à SetIndexBuffer, donc on fait cela un par un ; mais la boucle semble fonctionner pour PlotIndexSetInteger, ce qui est pratique). // Assigner les buffers à l'index, cacher du graphique, montrer dans la fenêtre de données
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); Boucles de Fonction OnCalculate et Programme Passons à la fonction OnCalculate : Ici, nous remettons tous les buffers à zéro et ne changeons que celui correspondant à l'heure actuelle à un. Il y a peut-être un gain d'efficacité à obtenir ici, mais on en reparlera plus tard. if(rates_total 0 ? prev_calculated - 1 : 0);
for(int i = start; i < rates_total; i++)
{
// Calculer l'heure (0..23) pour la barre i
bar_hour = (int)((time[i] % 86400) / 3600);
// 1) Mettre TOUTES les 24 buffers pour la barre i à 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) Maintenant, mettre SEULEMENT le buffer correspondant à 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("L'heure est : ", localHourText);
}
// Retourner le nombre de barres traitées
return(rates_total); Fonction pour ajouter du contexte au commentaire Et pour finir, un programme pour un commentaire : Ceci est en effet un contrôle de débogage, mais j'ai laissé le commentaire. string HourToText(int bh) {
string TextHour;
switch(bh)
{
case 0:
TextHour = "12 h"; // minuit
break;
case 1:
TextHour = "1 h";
break;
case 2:
TextHour = "2 h";
break;
case 3:
TextHour = "3 h";
break;
case 4:
TextHour = "4 h";
break;
case 5:
TextHour = "5 h";
break;
case 6:
TextHour = "6 h";
break;
case 7:
TextHour = "7 h";
break;
case 8:
TextHour = "8 h";
break;
case 9:
TextHour = "9 h";
break;
case 10:
TextHour = "10 h";
break;
case 11:
TextHour = "11 h";
break;
case 12:
TextHour = "12 h"; // midi
break;
case 13:
TextHour = "13 h";
break;
case 14:
TextHour = "14 h";
break;
case 15:
TextHour = "15 h";
break;
case 16:
TextHour = "16 h";
break;
case 17:
TextHour = "17 h";
break;
case 18:
TextHour = "18 h";
break;
case 19:
TextHour = "19 h";
break;
case 20:
TextHour = "20 h";
break;
case 21:
TextHour = "21 h";
break;
case 22:
TextHour = "22 h";
break;
case 23:
TextHour = "23 h";
break;
default:
// Juste au cas où 'bh' est hors limites (0..23)
TextHour = "Inconnu";
break;
}
return TextHour;
} Notez que cela s'affiche uniquement à travers la fenêtre de données pour le moment. Joyeux Noël et Bonne Année 2025 à tous.
2024.12.25