목적
트레이더 여러분, 데이터 수집을 위해 시간별 버퍼를 활용해보세요. 경제 모델링에 자주 사용되는 시간 더미는 간단한 인디케이터로 구현할 수 있습니다. 아래 코드는 각 시간을 이진 배열로 제공하며, 마지막 배열은 현재 시간을 저장합니다.
예를 들어, 다른 인디케이터에서 데이터를 CSV로 수집할 때, 이 인디케이터는 수집 중인 시간에 대한 더미 열을 추가 데이터로 제공합니다.
- ML 목적의 데이터 수집을 위한 간단한 코드입니다. 0에서 23까지의 버퍼를 갖춘 더미 변수를 미리 만들어 사용할 수 있습니다.
코드 설명
- 버퍼 번호와 플롯 번호를 25로 선언합니다:
#property indicator_chart_window #property indicator_buffers 25 #property indicator_plots 25
버퍼 레이블 지정
- 데이터 창을 위한 버퍼 레이블을 정의합니다:
#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"
버퍼 선언
- 버퍼와 하루 시간에 대한 정수 변수를 선언합니다:
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;
인덱스 설정 및 플롯 그리기
모든 버퍼의 인덱스를 데이터로 설정하고, 플로팅을 비활성화합니다. 루프를 사용하여 인덱싱을 시도했지만 오류가 발생하여 하나씩 설정했습니다. 하지만 루프는 PlotIndexSetInteger에서 잘 작동합니다.
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); OnCalculate 함수 루프 및 프로그램
- 그 다음 OnCalculate 함수로 넘어갑니다:
- 모든 버퍼를 0으로 설정한 후 현재 시간에 해당하는 버퍼만 1로 변경합니다. 여기에서 효율성을 높일 수 있는 방법이 있을 수 있지만, 나중에 고려할 사항입니다.
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("The hour is: ", localHourText);
}
return(rates_total); 코멘트를 추가하는 기능
- 마지막으로 코멘트를 추가하는 프로그램입니다:
- 디버깅 체크와 같은 역할을 하지만 코멘트를 남겼습니다.
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 = "Unknown"; break;
}
return TextHour;
} 현재 데이터 창을 통해서만 표시됩니다.

모두들 메리 크리스마스와 행복한 2025년 새해를 기원합니다.