초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 375

 
Tapochun :

1. 매일 양초의 시작 시간을 결정하십시오.

2. 필요한 시간대 에 막대 수를 결정합니다 (15분마다 하루의 극한값을 확인하려는 경우 - M15 막대).

3. 숫자 막대에 대한 높은 데이터를 가져옵니다.

3. 루프에서 모든 높은 막대 값을 원하는 데이 캔들에 대한 dayHigh 변수와 비교합니다(초기 dayHigh = 0).

4. high > dayHigh인 경우 - dayHigh 변수에 새 값을 저장합니다.

이해가 됩니다. 감사합니다. 하지만 지금은 어렵습니다... 아니면 포인트 2, 각 TF에 대해 이 계산을 수행하고 촛불의 수를 찾기 위해 범위로 몰아야 합니까?

과거 초의 수를 결정하지 않고 현재 기간의 날짜를 찾아 해당 날짜의 모든 값을 정렬할 수 없습니까?

 
-Aleks- :

이해가 됩니다. 감사합니다. 하지만 지금은 어렵습니다... 아니면 포인트 2, 각 TF에 대해 이 계산을 수행하고 촛불의 수를 찾기 위해 범위로 몰아야 합니까?

과거 초의 수를 결정하지 않고 현재 기간의 날짜를 찾아 해당 날짜의 모든 값을 정렬할 수 없습니까?

하루 에 막대의 수 는 쉽게 결정할 수 있습니다. 예를 들어 15분 차트의 경우. 하루의 분 수를 15로 나눕니다(1440/15 = 96바 또는 그렇지 않으면 PERIOD_D1/PERIOD_M15 = 96).
 
Vitalii Ananev :
하루 에 막대의 수 는 쉽게 결정할 수 있습니다. 예를 들어 15분 차트의 경우. 하루의 분 수를 15로 나눕니다(1440/15 = 96바 또는 그렇지 않으면 PERIOD_D1/PERIOD_M15 = 96).
당신은 그렇게 해서는 안됩니다! TF에서 주어진 날짜의 막대 수가 동일하다는 사실을 결코 사실로 받아들일 수 없습니다!
 
Vitalii Ananev :
하루 에 막대의 수 는 쉽게 결정할 수 있습니다. 예를 들어 15분 차트의 경우. 하루의 분 수를 15로 나눕니다(1440/15 = 96바 또는 그렇지 않으면 PERIOD_D1/PERIOD_M15 = 96).

예, 이것은 수학적으로 이해할 수 있지만 어떻게 기능합니까? 이것이 질문입니다! Time을 통해 현재 시간을 얻고 다음과 같이 가정 해 봅시다.

나는 새로운 날이 도착하면 재설정되고 하루 최대값을 재설정하고 그 전에 각 막대를 비교하기 전에 새 막대를 사용하여 각 TF에 대한 카운터를 만드는 것을 봅니다. 하지만 프로그래밍하는 방법은 무엇입니까?

 
Tapochun :
당신은 그것을 해서는 안됩니다! TF에서 주어진 날짜의 막대 수가 동일하다는 사실을 결코 사실로 받아들일 수 없습니다!

예, 예를 들어 금요일은 더 일찍 마감될 수 있습니다...

따라서 날짜를 결정하고 촛불의 수를 고려하지 않고 하루의 최대값을 검색하기 위해 배열을 가져와야 합니다. 어떻게 해야 할까요?

 
-Aleks- :

예, 이것은 수학적으로 이해할 수 있지만 어떻게 기능합니까? 이것이 질문입니다! Time을 통해 현재 시간을 얻고 다음과 같이 가정 해 봅시다.

나는 새로운 날이 도착하면 재설정되고 하루 최대값을 재설정하고 그 전에 각 막대를 비교하기 전에 새 막대를 사용하여 각 TF에 대한 카운터를 만드는 것을 봅니다. 하지만 프로그래밍하는 방법은 무엇입니까?

이것이 하루의 시작에 해당하는 첫 번째 막대를 찾는 방법입니다.

 datetime BeginDay = iTime( Symbol (), PERIOD_D1 , iBarShift( Symbol (), PERIOD_D1 , Time[NumberBar]));  

 int StartBar = iBarShift( Symbol (), 0 , BeginDay);
 
Vitalii Ananev :

이것이 하루의 시작에 해당하는 첫 번째 막대를 찾는 방법입니다.

예를 들어 다음 알고리즘을 얻습니다.

우리는 첫 번째 막대를 찾았습니다. 이 막대가 형성되었을 때 이 막대의 최고값은 오늘의 최고값이 될 것입니다. 다음으로 우리는 다음 막대를 가져와 이전 막대보다 높으면 고점을 확인합니다. 그러면 이것이 오늘의 새로운 최고점입니다. 그리고 오늘의 마지막 바까지 계속됩니다.

 
#property script_show_inputs
#property strict
//+------------------------------------------------------------------+
//| Входные параметры                                                |
//+------------------------------------------------------------------+
input ENUM_TIMEFRAMES inpUserTimeframe=PERIOD_M15;   // Пользовательский ТФ
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
// Определяем время открытия текущего дня
   datetime open_D1=iTime(_Symbol,PERIOD_D1,0);

// Определяем номер первого сформированного бара по пользовательскому ТФ за текущий день
   int last_utf = iBarShift( _Symbol, inpUserTimeframe, open_D1, true );
   if( last_utf == -1 )
     {
      Alert(EnumToString(inpUserTimeframe)+" ОШИБКА #",GetLastError(),": номер бара не определен! "+TimeToStr(open_D1));
      return;
     }

// Определяем максимум дня
   double dayHigh=0;
   double high;
   int highNum=0;

   for(int i=1; i<=last_utf; i++) // Цикл по сформированным свечам за текущий день
     {
      high = iHigh( _Symbol, inpUserTimeframe, i );   // Максимум на i свече
      if( high > dayHigh )                            // Если максимум дня превышен
        {
         dayHigh = high;                              // Запоминаем новый максимум
         highNum = i;                                 // Запоминаем номер свечи
        }
     }

   Alert(EnumToString(inpUserTimeframe)+": максимум дня = ",DoubleToString(dayHigh,_Digits)," обнаружен на свече #",highNum);
  }
파일:
toAleks.mq4  3 kb
 
Tapochun , Vitalii Ananev - 감사합니다! 이제 배운 것을 적용하려고 합니다.
 
Tapochun :
스크립트를 작성하지 않고 표시기를 볼 수 있습니까? 이 모든 시간 배열에 여전히 어려움이 있다는 것입니다 ... 예에서 배울 것입니다.
사유: