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

 
Alexey Kozitsyn :

직접 해보십시오. 표시기를 시작하고 터미널을 껐다가 새로운 시간이 되면 켜십시오.

따라서 TimeCurrent 를 얻으면

서버의 마지막으로 알려진 시간, "시장 감시"에서 선택한 기호 중 하나에 대한 마지막 견적이 도착한 시간을 반환합니다.

모든 것이 맞습니다.
 
Konstantin Nikitin :

따라서 TimeCurrent 를 얻으면

서버의 마지막으로 알려진 시간, "시장 감시"에서 선택한 기호 중 하나에 대한 마지막 견적이 도착한 시간을 반환합니다.

모든 것이 맞습니다.

이 코드에서 TimeCurrent 호출은 어디에 있습니까?

 
Alexey Kozitsyn :

이 코드에서 TimeCurrent 호출은 어디에 있습니까?

따라서 막대 y의 여는 시간은 여전히 터미널이 닫히기 전에 수신된 시간입니다. 새로운 막대가 형성되고 시간이 업데이트됩니다. 문제가 무엇입니까?

 
Konstantin Nikitin :

따라서 막대 y의 여는 시간은 여전히 터미널이 닫히기 전에 수신된 시간입니다. 새로운 막대가 형성되고 시간이 업데이트됩니다. 문제가 무엇입니까?

문제는 차트의 마지막 시간별 막대가 22:00시가 되면 터미널이 꺼진다는 것입니다. 예를 들어 22:45에 꺼집니다. 23:01에 켜집니다. 서버와 연결을 설정한 후 마지막 시간을 요청하고 타이머 없이 OnInit()에서 사전 요청한 후 여전히 22시간입니다. 이게 정상인가요?

 

막대의 계산이 아니라 촛불의 시간을 확인하십시오.
이것이 올바르게 업데이트되는 방법입니다(확인됨).

 //--- Проверяем первый запуск индикатора
   if (prev_calculated<= 0 || 
      _weekOpenTime!= iTime ( _Symbol , PERIOD_W1 , 0 )+SEC_PER_DAY ||
      _dayOpenTime!= iTime ( _Symbol , PERIOD_D1 , 0 ) ||
      _hourOpenTime!= iTime ( _Symbol , PERIOD_H1 , 0 ) )
     {
     
      _weekOpenTime= 0 ;
      _dayOpenTime = 0 ;
      _hourOpenTime= 0 ;
        
       //--- Проверяем, записано ли время открытия текущей недели
       if (!CheckCurrentWeekOpenTime())                               // Если время не записано
         return ( 0 );                                                 // Выходим
       //--- Проверяем, записано ли время открытия текущего дня
       if (!CheckCurrentDayOpenTime())                               // Если время не записано
         return ( 0 );                                                 // Выходим
       //--- Проверяем, записано ли время открытия текущего часа
       if (!CheckCurrentHourOpenTime())                               // Если время не записано
         return ( 0 );                                                 // Выходим
       //--- Устанавливаем флаг соединения с сервером для запуска таймера
      _isConnected= true ;
       //---
       Print ( __FUNCTION__ , ": Данные старших ТФ загружены!" );
     }
 
내가 알기로 터미널은 처음으로 기록에 있는 최신 데이터를 표시한 다음 서버에서 로드해야 합니다.
 
Taras Slobodyanik :

막대의 계산이 아니라 촛불의 시간을 확인하십시오.
이것이 올바르게 업데이트되는 방법입니다(확인됨).

어떤 종류의 막대 계산에 대해 이야기하고 있습니까?

귀하의 버전을 확인하겠습니다. 그러나 사실 OnCalculate()에 "빈" 데이터 요청을 하나만 추가했고 그게 전부이며 논리적으로 "빈" 요청에 도달하지도 않습니다. 왜냐하면 prev_calculated <= 0은 이미 실행되고 첫 번째 실행 블록이 실행됩니다.

어쨌든 이것은 목발 해결책이며 언어에는 그러한 상황이 없어야합니다. 연결이 설정되고 데이터 수신 기능에 오류 및 수신 데이터의 정확성이 확인됩니다. 그리고 결국 무엇? 데이터가 아직 남아 있습니다.

일반적으로 확실하게 행동하면 인터넷에서 현재 시간 을 요청한 다음 OnCalculate()에서 현재 시간을 요청하고 다를 때까지 비교할 수 있습니다. 그러나 이것은 같은 목발이며 그렇게 되어서는 안됩니다.

 
Alexey Kozitsyn :

문제는 차트의 마지막 시간별 막대가 22:00시가 되면 터미널이 꺼진다는 것입니다. 예를 들어 22:45에 꺼집니다. 23:01에 켜집니다. 서버와 연결을 설정한 후 마지막 시간을 요청하고 타이머 없이 OnInit()에서 사전 요청한 후 여전히 22시간입니다. 이게 정상인가요?

마지막 막대의 닫는 시간은 TimeCurrent (즉, 현재) 입니다. 귀하의 질문으로 판단하면 필요한 것 같습니다.

 
Taras Slobodyanik :
내가 알기로 터미널은 처음으로 기록에 있는 최신 데이터를 표시한 다음 서버에서 로드해야 합니다.

문제! 서버와의 연결이 이미 설정된 후 이전 데이터를 제공하는 이유는 OnInit()에 데이터 사전 요청이 있었고 각 CheckCurren..() 함수에서 데이터 로딩을 확인했습니다. 젠장, 모든 것이 제대로 작동하려면 얼마나 많은 검사를 수행해야합니까 ...

 
Konstantin Nikitin :

마지막 막대의 닫는 시간은 TimeCurrent (즉, 현재) 입니다. 귀하의 질문으로 판단하면 필요한 것 같습니다.

무슨 폐쇄? 오픈시간이 필요해...