Unisciti alla nostra fan page
Buffers for each hour (binary) and an hour buffer from 0-23 - for data collection purposes - indicatore per MetaTrader 5
- Visualizzazioni:
- 74
- Valutazioni:
- Pubblicato:
-
Hai bisogno di un robot o indicatore basato su questo codice? Ordinalo su Freelance Vai a Freelance
Scopo
Gli utenti possono raccogliere dati per la modellazione. Le variabili temporali sono spesso utilizzate nella modellazione economica. Il semplice indicatore sottostante, che può essere facilmente ampliato, fornisce ogni ora come vettore di array binario di buffer. Un vettore buffer array finale memorizza l'ora stessa.
Se i dati di altri indicatori vengono raccolti in un CSV, ad esempio utilizzando una funzione CopyBuffer, questo indicatore consente di inserire colonne fittizie per l'ora raccolta come dati aggiuntivi.
- Si tratta di un codice semplice per coloro che raccolgono dati, ad esempio per scopi di ML, in modo da poter disporre di una variabile dummy (buffer da 0 a 23) o di una variabile oraria (buffer 24) pronta per l'uso nella modellazione.
Passaggio del codice
- Iniziare dichiarando il numero di buffer e il numero di plot come 25:
#property indicator_chart_window #property indicator_buffers 25 #property indicator_plots 25
Etichettatura del buffer
- Delineare le etichette dei buffer per la finestra dei dati:
#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"
Dichiarazioni dei buffer
- Si è proceduto a dichiarare i buffer e anche una variabile intera per l'ora del giorno che viene calcolata in seguito.
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 grafico
Impostare l'indice per tutti i buffer come dati e disattivare il disegno dei grafici utilizzando un ciclo (se si cerca di eseguire l'indicizzazione con un ciclo, viene visualizzato un errore che indica che non è possibile passare, ad esempio, hourBuffer[q] attraverso SetIndexBuffer, quindi si procede uno alla volta; ma il ciclo sembra funzionare per PlotIndexSetInteger).
// Assegnare i buffer all'indice, nasconderli dal grafico e mostrarli nella finestra dei dati. 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); }
Loop e programma della funzione OnCalculate
- Passiamo quindi alla funzione OnCalculate:
- Qui impostiamo tutti i buffer a zero e portiamo a uno solo quello corrispondente all'ora corrente. È possibile che si ottenga un guadagno di efficienza in questo caso, ma lo vedremo più avanti.
if(rates_total <= 0) return(0); // Ricalcoliamo dalla prima barra non elaborata int start = (prev_calculated > 0 ? prev_calculated - 1 : 0); for(int i = start; i < rates_total; i++) { // Calcolo dell'ora (0...23) per la barra i bar_hour = (int)((time[i] % 86400) / 3600); // 1) Impostare TUTTI i 24 buffer per la barra i su 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) Ora impostare SOLO il buffer di corrispondenza su 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); } // Restituzione del numero di barre elaborate return(rates_total);
Funzione per aggiungere sapore al commento
- Infine, un programma per un commento:
- Si tratta in effetti di un controllo di debug, ma ho lasciato il commento.
string HourToText(int bh) { string TextHour; switch(bh) { case 0: TextHour = "12 am"; // ora di mezzanotte in formato 12 ore 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"; // mezzogiorno in formato 12 ore 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: // Solo nel caso in cui 'bh' sia fuori dall'intervallo (0..23) TextHour = "Unknown"; break; } return TextHour;
Si noti che al momento viene visualizzato solo attraverso la finestra dei dati.
Buon Natale e buon anno 2025 a tutti.
Tradotto dall’inglese da MetaQuotes Ltd.
Codice originale https://www.mql5.com/en/code/54446
2 Moving Averages with Bollinger Bands
"2 Moving Averages with Bollinger Bands" è un indicatore MT5 personalizzato che combina due medie mobili configurabili e bande di Bollinger opzionali. Genera frecce di acquisto e di vendita in tempo reale quando si verificano incroci, con avvisi opzionali, suoni e notifiche via e-mail. Adatto a tutti i timeframe e simboli
Equazione della camarilla
Sistema di livelli dell'equazione Camarilla per la barra corrente.
Camarilla_Full
Sistema di livelli Camarilla Equation per tutti i bar.
JFatlSpeed
Indicatore del tasso di variazione del trend con ritardo minimo.
