Indicateur de Buffers Horaires pour MetaTrader 5 : Collecte de Données Efficace

Mike 2024.12.25 07:05 71 0 0
Pièce jointe

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 

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 

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.

Liste
Commentaire 0