iClose/iOpen 시계열 등에 대한 액세스 작업 시 MQL5 버그 - 페이지 10

 
fxsaber :

우둔.

+1
 
fxsaber :

우둔.

"갑자기" (c) 제한된 시스템 성능 문제가 발생할 때까지(어느 것이든 상관 없음).

 

요즘은 OnCalculate의 동작과 틱 데이터의 처리에 대해 살펴보고 있습니다. 이전에 모든 것이 비뚤어진 표시기 를 "동결"시키지 않기 위해 수행되었다고 작성되었지만, OnCalculate에 대한 이전 호출 이후 틱 데이터의 전체 흐름을 실제로 처리해야 하는 경우 가격의 빠른 이동(및 롤백)으로, 우리는 상당히 "깊은" 배열을 얻어야 합니다. 틱 배열의 깊이에 제한이 있습니까?

"이러한 상황에서 OnCalculate에서 누적 틱(들)이 수신됩니다..., 최적화를 위해..."와 같은 답변을 듣고 싶지 않습니다.

누가 이미 진드기 데이터 분석에 참여하고 있는데, 그런 우려의 이유가 있습니까?

 
Farkhat Guzairov :

요즘은 OnCalculate의 동작과 틱 데이터의 처리에 대해 살펴보고 있습니다. 이전에 모든 것이 비뚤어진 표시기 를 "동결"시키지 않기 위해 수행되었다고 작성되었지만, OnCalculate에 대한 이전 호출 이후 틱 데이터의 전체 흐름을 실제로 처리해야 하는 경우 가격의 빠른 이동(및 롤백)으로, 우리는 상당히 "깊은" 배열을 얻어야 합니다. 틱 배열의 깊이에 제한이 있습니까?

"이러한 상황에서 OnCalculate에서 누적 틱(들)이 수신됩니다..., 최적화를 위해..."와 같은 답변을 듣고 싶지 않습니다.

누가 이미 진드기 데이터 분석에 참여하고 있는데, 그런 우려의 이유가 있습니까?

2008-2009년에 Renat는 한 번 진드기에 행복이 없다고 썼고 전문가의 예를 들었습니다. 어쨌든 틱은 건너 뜁니다. 필요한 경우 각 호출에 대해 https://www.mql5.com/ru/docs/series/copyticks 를 가져오지만 입력하려는 상위/하위 50/50은 건너뜁니다.

Документация по MQL5: Доступ к таймсериям и индикаторам / CopyTicks
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyTicks
  • www.mql5.com
[in]  Количество запрашиваемых тиков. Если параметры from и count не указаны, то в массив ticks_array[] будут записаны все доступные последние тики, но не более 2000. Первый вызов CopyTicks() инициирует синхронизацию базы тиков, хранящихся на жёстком диске по данному символу. Если тиков в локальной базе не хватает, то недостающие тики...
 

나는 아마도 내가 표시할 군중을 위해 여기에 있습니다. 한 달 동안 나는 이것이 왜 작동을 멈췄는지 알아 내려고 노력했습니다.

 long lastbardaytime= 0 ;

int OnInit (){ 
}

bool isNewBar( string symbol_, ENUM_TIMEFRAMES period_){
     long curbar = SeriesInfoInteger (symbol_,period_, SERIES_LASTBAR_DATE )% 86400 ;
     if (lastbardaytime == 0 ){
        lastbardaytime = curbar;
    }
     if (lastbardaytime != curbar){
        lastbardaytime = curbar;
         return ( true );
    }
     return ( false );
}


void OnTick (){
     if (isNewBar(MIX- 12.18 , PERIOD_M1 )){ 
         Print ( "New bar" );
///....
    }
} 


오프닝에서 새로운 릴리스를 기다리고 있습니다.

 

기록 데이터의 최적화 및 로드와 관련된 질문을 재개합니다.

1. iClose/iOpen 세트의 기능이 올바르게 작동하는 문제, 이 경우 iTime이 존재하고 모든 것이 완벽할 것이라고 기대하는 것은 말이 되지 않는다고 생각합니다. 그런 다음 MQL5에서 간단히 제거하여 같은 갈퀴를 계속해서 밟지 않도록 할 수 있습니까? (문제가 있지만 설명할 시간이 없어 해결 방법, 또 다른 "비틀림"을 찾았습니다.)

2. 아마도 어떤 해결책이 있을 수 있지만 MQL5 커뮤니티의 또 다른 트릭이 아니라 문서화되기를 바랍니다. 예를 들어 다음과 같이 로컬 데이터베이스를 동기화하는 비동기식 요청을 처리하는 방법에 대해 이야기하고 있습니다.

표시기에서 CopyTicks() 함수는 즉시 결과를 반환합니다. 표시기에서 호출되면 CopyTick()은 기호당 사용 가능한 틱을 즉시 반환하고 데이터가 충분하지 않은 경우 틱 기준 동기화를 시작합니다. 동일한 기호의 모든 표시기는 하나의 공통 스레드에서 작동하므로 표시기는 동기화가 완료될 때까지 기다릴 권한이 없습니다. 동기화가 끝난 후 CopyTicks()에 대한 다음 호출은 요청된 모든 틱을 반환합니다. 표시기의 OnCalculate() 함수는 각 틱이 도착한 후 호출됩니다.


핵심 문구 " 동기화 종료 후 CopyTicks()에 대한 다음 호출은 요청된 모든 틱을 반환합니다. " 여러분, 동기화 종료에 대해 알아내는 방법 ??? 예를 들어 동기화 가 끝나기 전에 CopyTicks()가 -1을 반환하는 것처럼 작성되지만 그렇지 않습니다. 결과적으로 표시기를 여러 번 재부팅한 후 데이터베이스가 동기화되고 실제로 전체 데이터 세트를 얻습니다. 그러나 표시기를 왜곡하지 않으면 결과를 모르기 때문에 이 세트를 얻을 수 없습니다. 이 빌어먹을 동기화를 완료하는 것.

생생한 예는 과거 노크, EURUSD에 급격한 움직임이 있었지만 표시기가 항상 켜져 있고이 기간을 정상적으로 그리는 것처럼 보였지만 다시로드 된 후 (입력 매개 변수 변경) 표시기가 반영하기 시작했습니다 정보가 각각 잘못되면 검색이 표시기에서 오류를 시작했지만(여러 번 다시 컴파일하고 다시 로드함) 아무 도움도 되지 않았고 동일한 "기적"이 발생했습니다. " 표시기에서 호출하면 CopyTick()이 즉시 사용 가능한 틱을 반환합니다. 기호 및 틱 베이스의 동기화 시작 ", 아마도 모두 같을 것입니다. 현재 로컬 데이터베이스의 동기화가 완료되지 않았음을 알려주는 함수를 생성할 가치가 있습니다. 우리의 작업을 더 쉽게 만들고 결과적으로 시장을 위한 더 나은 최종 제품을 작성할 수 있습니다.

추신: 불행히도 SymbolInfoTick 기능에는 그러한 기능이 없습니다.

 

불행히도 이 예가 항상 작동하는 것은 아닙니다.

 //--- запросим тиковую историю с момента 1970.01.01 00:00.001 (параметр from=1 ms) 
       int received= CopyTicks ( _Symbol ,tick_array, COPY_TICKS_ALL , 1 ,getticks); 
       if (received!=- 1 ) 
        { 
         //--- выведем информацию о количестве тиков и затраченном времени времени 
         PrintFormat ( "%s: received %d ticks in %d ms" , _Symbol ,received, GetTickCount ()-start); 
         //--- если тиковая история синхронизирована, то код ошибки равен нулю 
         if ( GetLastError ()== 0 ) 
           { 
            success= true ; 
             break ; 
           } 
         else 
             PrintFormat ( "%s: Ticks are not synchronized yet, %d ticks received for %d ms. Error=%d" , 
             _Symbol ,received, GetTickCount ()-start, _LastError ); 
        } 

오히려 10번의 경우에 1-2번은 효과가 있습니다.

하지만 위에서 설명한 상황에서는 한 번도 작동하지 않았습니다.

 

다시 말하지만, 데이터베이스가 실시간으로 업데이트됩니까?

위에서 썼듯이 문제가 있었던 전체 기간, 지표가 작동했습니다. CopyTicks() 함수에 대한 호출은 정기적으로 수행되었지만 결과적으로 이것은 로컬 데이터베이스에 어떤 식으로든 영향을 미치지 않았습니다.

 
Unicornis :

2008-2009년에 Renat는 한 번 진드기에 행복이 없다고 썼고 전문가의 예를 들었습니다. 어쨌든 틱은 건너 뜁니다. 필요한 경우 각 호출에 대해 https://www.mql5.com/ru/docs/series/copyticks 를 가져오지만 입력하려는 상위/하위 50/50은 건너뜁니다.

누가 하지 않고 누가 신경을 쓰는지 :) 최신 데이터, 특히 진드기 데이터를 보유하는 것이 좋습니다.
 
Farkhat Guzairov :

기록 데이터의 최적화 및 로드와 관련된 질문을 재개합니다.

1. iClose/iOpen 세트의 기능이 올바르게 작동하는 문제, 이 경우 iTime이 존재하고 모든 것이 완벽할 것이라고 기대하는 것은 말이 되지 않는다고 생각합니다. 그런 다음 MQL5에서 간단히 제거하여 같은 갈퀴를 계속해서 밟지 않도록 할 수 있습니까? (문제가 있지만 설명할 시간이 없어 해결 방법, 또 다른 "비틀림"을 찾았습니다.)

2. 아마도 어떤 해결책이 있을 수 있지만 MQL5 커뮤니티의 또 다른 트릭이 아니라 문서화되기를 바랍니다. 예를 들어 다음과 같이 로컬 데이터베이스를 동기화하는 비동기식 요청을 처리하는 방법에 대해 이야기하고 있습니다.

표시기에서 CopyTicks() 함수는 즉시 결과를 반환합니다. 표시기에서 호출하면 CopyTick()은 기호당 사용 가능한 틱을 즉시 반환하고 데이터가 충분하지 않은 경우 틱 기준 동기화도 시작합니다. 동일한 기호의 모든 표시기는 하나의 공통 스레드에서 작동하므로 표시기는 동기화가 완료될 때까지 기다릴 권한이 없습니다. 동기화가 끝난 후 CopyTicks()에 대한 다음 호출은 요청된 모든 틱을 반환합니다. 표시기의 OnCalculate() 함수는 각 틱이 도착한 후 호출됩니다.


핵심 문구 " 동기화 종료 후 CopyTicks()에 대한 다음 호출은 요청된 모든 틱을 반환합니다. " 여러분, 동기화 종료에 대해 알아내는 방법 ??? 예를 들어 동기화 가 끝나기 전에 CopyTicks()가 -1을 반환하는 것처럼 작성되지만 그렇지 않습니다. 결과적으로 지표를 여러 번 재부팅하면 데이터베이스가 동기화되고 실제로 전체 데이터 세트를 얻을 수 있지만 지표를 왜곡하지 않으면 결과를 모르기 때문에 이 세트를 얻지 못할 것입니다. 이 빌어먹을 동기화를 완료하는 것.

생생한 예는 과거 노크, EURUSD에 급격한 움직임이 있었지만 표시기가 항상 켜져 있고이 기간을 정상적으로 그리는 것처럼 보였지만 다시로드 된 후 (입력 매개 변수 변경) 표시기가 반영하기 시작했습니다 정보가 각각 잘못되면 검색이 표시기에서 오류를 시작했지만(여러 번 다시 컴파일하고 다시 로드함) 아무 도움도 되지 않았고 동일한 "기적"이 발생했습니다. " 표시기에서 호출하면 CopyTick()이 즉시 사용 가능한 틱을 반환합니다. 기호 및 틱 베이스의 동기화 시작 ", 아마도 모두 같을 것입니다. 현재 로컬 데이터베이스의 동기화가 완료되지 않았음을 알려주는 함수를 생성할 가치가 있습니다. 우리의 작업을 더 쉽게 만들고 결과적으로 시장을 위한 더 나은 최종 제품을 작성할 수 있습니다.

추신: 불행히도 SymbolInfoTick 기능에는 그러한 기능이 없습니다.

이러한 경우 SERIES_SYNCHRONIZED는 무엇을 반환합니까?