사용자 정의 기호. 오류, 버그, 질문, 제안. - 페이지 27

 
Stanislav Korotky :

비어 있는 새 사용자 정의 기호에 일대일 틱(특히 MQ Demo의 EURUSD에서)을 추가하면 오류 5310이 발생합니다(즉시가 아니라 임의 날짜의 통과 주기에서).

뭐가 문제 야? 맹세하는 진드기를 찾는 방법은 무엇입니까? 로그에 표시된 배열 - 연대순을 위반하지 않습니다.

틱을 복사하려면 수표를 삽입하십시오.
틱 처리에서 실시간 데이터에 대한 내 표시기에서 CopyClose를 복사할 때 때때로 복사 오류가 발생합니다.
이유가 무엇인지 이해할 때까지. 귀하의 경우 복사 오류가 있을 수 있습니다.

그러나 CopyTicks에서는 많은 Limit 틱을 복사한 다음 while 루프에서 실행합니다. 즉, 반복할 때마다 틱의 큰 배열을 복사합니다.
그리고 CustomTicksAdd에서 동일한 수의 배열 틱을 전달합니다.
하나의 틱을 복사하고 하나의 틱을 전송해 보십시오.
while 루프에서 실행 중입니다.

 input int Limit = 10000 ;
input datetime Start = D'2020.06.01' ;

int fillArray( ulong &_start)
{
   MqlTick array[];
   int size = CopyTicks ( _Symbol , array, COPY_TICKS_ALL , _start, Limit );

   if (size <= 0 ) 
  {
     Print ( "Ошибка копирования ценовых данных " + _Symbol + " " +( string )size+ " " , GetLastError ());
     return (size);
  }

   if (size > 0 )
  {
    _start = array[size - 1 ].time_msc + 1 ;
     if ( CustomTicksAdd (symbolName, array ) == - 1 )
    {
       Print ( "Error:" , GetLastError ());
       return (- 1 );
    }
  }
   return (size);
}

...
{
   ulong startMsc = ( ulong )Start * 1000 ;
   while (fillArray(startMsc) > 0 );
}
추가되었습니다. 사용자 정의 기호에는 적용되지 않습니다.
방금 M5 주기로 CopyClose 기능 으로 복사 오류의 원인을 표시기에서 틱 실시간으로 포착했습니다.
인터넷 연결이 몇초간 끊기고 연결이 된 후 복사오류 4401이 떴습니다 요청한 이력을 찾을 수 없습니다
좀 이상하게 통신이 없는 상태에서 M5라는 마침표가 아직 새바로 바뀌지 않고 에러가 뜨더군요.
 
Roman :

틱을 복사하려면 수표를 삽입하십시오.
틱 처리에서 실시간 데이터에 대한 내 표시기에서 CopyClose를 복사할 때 때때로 복사 오류가 발생합니다.
이유가 무엇인지 이해할 때까지. 귀하의 경우 복사 오류가 있을 수 있습니다.

그러나 CopyTicks에서는 많은 Limit 틱을 복사한 다음 while 루프에서 실행합니다. 즉, 반복할 때마다 틱의 큰 배열을 복사합니다.
그리고 CustomTicksAdd에서 동일한 수의 배열 틱을 전달합니다.
하나의 틱을 복사하고 하나의 틱을 전송해 보십시오.

복사 오류가 없습니다. 코드는 복사된 눈금(크기)의 수에 대해 일반 값을 제공하며 배열은 항상 일반 데이터로 채워집니다. 제한은 변경할 수 있지만 1에서 수천까지 의미 있는 값에 대해 오류가 발생합니다. 모든 틱을 한 번에 복사하는 것은(일부 코드에서와 같이) 분명히 잘못된 것입니다. 왜냐하면 메모리 할당 오류가 발생하고 사용자에게 진행 상황을 보여주지 않고 오랫동안 스레드를 차단할 수 있기 때문입니다. 10개(1개는 말할 것도 없고)의 작은 배치로 틱을 복사하는 것은 전체 프로세스를 엄청나게 느리게 만듭니다.

제안 된 옵션이 가장 좋습니다. 그리고 이것이 누군가에게 논쟁의 여지가 있는 지점일지라도 코드는 형식적으로 정확하고(또는 내 실수가 무엇인지 알려주세요) 현재 동작은 오류입니다. 틱은 코드 5310 없이 추가해야 합니다.

또한 틱 데이터베이스를 지우는 데 여전히 오랜 문제가 있습니다. 호출 CustomTicksDelete(symbolName, 0, LONG_MAX); 모든 진드기를 삭제하고 싶지 않고 몇 가지를 남깁니다(지속적으로 관찰되는 것이 아니라 거의 격일로 관찰됨). Expert Advisor를 다시 시작하면 사용자 지정 기호가 완전히 지워집니다. CopyTicks의 경우와 마찬가지로 오류가 없습니다.

 
더 많은 OnTick 이벤트를 생성하지 않고 틱을 작성해야 하는 경우 다른 기능을 사용하는 것이 더 나을 수 있습니다.
 
Stanislav Korotky :

아마도 팩의 교차점에 동일한 ms의 진드기가 있고 이것이 오류로 간주됩니까?

그냥 추측

 
Andrey Khatimlianskii :

아마도 팩의 교차점에 동일한 ms의 진드기가 있고 이것이 오류로 간주됩니까?

그냥 추측

코드 는 중복 틱이 있음을 보여줍니다. 이 경우 기본 눈금 플래그가 일치하지 않을 수 있습니다.

 
fxsaber :
더 많은 OnTick 이벤트를 생성하지 않고 틱을 작성해야 하는 경우 다른 기능을 사용하는 것이 더 나을 수 있습니다.

동의한다. 노력하겠습니다. 그러나 현재 방식이 작동하지 않아야 할 이유가 없습니다.

 
Stanislav Korotky :

복사 오류가 없습니다. 코드는 복사된 눈금(크기)의 수에 대해 일반 값을 제공하며 배열은 항상 일반 데이터로 채워집니다. 제한은 변경할 수 있지만 1에서 수천까지 의미 있는 값에 대해 오류가 발생합니다. 모든 틱을 한 번에 복사하는 것은(일부 코드에서와 같이) 분명히 잘못된 것입니다. 왜냐하면 메모리 할당 오류가 발생하고 사용자에게 진행 상황을 보여주지 않고 오랫동안 스레드를 차단할 수 있기 때문입니다. 10개(1개는 말할 것도 없음)의 작은 배치로 틱을 복사하면 전체 프로세스가 엄청나게 느려집니다.

제안 된 옵션이 가장 좋습니다. 그리고 이것이 누군가에게 논쟁의 여지가 있는 지점일지라도 코드는 형식적으로 정확하고(또는 내 실수가 무엇인지 알려주세요) 현재 동작은 오류입니다. 틱은 코드 5310 없이 추가해야 합니다.

또한 틱 데이터베이스를 지우는 데 여전히 오랜 문제가 있습니다. 호출 CustomTicksDelete(symbolName, 0, LONG_MAX); 모든 진드기를 삭제하고 싶지 않고 몇 가지를 남깁니다(지속적으로 관찰되는 것이 아니라 거의 격일로 관찰됨). Expert Advisor를 다시 시작하면 사용자 지정 기호가 완전히 지워집니다. CopyTicks의 경우와 마찬가지로 오류가 없습니다.

ERR_CUSTOM_TICKS_WRONG_ORDER

5310

주문하지 않은   시간 배열로   진드기


대규모 배치에서 틱이 제때 제거되지 않을 가능성이 있지만 다음 반복에서 이미 사용 가능한 틱을 덮어쓰고 있습니다.
즉, 그것들은 어레이로 서로 중첩되는 반면, 지체 없이 날아가는 동안 분명히 다른 팩이 도착하기 전에 메모리가 지워질 시간이 없습니다.
따라서 그는 한 번에 하나의 틱을 추가할 것을 제안했고 한 번에 하나의 틱을 복사했는데 문제가 없었습니다.

눈금 기준을 지우는 것과 관련하여 이 경우 LONG_MAX 상수가 마음에 들지 않습니다.
CustomTicksDelete 기능의 도움말은 삭제할 지정된 범위의 가격 내역에서 마지막 틱의 시간을 말합니다. 1970년 1월 1일 이후의 시간 (밀리초) 입니다.
그리고 LONG_MAX는 이 용량보다 훨씬 큽니다. 즉, 이 매개변수가 설계되지 않은 더 큰 값이 전송됩니다.
밀리초에 해당하는 숫자, 즉 13개의 값을 사용하십시오.

 
fxsaber :

코드 는 중복 틱이 있음을 보여줍니다. 이 경우 기본 눈금 플래그가 일치하지 않을 수 있습니다.

CopyTicks 수신 배열에서 두 번 틱? 이것이 중복 틱이고 동일한 틱이 아니라는 것이 어떻게 분명합니까(틱에는 고유 식별자가 없음)? 중복이 있더라도 컷오프가 동일한 틱이 시퀀스를 중단하지 않는다는 아이디어입니다. 마지막으로 문제가 발생합니다. 중복은 어떻게 형성됩니까?

 
Roman :

ERR_CUSTOM_TICKS_WRONG_ORDER

5310

주문하지 않은   시간 배열로   진드기


대규모 배치에서 틱이 제때 제거되지 않을 가능성이 있지만 다음 반복에서 이미 사용 가능한 틱을 덮어쓰고 있습니다.
즉, 그것들은 어레이로 서로 중첩되는 반면, 지체 없이 날아가는 동안 분명히 다른 팩이 도착하기 전에 메모리가 지워질 시간이 없습니다.
따라서 그는 한 번에 하나의 틱을 추가할 것을 제안했고 한 번에 하나의 틱을 복사했는데 문제가 없었습니다.

삭제의 문제가 없으며 덮어쓰는 것이 없습니다. 반복은 교차점 없이 시간이 지남에 따라 진행됩니다. 항상 비어 있는 사용자 지정 기호에 있습니다. 새 기호이거나 모든 눈금이 성공적으로 삭제된 후입니다.

 
Stanislav Korotky :

CopyTicks 수신 배열에서 두 번 틱? 이것이 중복 틱이고 동일한 틱이 아니라는 것이 어떻게 분명합니까(틱에는 고유 식별자가 없음)? 중복이 있더라도 컷오프가 동일한 틱이 시퀀스를 중단하지 않는다는 아이디어입니다. 마지막으로 문제가 발생합니다. 중복은 어떻게 형성됩니까?

코드를 더 자세히 살펴보았습니다. 청크를 수신할 때 틱을 건너뜁니다. 상황은 가능합니다 Ticks[Limit - 1].time_msc == Ticks[Limit + k], k >= 0 .

따라서 간격을 두고 추가할 경우 플래그가 일치하지 않을 수 있습니다.


부분의 끝에 같은 시간에 모든 과거 틱이 있는지 확인하십시오. 저것들. 그래서 다음 부분의 시작은 다른 시간으로 했습니다. 그렇지 않으면 사용자 정의에 쓸 때에도 손실이 있습니다.

CopyTicks를 사용하려는 경우 가장 쉬운 방법은 받은 팩에서 가장 긴 시간을 가진 가장 극단적인 틱을 버리는 것입니다. 그리고 _start를 이 시간과 동일하게 만듭니다.