'CopyTicks' 테스트 - 페이지 25

 
아니면 당신이 그를 고문 했습니까? :)
 
prostotrader :
아니면 당신이 그를 고문 했습니까? :)

그리고 있습니다. 그것은 그를 매우 세게 때립니다. 우리는 경의를 표해야 합니다. 혼미에 빠지긴 하지만 드문 일입니다.

좋은 눈금 표시기 가 작성되었습니다. 드문 충돌을 디버그하기에는 너무 게으릅니다.

 
fxsaber :

그리고 있습니다. 그것은 그를 매우 세게 때립니다. 우리는 경의를 표해야 합니다. 혼미에 빠지긴 하지만 드문 일입니다.

좋은 눈금 표시기 가 작성되었습니다. 드문 충돌을 디버그하기에는 너무 게으릅니다.

매번 실시간으로 정확히 모든 진드기를 촛불에 넣을 수 있습니까?

추가됨:

COPY_TICKS_TRADE 모드에서 볼륨으로 확인합니다.

 
Alexey Kozitsyn :

매번 실시간으로 정확히 모든 진드기를 촛불에 넣을 수 있습니까?

추가됨:

COPY_TICKS_TRADE 모드에서 볼륨으로 확인합니다.

나는 몇 가지 다른 사람이 있습니다. "아날로그가 없다"와 ㅋ ㅋ ㅋ ㅋ.

성능면에서는 그렇게 생각하지 않습니다. 다음 빌드에서 상당한 개선이 약속됩니다.

 
fxsaber :

나는 몇 가지 다른 사람이 있습니다. "아날로그가 없다"와 ㅋ ㅋ ㅋ ㅋ.

성능면에서는 그렇게 생각하지 않습니다. 다음 빌드에서 상당한 개선이 약속됩니다.

예, 성능에 관한 것이 아닙니다 ... 예를 들어 지금과 같은 상황이 있습니다.

표시기는 틱을 수집하고 이를 기반으로 볼륨을 계산합니다. 그런 다음 이 볼륨을 volume[]의 볼륨과 비교합니다.

그리고 몇 가지 오류가 발생합니다.

1. 때때로 오늘의 첫 번째 양초의 양이 잘못 계산됩니다(컨트롤과 일치하지 않음).

2. 때때로 틱별 볼륨이 올바르게 계산되고 볼륨이 잘못된 값을 반환합니다.

3. 때때로 틱별 볼륨이 잘못 계산되고 볼륨이 잘못된 값을 반환합니다.

가장 흥미로운 점은 히스토리에 오류 1,2 또는 3이 발생해도 표시기를 다시 컴파일한 후에도 오류가 사라지지 않는다는 것입니다. 그리고 다른 서버로 접속시 - 사라집니다.

요컨대, 기적은 아직 끝나지 않았습니다.

개발자가 이 게시물을 읽고 이해하고 싶다면 서비스 데스크에 오신 것을 환영합니다. 모든 소스를 제공하겠습니다.

 
Renat Fatkhullin :

CopyTicks를 테스트하는 방법은 다음과 같습니다.

MqlTick ExtArr[ 2048 ];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick ()
  {
   ulong from   =( TimeTradeServer ()- 1200 )* 1000 ;
   ulong ticks  = GetMicrosecondCount ();
   int    records= CopyTicks ( _Symbol ,ExtArr, COPY_TICKS_INFO ,from, 2048 );

   ticks= GetMicrosecondCount ()-ticks;
   Print ( "Time: " ,ticks, " msc for " ,records, " records" );
  }

다음은 마이크로초 단위의 출력입니다. 지난 20분 동안 2048개의 INFO 틱 샘플당 95마이크로초

2016.10 . 18 14 : 15 : 38.673 TEST (USDCHF,M1)         Time : 95 msc for 1206 records
그것은 당신이 선언한 10밀리초와 근본적으로 다릅니다. CopyTicks를 측정하지 않았기 때문입니다.

장 마감 후 브레이크

MqlTick ExtArr[ 2048 ];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart ()
  {
   ulong from   =( TimeCurrent ()- 1200 )* 1000 ;
   ulong ticks  = GetMicrosecondCount ();
   int    records= CopyTicks ( _Symbol ,ExtArr, COPY_TICKS_INFO ,from, 2048 );

   ticks= GetMicrosecondCount ()-ticks;
   Print ( "Time: " ,ticks, " msc for " ,records, " records" );
  }

결과

2016.10 . 29 00 : 31 : 10.952 Test (GBPUSD,M1)         Time : 85 msc for 1333 records
2016.10 . 29 00 : 31 : 05.435 Test (EURCHF,M1)         Time : 15283 msc for 874 records
2016.10 . 29 00 : 31 : 03.960 Test (EURCHF,M1)         Time : 11629 msc for 874 records
2016.10 . 29 00 : 31 : 02.128 Test (EURCHF,M1)         Time : 10127 msc for 874 records
2016.10 . 29 00 : 31 : 00.332 Test (EURCHF,M1)         Time : 7318 msc for 874 records

2016.10 . 29 00 : 30 : 52.049 Test (EURUSD,M1)         Time : 51 msc for 862 records

이것은 EURCHF에만 있는 것처럼 보일 수 있습니다. 그러나 EURUSD를 사용하고 견적을 업로드할 가치가 있습니다. 스크립트가 수십 밀리초 동안 EURSD에서 시작되고 실행되는 방법. 이 브레이크는 시장이 닫힌 후에 시작되었습니다. 닫기 전에는 모든 것이 훨씬 더 빨랐습니다.

 

친애하는 개발자 여러분! CopyTicks()의 문제, 특히 양초의 볼륨 동기화(양초의 모든 틱 볼륨을 양초로 포장하고 이 양초의 볼륨[]과 비교). 계속합니다.

이제 다시 2개의 오류가 있습니다.

1. 초개봉(10.00)에 안정볼륨조절 오류가 발생합니다. RTS, SBRF, Si(모두 -12.16)에서 테스트 중입니다. 이러한 도구 각각에 오류가 있습니다!

2. 실시간 10시 이후 양초에 어떤 이유로 볼륨 조절 오류가 발생하면 히스토리에서도 동일한 오류가 발생합니다. 하지만! 서버를 변경하면 - 이력에 대한 오류가 사라집니다.

 

이전 게시물의 예(실수 2):

2016.10 . 31 12 : 13 : 43.699 (Si- 12.16 ,M1)   VolumeControl: Контроль свечи 2016.10 . 31 10 : 05 пройден! Контрольная сумма = 3480 ( 1353 + 2127 )
2016.10 . 31 12 : 13 : 43.699 (Si- 12.16 ,M1)   VolumeControl: Контроль свечи 2016.10 . 31 10 : 06 пройден! Контрольная сумма = 4103 ( 2236 + 1867 )
2016.10 . 31 12 : 13 : 43.699 (Si- 12.16 ,M1)   VolumeControl: ОШИБКА на свече 2016.10 . 31 10 : 07 ! Сумма объемов на покупку = 1074 , сумма объемов на продажу = 3917 , контрольная сумма (покупки+продажи) = 5009
2016.10 . 31 12 : 13 : 43.699 (Si- 12.16 ,M1)   VolumeControl: Контроль свечи 2016.10 . 31 10 : 08 пройден! Контрольная сумма = 3121 ( 1479 + 1642 )
2016.10 . 31 12 : 13 : 43.699 (Si- 12.16 ,M1)   VolumeControl: Контроль свечи 2016.10 . 31 10 : 09 пройден! Контрольная сумма = 3760 ( 1046 + 2714 )

서버 변경 전입니다. 서버 변경 후 로그는 다음과 같습니다.

2016.10 . 31 12 : 18 : 12.109 (Si- 12.16 ,M1)   VolumeControl: Контроль свечи 2016.10 . 31 10 : 05 пройден! Контрольная сумма = 3480 ( 1353 + 2127 )
2016.10 . 31 12 : 18 : 12.109 (Si- 12.16 ,M1)   VolumeControl: Контроль свечи 2016.10 . 31 10 : 06 пройден! Контрольная сумма = 4103 ( 2236 + 1867 )
2016.10 . 31 12 : 18 : 12.109 (Si- 12.16 ,M1)   VolumeControl: Контроль свечи 2016.10 . 31 10 : 07 пройден! Контрольная сумма = 5009 ( 1082 + 3927 )
2016.10 . 31 12 : 18 : 12.109 (Si- 12.16 ,M1)   VolumeControl: Контроль свечи 2016.10 . 31 10 : 08 пройден! Контрольная сумма = 3121 ( 1479 + 1642 )
2016.10 . 31 12 : 18 : 12.110 (Si- 12.16 ,M1)   VolumeControl: Контроль свечи 2016.10 . 31 10 : 09 пройден! Контрольная сумма = 3760 ( 1046 + 2714 )

여기, 현지화된 "JOB"이 있습니다! 나 자신은 여기에 컨트롤을 그리지 않고 괄호 안의 값을 조정하지 않으며 필요하지 않습니다. 그런데 에러가 나는데 서버를 바꿔서 수정합니다!

이것은 히스토리 컨트롤의 로그입니다(표시기가 시작될 때 / "업데이트" 버튼을 눌렀을 때).

 

그리고 이제 오류 #1에 대해.

마켓 오픈 후 얼마 후(약 40분 경과). 표시기를 완전히 다시 계산하면 10.00에서 양초를 확인하는 데 더 이상 오류가 없습니다! 서버를 전환하지 않고도. 마치 누군가 서버에 스토리를 업로드한 것처럼.

 

오류 #2에 대한 또 다른 관찰:

Если по какой-то причине возникает ошибка контроля объемов на свече после 10.00 в реальном времени, то эта же ошибка возникает и на истории. Однако! Если изменить сервер - ошибка на истории пропадает. 

이전에 수신된 틱은 시스템에 로컬로 캐시되고 서버 변경 후에만 덮어쓰여지는 것 같습니다. 좋겠지만 전액을 수령할 경우를 대비하여! 그래서 역사의 오류는 축적된다는 것이 밝혀졌습니다. 그리고 거래 서버를 변경해야만 제거할 수 있습니다(적어도 저는 이 방법만 알고 있습니다).
사유: