당사 팬 페이지에 가입하십시오
Buffers for each hour (binary) and an hour buffer from 0-23 - for data collection purposes - MetaTrader 5용 지표
- 조회수:
- 133
- 평가:
- 게시됨:
-
이 코드를 기반으로 한 로봇이나 지표가 필요하신가요? 프리랜스로 주문하세요 프리랜스로 이동
목적
사용자는 모델링을 위해 데이터를 수집할 수 있습니다. 타임 더미는 경제 모델링에서 자주 사용됩니다. 아래의 간단한 표시기는 쉽게 확장할 수 있으며, 각 시간을 이진 버퍼 배열 벡터로 제공합니다. 최종 버퍼 배열 벡터는 시간 자체를 저장합니다.
예를 들어 복사 버퍼 함수를 사용하여 다른 지표의 데이터를 CSV로 수집하는 경우, 이 지표는 수집 중인 시간에 대한 더미 열을 추가 데이터로 사용할 수 있습니다.
- 이 코드는 ML 등의 목적으로 데이터를 수집하는 사람들을 위한 간단한 코드로, 모델링에 사용할 더미 변수(버퍼 0~23) 또는 시간 변수(버퍼 24)를 미리 만들 수 있습니다.
코드 살펴보기
- 버퍼 번호와 플롯 번호를 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;
인덱싱 및 플롯 그리기
모든 버퍼에 대한 인덱스를 데이터로 설정하고 루프를 사용하여 플롯 그리기를 해제했습니다(루프를 사용하여 인덱싱을 시도하면 시간 버퍼[q]를 SetIndexBuffer로 전달할 수 없다는 오류가 발생하여 하나씩 수행했지만, 다행히 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 함수로 이동합니다:
- 여기서 모든 버퍼를 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++) { // 막대 i에 대한 시간(0..23)을 계산합니다. bar_hour = (int)((time[i] % 86400) / 3600); // 1) 바 i의 24개 버퍼를 모두 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) 이제 일치하는 버퍼만 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); } // 처리된 바 개수 반환 return(rates_total);
댓글에 풍미를 더하는 기능
- 마지막으로 댓글을 위한 프로그램입니다:
- 이것은 사실상 디버깅 검사이지만 댓글을 남겨 두었습니다.
string HourToText(int bh) { string TextHour; switch(bh) { case 0: TextHour = "12 am"; // 12시간 형식의 자정 시간 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"; // 12시간 형식의 정오 시간 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: // 'bh'가 범위를 벗어난 경우 (0..23) TextHour = "Unknown"; break; } return TextHour;
현재는 데이터 창을 통해서만 표시된다는 점에 유의하세요.
여러분 모두 메리 크리스마스와 2025년 새해 복 많이 받으세요.
MetaQuotes Ltd에서 영어로 번역함.
원본 코드: https://www.mql5.com/en/code/54446
2 Moving Averages with Bollinger Bands
"볼린저 밴드가 있는 2이동평균"은 구성 가능한 두 개의 이동평균과 옵션인 볼린저 밴드를 결합한 맞춤형 MT5 인디케이터입니다. 크로스오버가 발생하면 실시간 매수 및 매도 화살표가 생성되며 경고, 소리 및 이메일 알림(선택 사항)이 제공됩니다. 모든 차트주기와 심볼에 적합
카마릴라 방정식
현재 바의 카마릴라 방정식 레벨 시스템.
