Obiettivo
Molti trader, per migliorare le loro strategie, raccolgono dati per modelli di trading. Gli indicatori temporali sono strumenti utili in questo contesto. L'indicatore semplice che ti presento qui sotto crea un array binario per ogni ora, rendendo la raccolta di dati più efficiente. Inoltre, un array finale memorizza l'ora stessa.
Se stai raccogliendo dati da altri indicatori in un file CSV, ad esempio utilizzando la funzione CopyBuffer, questo indicatore ti consente di avere colonne aggiuntive per l'ora, facilitando ulteriormente l'analisi.
- Questo codice è perfetto per chi raccoglie dati, ad esempio per scopi di machine learning, fornendo variabili dummy pronte all'uso (buffer da 0 a 23) o una variabile ora (buffer 24) per il tuo modello.
Analisi del Codice
- Iniziamo dichiarando il numero di buffer e di plot a 25:
#property indicator_chart_window
#property indicator_buffers 25
#property indicator_plots 25
Etichettatura dei Buffer
- Definito le etichette dei buffer per la finestra dati:
#property indicator_label1 "Ora 00"
#property indicator_label2 "Ora 01"
#property indicator_label3 "Ora 02"
#property indicator_label4 "Ora 03"
#property indicator_label5 "Ora 04"
#property indicator_label6 "Ora 05"
#property indicator_label7 "Ora 06"
#property indicator_label8 "Ora 07"
#property indicator_label9 "Ora 08"
#property indicator_label10 "Ora 09"
#property indicator_label11 "Ora 10"
#property indicator_label12 "Ora 11"
#property indicator_label13 "Ora 12"
#property indicator_label14 "Ora 13"
#property indicator_label15 "Ora 14"
#property indicator_label16 "Ora 15"
#property indicator_label17 "Ora 16"
#property indicator_label18 "Ora 17"
#property indicator_label19 "Ora 18"
#property indicator_label20 "Ora 19"
#property indicator_label21 "Ora 20"
#property indicator_label22 "Ora 21"
#property indicator_label23 "Ora 22"
#property indicator_label24 "Ora 23"
#property indicator_label25 "Ora"
Dichiarazione dei Buffer
- Procediamo a dichiarare i buffer e una variabile intera per l'ora del giorno:
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;
Indicizzazione e Disegno del Plot
Impostiamo gli indici per tutti i buffer come dati e disattiviamo il plotting utilizzando un ciclo.
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);
}
Funzione OnCalculate e Programma
- Passiamo ora alla funzione OnCalculate:
- Qui impostiamo tutti i buffer a zero e cambiamo solo quello corrispondente all'ora attuale a uno.
if(rates_total <= 0)
return(0);
int start = (prev_calculated > 0 ? prev_calculated - 1 : 0);
for(int i = start; i < rates_total; i++) {
bar_hour = (int)((time[i] % 86400) / 3600);
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;
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'ora è: ", localHourText);
}
return(rates_total);
Funzione per Aggiungere Dettagli al Commento
- Infine, ecco una funzione per aggiungere dettagli al commento:
string HourToText(int bh) {
string TextHour;
switch(bh) {
case 0: TextHour = "12 am"; 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"; 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: TextHour = "Sconosciuto"; break;
}
return TextHour;
} Nota che questo indicatore visualizza solo attraverso la finestra dati al momento.

Buon Natale e Felice Anno Nuovo 2025 a tutti!
Post correlati
- Volatilità Stocastica: Indicatore per MetaTrader 5 da Utilizzare sul Grafico
- Notis: L'Indicatore per Misurare la Volatilità su MetaTrader 5
- Indicatore di Equità e Bilancio per MetaTrader 5: Monitoraggio della Tua Performance di Trading
- Utilità per Serie e Informazioni sulle Rate in MetaTrader 5
- Utilità per le Informazioni su Barre e Tassi per MetaTrader 5