음, 오류 4066은 MTF 칠면조의 일반적인 문제이며, 터미널이 다른 TF의 데이터를 업로드하지 않았으므로 다른 TF의 데이터 무결성을 확인해야 합니다.
조언을 하기 전에 코드와 내가 작성한 내용을 자세히 살펴보십시오.
코드에는 오류 검사와 빈 데이터 검사가 있습니다. 그리고 함수가 오류 없이 잘못된 데이터를 반환하면 오류입니다!
조언을 하기 전에 코드와 내가 작성한 내용을 자세히 살펴보십시오.
코드에는 오류 검사와 빈 데이터 검사가 있습니다. 그리고 함수가 오류 없이 잘못된 데이터를 반환하면 오류입니다!
내가 뭔가를 놓쳤을 수도 있습니다. 예를 들어 CheckCurrentHourOpenTime() 프로시저에서 기록의 무결성을 확인하는 위치를 보여주세요.
당신은 역사의 무결성에 대해 무엇을 이해합니까?
히스토리 값을 가져올 때 오류 검사가 있다는 사실에 대해 이야기하고 있습니다. 모든 기능에 체크가 있습니다. 여기 그녀가 있습니다:
//--- Проверяем, получено ли время открытия часового бара if (tempHourOpenTime== 0 || err!= 0 ) // Если время бара не получено return ( false ); // Возвращаем ложь
저것들. null 값이나 오류가 수신되면 시간이 전역 변수 에 기록되지 않습니다. 이것으로 충분하지 않다고 생각하십니까?
결론은 SeriesInfoInteger() 함수가 먼저 오류를 반환하지만 다음 실행에서는 - 아니요! 또한 올바른 값을 반환하지 않습니다!실수가 없다는게 무슨 말인가요? 그러면 오류 코드가 "왼쪽"으로 표시되는 이유는 무엇입니까? 역사는 옳고 그른 곳은 옳다...
다시 말하지만 이 기능은 히스토리의 무결성을 확인하지 않습니다! 그녀는 그 안에서 찾을 수 있는 정보를 반환합니다. 특정한 경우에 그녀는 터미널이 꺼진 순간에 요청된 시간당 바를 발견했습니다. 나머지 이야기는 아직 로드되지 않았습니다.
주어진 TF의 기록이 완전히 바뀌었다는 사실을 확인하려면 다음 기능을 사용하는 것으로 충분합니다.
bool IsTFDataReady( ENUM_TIMEFRAMES eTF) { ResetLastError (); iTime ( NULL , eTF, 1 ); return GetLastError () == ERR_NO_ERROR ; }
함수가 false를 반환하면 요청된 TF의 데이터가 불완전한 것입니다. 그렇지 않으면 완료합니다.
다시 말하지만 이 기능은 히스토리의 무결성을 확인하지 않습니다! 그녀는 그 안에서 찾을 수 있는 정보를 반환합니다. 특정한 경우에 그녀는 터미널이 꺼진 순간에 요청된 시간당 바를 발견했습니다. 나머지 이야기는 아직 로드되지 않았습니다.
다시. 이것은 어디에도 언급되지 않습니다. 처음입니다. 둘째, 오류 코드 4066을 먼저 표시한 다음 표시하지 않음으로써 오도하는 이유는 무엇입니까?
주어진 TF의 기록이 완전히 바뀌었다는 사실을 확인하려면 다음 기능을 사용하는 것으로 충분합니다.
함수가 false를 반환하면 요청된 TF의 데이터가 불완전한 것입니다. 그렇지 않으면 완료합니다.
타이머는 확인하셨나요? 내 주석 줄을 참조하십시오? 이 기능을 확인했는데 오류가 전혀 표시되지 않고 잘못된 데이터도 표시되었습니다. 다시 확인하겠습니다.
작업: 표시기를 시작할 때 타이머의 실제 데이터를 가져옵니다: 주간, 일별 및 시간별 막대의 여는 시간. 그런 다음 나중에 사용할 수 있도록 전역 변수에 씁니다. 현재 TF는 M1입니다.
구현: SeriesInfoInteger() 함수를 사용하여 막대의 시간을 얻습니다.
결과: 결과적으로 터미널이 몇 시간 동안 실행되지 않은 경우( 예: 야간에 꺼진 경우) 처음(하루) 실행될 때 다음 결과를 얻습니다.
보시다시피, 데이터를 가져오는 시간은 2018.09.21 11:11이고, 이 시간에 대해 오늘의 오픈 시간 = 2018.09.20(2018.09.21이어야 하지만) 및 오픈 시간을 얻습니다. 시간 = 2018.09.20 16:00(2018.09 .21 11:00이어야 함). 게다가 터미널에서 반환된 시간은 마지막으로 닫혔을 때의 데이터에 불과합니다. 저것들. 터미널이 꺼져 있는지 여부에 관계없이 데이터가 캐시되고 반환됩니다. 그리고 데이터가 업데이트될 때까지 오류 #4066(업데이트 상태에서 요청된 기록 데이터)이 반환될 때마다 데이터가 업데이트될 때마다 반환되지만 아니요, 반환되는 것은 오류 데이터라는 것을 이해합니다! 이 오류는 한 번만 반환된 다음 원하는 대로 실행됩니다. 명백한 캐싱 오류입니다. 개발자들( @Slava )에게 관심을 가져주시길 부탁드립니다!
반복합니다. 타이머에서 요청하면 잘못된 데이터가 나타납니다!
터미널 버전: x64, 1090.