mql5 언어의 특징, 미묘함 및 작업 방법 - 페이지 29

 
안드레이 딕 :

테스트할 때 미세한 데이터가 더 신뢰할 수 있는 것으로 간주됩니다.

분 막대가 더 안정적입니까? 틱 데이터는 최후의 수단이 아닌가요? 고려되지 않은 경우 실제 틱 데이터가 왜 필요합니까?

나는 순진하게 이것을 하곤 했습니다. 몇 분 동안 테스트한 다음 틱에 대해 테스트한 다음 최종 정밀 검사로 실제 틱에 대해 테스트했습니다. 이제 세 번째 검사에 특별한 의미가 없다는 것을 이해합니다.


여기에서 다리가 자랍니다.

https://www.mql5.com/ru/forum/188047

Не совпадают цены тестера и CopyTicks, или неверная синхронизация?
Не совпадают цены тестера и CopyTicks, или неверная синхронизация?
  • www.mql5.com
Пытаюсь сделать мультивалютный советник,но с фьючами. Запускаем в тестере простой советник на ближнем фьюче,т.к. он более живой...
 
블라디미르 카르푸토프 :


문맥에서 문장을 가져갈 필요가 없습니다. 문구는 다음과 같습니다.

보시다시피 조작을 시도하지 않으면 인증서를 잘못 해석한 것으로 판명됩니다.

나는 아무것도 조작하지 않았습니다. 매뉴얼은 회의록이 가장 중요하다고 분명히 명시하고 있습니다. 눈금 데이터가 없기 때문에 분 막대에 따라 눈금 이 생성 됩니다.

제 생각에는 "실제 틱" 모드에서 실제 틱으로 분 타임프레임을 구성해야 합니다. 그렇지 않으면 이 모드에서 의미가 없습니다.

 
안드레이 딕 :

제 생각에는 "실제 틱" 모드에서 실제 틱으로 분 타임프레임을 구성해야 합니다. 그렇지 않으면 이 모드에서 의미가 없습니다.


04/02/17에서 04/08/17까지 실제 틱이 발생하는 상황으로 이어집니다.

 2017.04 . 08 18 : 06 : 17.780 сколько тиков (GOLD- 9.17 ,H1)    Колво тиков за 2017.04 . 02 00 : 00 : 00 = 116844

테스터는 88개의 기존 분 막대에 대해서만 눈금을 사용합니다. 다른 모든 진드기는 어딘가에 존재합니다 ...

 2017.04 . 08 18 : 05 : 17.263 Core 1   GOLD- 9.17 ,M1: 5918 ticks, 88 bars generated. Environment synchronized in 0 : 00 : 00.070 . Test passed in 0 : 00 : 03.125 (including ticks preprocessing 0 : 00 : 00.070 ).
2017.04 . 08 18 : 05 : 17.263 Core 1   GOLD- 9.17 ,M1: total time from login to stop testing 0 : 00 : 03.195 (including 0 : 00 : 02.944 for history data synchronization)
2017.04 . 08 18 : 05 : 17.263 Core 1    166135 total ticks for all symbols
2017.04 . 08 18 : 05 : 17.263 Core 1   GOLD- 9.17 : generate 5918 ticks in 0 : 00 : 00.020 , passed to tester 5918 ticks
 
테스터 로그
GOLD- 6.17 ,H1: testing of Experts\fxsaber\Test2.ex5 from 2017.04 . 03 00 : 00 to 2017.04 . 08 00 : 00 started
GOLD- 6.17 : real ticks begin from 2017.04 . 03 00 : 00 : 00
final balance 100000.00 EUR
GOLD- 6.17 ,H1: 145777 ticks , 70 bars generated. Environment synchronized in 0 : 00 : 01.388 . Test passed in 0 : 00 : 00.062 (including ticks preprocessing 0 : 00 : 00.031 ).

하지만 실제 틱의 수


이것은 Metaquotes 데모입니다.

매주 147,700개의 실제 틱이 있으며 가장 정확한 모드의 테스터는 145,777개의 틱을 제공합니다.

 
fxsaber :
테스터 로그

하지만 실제 틱의 수


이것은 Metaquotes 데모입니다.

매주 147,700개의 실제 틱이 있으며 가장 정확한 모드의 테스터는 145,777개의 틱을 제공합니다.


여러 M1 막대가 누락되었으며 벤치마크가 이를 기반으로 하기 때문에 테스터는 실제보다 적은 틱을 사용합니다.

먼 미래를 더 잘 볼수록 그림이 더 명확해집니다.

 
kaus_bonus :


여러 M1 막대가 누락되었으며 벤치마크가 이를 기반으로 하기 때문에 테스터는 실제보다 적은 틱을 사용합니다.

마지막 가격이 있을 때 M1 막대가 형성됩니다. 그것이 없으면 바가 없습니다. 그리고 그 당시에 입찰/매도 틱이 있었다는 사실은 무시됩니다!

저것들. 문제는 테스터뿐만 아니라 막대 형성 알고리즘에도 있습니다.

먼 미래를 더 잘 볼수록 그림이 더 명확해집니다.

위에서 쓴 것처럼 그러한 상황이 가장 자주 발생하는 것은 먼 미래에 있습니다.

당신은 이것을 올바르게 알아차렸고, 나는 이 상황에 대한 더 명확한 증거만을 제시할 것입니다.

GOLD- 9.17 ,H1: testing of Experts\fxsaber\Test2.ex5 from 2017.04 . 03 00 : 00 to 2017.04 . 08 00 : 00 started
GOLD- 9.17 : real ticks begin from 2017.04 . 03 00 : 00 : 00
final balance 100000.00 EUR
GOLD- 9.17 ,H1: 5918 ticks , 39 bars generated. Environment synchronized in 0 : 00 : 00.032 . Test passed in 0 : 00 : 00.046 .

가장 정확한 모드에는 116844개의 실제 틱, 5918개의 테스터 틱이 있으며 20배 미만입니다.


PS 이 상황이 테스터가 동일한 틱을 누락했기 때문이라는 가설에 대한 반박

 #include <TypeToBytes.mqh>

#define TOSTRING(A) #A + " = " + ( string )(A) + " "

void OnStart ()
{
   MqlTick Ticks[];
  
   const int Amount = CopyTicksRange( _Symbol , Ticks, COPY_TICKS_ALL , D'2017.04.03' * 1000 , D'2017.04.08' * 1000 );
  
   int Count = 1 ;
  
   for ( int i = 1 ; i < Amount; i++)
     if (_R(Ticks[i]) != Ticks[i - 1 ])
      Count++;
      
   Print (TOSTRING(Amount) + TOSTRING(Count));
}
결과
Test2 (GOLD- 9.17 ,H1)    Amount = 116844 Count = 116840

4개의 동일한 틱만 놓칠 수 있습니다.

 
MqlTick을 문자열로 변환

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

라이브러리: Price_Compare

fxsaber , 2016.10.19 17:18

string GetTickFlag( uint tickflag )
{
   string flag = "" ;

#define TICKFLAG_MACRO(A) flag += (( bool )(tickflag & TICK_FLAG_ ##A)) ? " TICK_FLAG_" + #A : "" ;
  TICKFLAG_MACRO(BID)
  TICKFLAG_MACRO(ASK)
  TICKFLAG_MACRO(LAST)
  TICKFLAG_MACRO(VOLUME)
  TICKFLAG_MACRO(BUY)
  TICKFLAG_MACRO(SELL)
#undef TICKFLAG_MACRO

   if (flag == "" )
    flag = " FLAG_UNKNOWN (" + ( string )tickflag + ")" ;
    
   return (flag);
}

#define TOSTRING(A) " " + #A + " = " + ( string )Tick.A

string TickToString( const MqlTick &Tick )
{
   return (TOSTRING(time) + "." + ( string ) IntegerToString (Tick.time_msc % 1000 , 3 , '0' ) +
         TOSTRING(bid) + TOSTRING(ask) + TOSTRING(last)+ TOSTRING(volume) + GetTickFlag(Tick.flags));
}

void OnStart ()
{
   MqlTick Tick;
  
   if ( SymbolInfoTick ( _Symbol , Tick))
     Print (TickToString(Tick));
}
결과
time = 2017.04 . 07 23 : 58 : 18.000 bid = 110620.0 ask = 110640.0 last = 110630.0 volume = 1 TICK_FLAG_BID TICK_FLAG_ASK TICK_FLAG_LAST TICK_FLAG_VOLUME
 
fxsaber :
MqlTick을 문자열로 변환
결과

읽을 수 없음 :

time = 2017.04 . 07 23 : 58 : 18.000 bid = 110620.0 ask = 110640.0 last = 110630.0 volume = 1 TICK_FLAG_BID TICK_FLAG_ASK TICK_FLAG_LAST TICK_FLAG_VOLUME
 
데니스 키리첸코 :

읽을 수 없음 :

이해하지 못했습니다. 나는 간단한 구조, 유형 및 배열을 인쇄하는 데 이 옵션을 사용합니다.

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

메타에디터 빌드 1463

fxsaber , 2016.11.10 10:42

 class PRINTCLASS
{
public :  
   template < typename T>
   static void MyPrint( const T &Value )
  {
    T Array[ 1 ];
    
    Array[ 0 ] = Value;
    
    ::ArrayPrint(Array, _Digits , NULL , 0 , WHOLE_ARRAY , ARRAYPRINT_HEADER|ARRAYPRINT_LIMIT|ARRAYPRINT_ALIGN);
  }
  
   template < typename T>
   static void MyPrint( const T Value )
  {
    :: Print (Value);
  }

   template < typename T>
   static void MyPrint( const T &Value[] )
  {
    ::ArrayPrint(Value);
  }
};

#define Print (A) PRINTCLASS::MyPrint(A)

void OnStart ()
{
   MqlTick Tick;
  
   if ( SymbolInfoTick ( _Symbol , Tick))
     Print (Tick);
}

결과
             [time]   [bid]   [ask]  [last] [volume]    [time_msc] [flags]
2017.04 . 07 23 : 58 : 18    110620    110640    110630          1 1491609498000        30

모든 것은 목표에 달려 있습니다.
 
이 주제와 관련이 없는 댓글은 " MQL4에 대한 모든 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 "으로 이동되었습니다.