보조지표 게시글

메타트레이더 5를 위한 시간별 버퍼 인디케이터 설명

첨부파일
54446.zip (66.85 KB, 다운로드 0회)

목적

트레이더 여러분, 데이터 수집을 위해 시간별 버퍼를 활용해보세요. 경제 모델링에 자주 사용되는 시간 더미는 간단한 인디케이터로 구현할 수 있습니다. 아래 코드는 각 시간을 이진 배열로 제공하며, 마지막 배열은 현재 시간을 저장합니다.

예를 들어, 다른 인디케이터에서 데이터를 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년 새해를 기원합니다.

연관 포스트

댓글 (0)