[SERVICE DESK] 타이머에서 시니어 TF의 시간을 가져오는 동안 오류가 발생했습니다! - 페이지 3

 
Vitaly Gorbunov :
그리고 내가 이해한 것처럼! 칠면조는 터미널과 함께 즉시 시작합니까? 그렇다면 확인하기 전에 IsConnected() 서버와 연결이 있는지 기다리십시오. 타이머가 매우 빠르기 때문에 동기화할 시간이 없습니다!

좋은 시도. 나는 이미 그것이 효과가 있을 것이라고 생각하기 시작했다. 하지만:

 2018.09 . 21 15 : 16 : 40.519 Custom indicator test_isNewDayInTimer_iBarShirt() EURGBP.e,M5: removed
2018.09 . 21 15 : 32 : 29.397 Custom indicator test_isNewDayInTimer_iBarShirt() EURGBP.e,M5: loaded successfully
2018.09 . 21 15 : 32 : 29.415 test_isNewDayInTimer_iBarShirt() EURGBP.e,M5: initialized
2018.09 . 21 15 : 32 : 29.508 test_isNewDayInTimer_iBarShirt() EURGBP.e,M5: OnTimer : Связь отсутствует!
2018.09 . 21 15 : 32 : 29.532 test_isNewDayInTimer_iBarShirt() EURGBP.e,M5: OnTimer : Связь отсутствует!
2018.09 . 21 15 : 32 : 29.557 test_isNewDayInTimer_iBarShirt() EURGBP.e,M5: OnTimer : Связь отсутствует!
2018.09 . 21 15 : 32 : 29.587 test_isNewDayInTimer_iBarShirt() EURGBP.e,M5: OnTimer : Связь отсутствует!
2018.09 . 21 15 : 32 : 29.620 test_isNewDayInTimer_iBarShirt() EURGBP.e,M5: OnTimer : Связь отсутствует!
2018.09 . 21 15 : 32 : 29.651 test_isNewDayInTimer_iBarShirt() EURGBP.e,M5: OnTimer : Связь отсутствует!
2018.09 . 21 15 : 32 : 29.683 test_isNewDayInTimer_iBarShirt() EURGBP.e,M5: OnTimer : Связь отсутствует!
2018.09 . 21 15 : 32 : 29.716 test_isNewDayInTimer_iBarShirt() EURGBP.e,M5: OnTimer : Связь отсутствует!
2018.09 . 21 15 : 32 : 29.743 test_isNewDayInTimer_iBarShirt() EURGBP.e,M5: OnTimer : Связь отсутствует!
2018.09 . 21 15 : 32 : 29.776 test_isNewDayInTimer_iBarShirt() EURGBP.e,M5: OnTimer : Связь отсутствует!
2018.09 . 21 15 : 32 : 29.807 test_isNewDayInTimer_iBarShirt() EURGBP.e,M5: OnTimer : Связь отсутствует!
2018.09 . 21 15 : 32 : 29.841 test_isNewDayInTimer_iBarShirt() EURGBP.e,M5: OnTimer : Связь отсутствует!
2018.09 . 21 15 : 32 : 29.872 test_isNewDayInTimer_iBarShirt() EURGBP.e,M5: OnTimer : Связь отсутствует!
2018.09 . 21 15 : 32 : 29.901 test_isNewDayInTimer_iBarShirt() EURGBP.e,M5: OnTimer : Связь отсутствует!
2018.09 . 21 15 : 32 : 29.935 test_isNewDayInTimer_iBarShirt() EURGBP.e,M5: OnTimer : Связь отсутствует!
2018.09 . 21 15 : 32 : 29.972 test_isNewDayInTimer_iBarShirt() EURGBP.e,M5: OnTimer : Связь отсутствует!
2018.09 . 21 15 : 32 : 29.996 test_isNewDayInTimer_iBarShirt() EURGBP.e,M5: OnTimer : Связь отсутствует!
2018.09 . 21 15 : 32 : 30.059 test_isNewDayInTimer_iBarShirt() EURGBP.e,M5: test_isNewDayInTimer_iBarShirt().mq4: Актуальное время открытия бара М 15 = 2018.09 . 21 13 : 15 . Ошибка # 0

이전 코드 에서 OnTimer() 함수를 다음 함수로 교체했습니다 .

 //+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer ()
  {
   if ( ! IsConnected () )
        {
         Print ( __FUNCTION__ , ": Связь отсутствует!" );
         return ;
        }
//--- Проверяем, записано ли время открытия текущего бара М15
   if (!CheckCurrentM15OpenTime())                         // Если время не записано
       return ;                                                 // Выходим
  }
 
Vitaly Gorbunov :

그리고 내가 이해한 것처럼! 칠면조는 터미널과 함께 즉시 시작합니까? 그렇다면 확인하기 전에 서버 IsConnected()와 연결이 있는지 기다리십시오. 타이머가 매우 빠르기 때문에 동기화할 시간이 없습니다!

아니면 이렇게 하세요

그러나 서버 시간과 현지 시간의 차이를 고려해야 합니다. 결과를 구독하십시오!

나는 확실히 목발을 짚지 않을 것입니다. 여기 언어에 명백한 오류가 있습니다! 개발자를 기다리는 중...

 

매우 흥미롭습니다. 이론적으로 작동해야 합니다. 그러나 다시 말하지만, 매우 빠른 타이머는 아마도 터미널이 따옴표 수락을 시작할 시간이 없을 것입니다. 생각해야 합니다. 그리고 아이디어를 테스트하기 위해 5초 동안 일반 타이머를 만든다면?

 
Vitaly Gorbunov :

매우 흥미롭습니다. 이론적으로 작동해야 합니다. 그러나 다시 말하지만, 매우 빠른 타이머는 아마도 터미널이 따옴표 수락을 시작할 시간이 없을 것입니다. 생각해야 합니다. 그리고 아이디어를 테스트하기 위해 5초 동안 일반 타이머를 만든다면?

그리고 아이디어를 테스트하기 위해 "조정"이 필요하지 않습니다. 실제 상황에서는 가장 빠른 타이머가 필요합니다.

 
Vitaly Gorbunov :

매우 흥미롭습니다. 이론적으로 작동해야 합니다.

항상 터미널에서 표시기를 실행하고 15분을 기다렸다가 결과에 따라 구독을 취소할 수 있습니다.

 

알겠습니다. 하지만 다른 할 일이 많습니다. 잠시 쉬는 대로 실험을 진행하겠습니다.

그리고 그것을 잡는 방법도 알고 있었던 것 같습니다.

 

이렇게 해보세요!

 //+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property version    "1.00"
#property strict
#property indicator_chart_window
datetime ChkTime;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
//--- Время открытия текущего часа, дня и недели
datetime _m15OpenTime= 0 ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//Сохраняем старое время  
   ChkTime= TimeCurrent ();
//--- Запускаем таймер
   if (! EventSetMillisecondTimer ( 20 ))
     {
       Print ( __FUNCTION__ , ": ОШИБКА #" , GetLastError (), ": таймер с частотой 20 ms не установлен!" );
       return ( INIT_FAILED );
     }
//--- Сбрасываем время открытия текущего бара м15
   _m15OpenTime= 0 ;
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {

   return ( rates_total );
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer ()
  {
   if (! IsConnected ())
     {
       Print ( __FUNCTION__ , ": Связь отсутствует!" );
       return ;
     }
//Если есть соединение проверяем что прошла синхронизация времни     
   if ( IsConnected () && ChkTime== TimeCurrent ())
     {
       return ;
     }
//--- Проверяем, записано ли время открытия текущего бара М15
   if (!CheckCurrentM15OpenTime()) // Если время не записано
       return ; // Выходим
  }
//+------------------------------------------------------------------+
//| Проверяем, записано ли время открытия текущего бара М15             |
//+------------------------------------------------------------------+
bool CheckCurrentM15OpenTime()
  {
//--- Проверяем, записано ли время
   if (_m15OpenTime== 0 ) // Если время не записано
     {
       //---
       ResetLastError ();
       if ( iBarShift ( Symbol (), PERIOD_M15 , TimeCurrent (), true )==- 1 )
        {
         Print ( __FILE__ + ": Данные истории по последнему часу отсутствуют! Ошибка #" , GetLastError ());
         return ( false );
        }
       //---
       if ( GetLastError ()== ERR_NO_ERROR )
        {
         ResetLastError ();
         //--- Запоминаем время открытия бара
         _m15OpenTime= iTime ( NULL , PERIOD_M15 , 0 );
         //---
         Print ( __FILE__ , ": Актуальное время открытия бара М15 = " + TimeToString (_m15OpenTime)+ ". Ошибка #" , GetLastError ());
         //--- Возвращаем истину
         return ( true );
        }
       else
         return ( false );
     }
//--- Время открытия недели ранее записано. Возвращаем истину
   return ( true );
  }
//+------------------------------------------------------------------+



 2018.09 . 21 15 : 02 : 42.910 Custom indicator test XAUUSD,H1: removed
2018.09 . 21 15 : 15 : 27.985 test XAUUSD,H1: initialized
2018.09 . 21 15 : 15 : 29.520 test XAUUSD,H1: OnTimer : Связь отсутствует!
2018.09 . 21 15 : 15 : 29.552 test XAUUSD,H1: OnTimer : Связь отсутствует!
2018.09 . 21 15 : 15 : 29.589 test XAUUSD,H1: OnTimer : Связь отсутствует!
2018.09 . 21 15 : 15 : 29.605 test XAUUSD,H1: OnTimer : Связь отсутствует!
2018.09 . 21 15 : 15 : 29.636 test XAUUSD,H1: OnTimer : Связь отсутствует!
2018.09 . 21 15 : 15 : 29.667 test XAUUSD,H1: OnTimer : Связь отсутствует!
2018.09 . 21 15 : 15 : 29.705 test XAUUSD,H1: OnTimer : Связь отсутствует!
2018.09 . 21 15 : 15 : 29.736 test XAUUSD,H1: OnTimer : Связь отсутствует!
2018.09 . 21 15 : 15 : 29.768 test XAUUSD,H1: OnTimer : Связь отсутствует!
2018.09 . 21 15 : 15 : 29.805 test XAUUSD,H1: OnTimer : Связь отсутствует!
2018.09 . 21 15 : 15 : 29.837 test XAUUSD,H1: OnTimer : Связь отсутствует!
2018.09 . 21 15 : 15 : 29.868 test XAUUSD,H1: OnTimer : Связь отсутствует!
2018.09 . 21 15 : 15 : 29.906 test XAUUSD,H1: OnTimer : Связь отсутствует!
2018.09 . 21 15 : 15 : 29.937 test XAUUSD,H1: OnTimer : Связь отсутствует!
2018.09 . 21 15 : 15 : 29.969 test XAUUSD,H1: OnTimer : Связь отсутствует!
2018.09 . 21 15 : 15 : 30.006 test XAUUSD,H1: OnTimer : Связь отсутствует!
2018.09 . 21 15 : 15 : 30.038 test XAUUSD,H1: OnTimer : Связь отсутствует!
2018.09 . 21 15 : 15 : 30.069 test XAUUSD,H1: OnTimer : Связь отсутствует!
2018.09 . 21 15 : 15 : 30.106 test XAUUSD,H1: OnTimer : Связь отсутствует!
2018.09 . 21 15 : 15 : 30.138 test XAUUSD,H1: OnTimer : Связь отсутствует!
2018.09 . 21 15 : 15 : 30.169 test XAUUSD,H1: OnTimer : Связь отсутствует!
2018.09 . 21 15 : 15 : 31.880 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка # 4066
2018.09 . 21 15 : 15 : 31.900 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка # 0
2018.09 . 21 15 : 15 : 31.940 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка # 0
2018.09 . 21 15 : 15 : 31.990 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка # 0
2018.09 . 21 15 : 15 : 32.010 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка # 0
2018.09 . 21 15 : 15 : 32.074 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка # 0
2018.09 . 21 15 : 15 : 32.100 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка # 0
2018.09 . 21 15 : 15 : 32.120 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка # 0
2018.09 . 21 15 : 15 : 32.174 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка # 0
2018.09 . 21 15 : 15 : 32.274 test XAUUSD,H1: test.mq4: Актуальное время открытия бара М 15 = 2018.09 . 21 15 : 15 . Ошибка # 0
 
Vitaly Gorbunov :

이렇게 해보세요!

다시 목발. 언어 오류와 같은 문제의 원인을 무시하고 비합리적인 방법을 포함한 모든 방법으로 문제를 해결하려고 합니다. 그럴 가치가 없다고 생각합니다.

추가됨:

예, 작동하는 것 같습니다. 또는 사용할 수 있습니다. 고맙습니다! 하지만 기능의 정상적인 작동을 원합니다.

 
글쎄, 나는 그것이 목발이라고 말하지 않을 것입니다. 서버에서 견적 스트림을 기다리고 있습니다. 그렇지 않으면 기록이 업데이트되지 않습니다. 또 다른 옵션은 컴퓨터의 현지 시간을 사용하여 시간대에 대한 수정 사항을 입력하는 것입니다. 이 표준 시간대는 자동으로 계산될 수 있고 결국에는 여전히 견적이 업데이트될 때까지 기다립니다. 예, 약간 비뚤어졌지만 Metaquote가 MT4에서 아무 것도 변경하지 않을 것이라고 생각합니다. 결국 이것은 어떤 식으로든 처리해야 하는 서버와의 연결 문제입니다.
 
Alexey Kozitsyn :

@Ihor Herasko 의 답변이 먼저입니다. 재현할 코드:

결과:

로그 항목에 따르면. 터미널은 14:25에 꺼졌습니다. 또한 14:30에 켜집니다. 우리는 바 M15의 시간을 확인합니다. TF M1으로 시작하십시오. 표시기(위 코드)는 실제 개장 시간 12시 15분(터미널 시간, 내 지역보다 2시간 늦음)을 보여주었습니다. 결과는 12:30이었어야 합니다! 결론 - 오류가 있습니다. 그리고 @Ihor Herasko 가 제안한 주어진 방법이 작동하지 않습니다.

검증에 대한 접근 방식에는 두 가지 중요한 오류가 있습니다.

  1. 표시기의 OnInit()에서는 현재 TF를 포함하여 모든 TF의 올바른 데이터를 얻는 것이 불가능합니다. 터미널 시작 시 표시기의 OnInit()는 실제로 빈 창에서 실행됩니다(터미널이 꺼졌을 때 있던 데이터가 없을 수도 있음). 시장 환경조차도 아직 사용할 수 없는 경우가 많습니다. 도움말에는 OnInit()에서 하지 말아야 할 일에 대한 경고가 많이 있습니다. 따라서 코드에 포함될 수 있는 것이 거의 없습니다. 일반적으로 이것은 설정 값을 확인하고, 표시기 버퍼를 배열에 연결하고, 클래스가 있는 경우 생성합니다. 다른 모든 것은 OnCalculate()에서 수행해야 합니다.
  2. 이러한 모든 검사는 OnCalculate가 한 번 이상 호출된 후에만 수행할 수 있습니다.