MetaTrader5
Menggunakan Buffer Jam dalam MetaTrader 5 untuk Pengumpulan Data Trading
Tujuan Bagi trader yang ingin melakukan pengolahan data, indikator sederhana ini dapat sangat membantu. Dengan memanfaatkan buffer jam sebagai array biner, Anda bisa mengumpulkan data untuk berbagai keperluan, seperti modeling ekonomi. Indikator ini juga memungkinkan Anda untuk menambahkan kolom dummy untuk jam yang sedang dikumpulkan saat menggunakan fungsi seperti CopyBuffer. Ini adalah kode sederhana yang memudahkan pengumpulan data, misalnya untuk tujuan Machine Learning, sehingga Anda memiliki variabel dummy siap pakai (buffer 0 hingga 23), atau variabel jam (buffer 24) untuk digunakan dalam modeling. Penjelasan Kode Dimulai dengan mendeklarasikan jumlah buffer dan jumlah plot sebanyak 25: #property indicator_chart_window
#property indicator_buffers 25
#property indicator_plots 25 Penamaan Buffer Mendefinisikan label buffer untuk jendela data: #property indicator_label1 "Jam 00"
#property indicator_label2 "Jam 01"
#property indicator_label3 "Jam 02"
#property indicator_label4 "Jam 03"
#property indicator_label5 "Jam 04"
#property indicator_label6 "Jam 05"
#property indicator_label7 "Jam 06"
#property indicator_label8 "Jam 07"
#property indicator_label9 "Jam 08"
#property indicator_label10 "Jam 09"
#property indicator_label11 "Jam 10"
#property indicator_label12 "Jam 11"
#property indicator_label13 "Jam 12"
#property indicator_label14 "Jam 13"
#property indicator_label15 "Jam 14"
#property indicator_label16 "Jam 15"
#property indicator_label17 "Jam 16"
#property indicator_label18 "Jam 17"
#property indicator_label19 "Jam 18"
#property indicator_label20 "Jam 19"
#property indicator_label21 "Jam 20"
#property indicator_label22 "Jam 21"
#property indicator_label23 "Jam 22"
#property indicator_label24 "Jam 23"
#property indicator_label25 "Jam" Deklarasi Buffer Kemudian mendeklarasikan buffer serta variabel integer untuk jam dalam sehari yang akan dihitung nanti. 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; Indeks dan Penggambaran Plot Set indeks untuk semua buffer sebagai data, dan matikan penggambaran menggunakan loop. (Mencoba melakukan pengindeksan dengan loop menyebabkan kesalahan karena Anda tidak dapat mengoper hourBuffer[q] melalui SetIndexBuffer, maka dilakukan satu per satu; tetapi looping tampaknya berhasil untuk PlotIndexSetInteger, yang sangat membantu). // Menetapkan buffer ke indeks, sembunyikan dari grafik, tampilkan di Jendela Data
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 Fungsi OnCalculate dan Program Selanjutnya kita beralih ke fungsi OnCalculate: Disini kita mengatur semua buffer kembali ke nol, dan hanya mengubah buffer yang sesuai dengan jam saat ini menjadi satu. Mungkin ada keuntungan efisiensi yang bisa didapatkan di sini, tetapi itu untuk nanti. if(rates_total 0 ? prev_calculated - 1 : 0);
for(int i = start; i < rates_total; i++)
{
// Hitung jam (0..23) untuk bar i
bar_hour = (int)((time[i] % 86400) / 3600);
// 1) Set SEMUA 24 buffer untuk bar i ke 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) Sekarang set HANYA buffer yang sesuai menjadi 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("Jam saat ini: ", localHourText);
}
// Mengembalikan jumlah bar yang diproses
return(rates_total);
} Fungsi untuk Menambahkan Rasa pada Komentar Dan yang terakhir, program untuk komentar: Ini pada dasarnya adalah pemeriksaan debugging tetapi saya tetap membiarkan komentar ini ada. string HourToText(int bh) {
string TextHour;
switch(bh)
{
case 0:
TextHour = "12 am"; // jam tengah malam dalam format 12 jam
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"; // jam siang dalam format 12 jam
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:
// Jika 'bh' di luar jangkauan (0..23)
TextHour = "Tidak Dikenal";
break;
}
return TextHour;
} Perhatikan bahwa ini hanya ditampilkan melalui jendela data saat ini. Selamat Natal dan Tahun Baru 2025 untuk semua!
2024.12.25