거래 로봇을 무료로 다운로드 하는 법을 시청해보세요
당사를 Facebook에서 찾아주십시오!
당사 팬 페이지에 가입하십시오
스크립트가 흥미로우신가요?
그렇다면 링크 to it -
하셔서 다른 이들이 평가할 수 있도록 해보세요
스크립트가 마음에 드시나요? MetaTrader 5 터미널에서 시도해보십시오
지표

Buffers for each hour (binary) and an hour buffer from 0-23 - for data collection purposes - MetaTrader 5용 지표

조회수:
133
평가:
(5)
게시됨:
MQL5 프리랜스 이 코드를 기반으로 한 로봇이나 지표가 필요하신가요? 프리랜스로 주문하세요 프리랜스로 이동

목적

사용자는 모델링을 위해 데이터를 수집할 수 있습니다. 타임 더미는 경제 모델링에서 자주 사용됩니다. 아래의 간단한 표시기는 쉽게 확장할 수 있으며, 각 시간을 이진 버퍼 배열 벡터로 제공합니다. 최종 버퍼 배열 벡터는 시간 자체를 저장합니다.

예를 들어 복사 버퍼 함수를 사용하여 다른 지표의 데이터를 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 Moving Averages with Bollinger Bands

"볼린저 밴드가 있는 2이동평균"은 구성 가능한 두 개의 이동평균과 옵션인 볼린저 밴드를 결합한 맞춤형 MT5 인디케이터입니다. 크로스오버가 발생하면 실시간 매수 및 매도 화살표가 생성되며 경고, 소리 및 이메일 알림(선택 사항)이 제공됩니다. 모든 차트주기와 심볼에 적합

카마릴라 방정식 카마릴라 방정식

현재 바의 카마릴라 방정식 레벨 시스템.

카마릴라_풀 카마릴라_풀

모든 바의 카마릴라 방정식 레벨 시스템.

JFatlSpeed JFatlSpeed

지연이 최소화된 추세 변화율 표시기입니다.