실시간 틱 - 페이지 7

 
prostotrader :

무언가를 증명하거나 반증하려면 코드를 게시해야 합니다!

이웃하는 OnTick 이벤트 사이에 레코드가 있음을 증명하는 데 착수했으며, 이 레코드는 CopyTicks 기록에 포함되고 OnBookEvent를 통해 실시간으로 포착될 수 있습니다.

불행히도 이것은 주어진 로그에서 볼 수 없습니다.

 
fxsaber :

이웃하는 OnTick 이벤트 사이에 레코드가 있음을 증명하는 데 착수했으며, 이 레코드는 CopyTicks 기록에 포함되고 OnBookEvent를 통해 실시간으로 포착될 수 있습니다.

불행히도 이것은 주어진 로그에서 볼 수 없습니다.

작동하는 코드를 게시하고 왜 더 빠르고 실시간으로 작동하는지 설명하여 증명했습니다.

MQL5 기능 및 개인적인 경험에 대한 참조를 기반으로 합니다.

직접 확인하고 싶습니다. 또는 작업 코드로 그 반대를 증명하십시오.

 
prostotrader :

작동 코드를 게시하고 더 빠르고 실시간으로 작동하는 이유를 설명하여 이를 증명했습니다.

불행히도 CopyTicks 기록의 누락 OnTick 기록 형식의 주요 증거가 누락 된 경우 허용되지 않습니다.

 
fxsaber :

불행히도 CopyTicks 기록의 누락 OnTick 기록 형식의 주요 증거가 누락 된 경우 허용되지 않습니다.

무슨 일이야?

직접 확인하세요.

 
prostotrader :

무슨 일이야?

직접 확인하세요.

그는 당신의 증명이 논리적 고려만으로 받아들여질 수 없으며 다른 관점과 모순되지 않는다는 점만 지적했습니다.

 
fxsaber :

그는 당신의 증명이 논리적 고려만으로 받아들여질 수 없으며 다른 관점과 모순되지 않는다는 점만 지적했습니다.

알겠습니다. 하지만 여전히 OnBookEvent()에 대한 도움말을 읽으라고 조언합니다.

나는 아무것도 증명하지 않을 것이고, 나는 단지 topic topic 에서 작동하는 코드를 작성하고 설명했습니다 (포럼 회원의 요청에 따라)

이 방법이 OnTick()보다 나은 이유는 누군가가 믿지 않는다면 그 사람이 직접 확인하게 하십시오!

또는 내 설명을 반박하는 작업 코드를 배치하십시오.

추가됨

여기 포럼에는 OnBookEvent()로 작업한 적이 없는 수천 명의 FOREX 사람들이 있습니다.

그리고 유리로.

이 스레드에 글을 쓸 모든 사람을 위해 무엇을 해야 합니까?

 
prostotrader :

첫 번째 OnTick() 시간 은 2020.01 입니다. 서른 19 : 31 : 11.112

두 번째 OnTick() 시간 은 2020.01 입니다. 서른 19 : 31 : 11.802

즉, 이 690ms 동안 OnTick() 사이에 690ms가 경과했습니다.

OnBookEvent()가 15번 발생했습니다.

이러한 방아쇠 가 진드기와 관련이 없다고 생각하십니까?

마지막 밴드(bid/ask)에 영향을 미치지 않거나 지속되는 주문서의 변경 사항을 틱이라고 부르지 않으면 예, 이러한 트리거는 틱과 관련이 없습니다.


단순 상인 :

많은 사람들이 잊고 있는 또 다른 중요한 점이 있습니다.

이것은 어드바이저가 입력 데이터를 분석하여 결정을 내리는 속도입니다.

OnTick() 대신 OnBookEvent()를 사용하면 내 EA가 귀하 보다 빠를 것입니다.

당신은 착각하고 있습니다. 나는 이것을 천 번째로 당신에게 말합니다.

두 개의 차트에서 하나의 터미널에서 이 EA를 실행하십시오. 하나는 "OnBookEvent 사용" 모드이고 다른 하나는 "OnTick 사용" 모드(입력 매개변수)입니다. 이벤트 핸들러 내부의 코드는 동일합니다.

 //---
enum ENUM_BOOK_OR_TICK
{
        USE_BOOK,       // Use OnBookEvent
        USE_TICK         // Use OnTick
};

input ENUM_BOOK_OR_TICK Mode = USE_BOOK;

//---
bool is_book;
long last_tick_time = 0 ;
MqlTick cur_ticks[], last_tick;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
{
         if ( Mode == USE_BOOK )
        {
                is_book = MarketBookAdd ( Symbol ());
                 if ( !is_book ) Alert ( "MarketBookAdd failed with error #" , GetLastError (), "!" );
        }

        last_tick_time = 0 ;

         return ( INIT_SUCCEEDED );
}

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
{
         if (is_book == true ) MarketBookRelease ( Symbol ());
}

//+------------------------------------------------------------------+
//| BookEvent function                                               |
//+------------------------------------------------------------------+
void OnBookEvent ( const string &symbol)
{
         if ( Mode != USE_BOOK || symbol != _Symbol ) return ;

         if ( last_tick_time <= 0 )
        {
                 if ( CopyTicks ( _Symbol , cur_ticks, COPY_TICKS_ALL , 0 , 1 ) > 0 )
                {
                        last_tick_time = cur_ticks[ 0 ].time_msc;
                        last_tick = cur_ticks[ 0 ];
                }
        }
         if ( last_tick_time > 0 )
        {
                 int new_ticks = CopyTicks ( _Symbol , cur_ticks, COPY_TICKS_ALL , last_tick_time, 0 );
                 for ( int i = 0 ; i < new_ticks; i ++ )
                {
                        PrintTick( "OnBook" , cur_ticks[i] );
                }
                 if ( new_ticks > 0 )
                {
                        last_tick_time = cur_ticks[new_ticks- 1 ].time_msc;
                        last_tick = cur_ticks[new_ticks- 1 ];
                }
        }
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick ()
{
         if ( Mode != USE_TICK ) return ;

         if ( last_tick_time <= 0 )
        {
                 if ( CopyTicks ( _Symbol , cur_ticks, COPY_TICKS_ALL , 0 , 1 ) > 0 )
                {
                        last_tick_time = cur_ticks[ 0 ].time_msc;
                        last_tick = cur_ticks[ 0 ];
                }
        }
         if ( last_tick_time > 0 )
        {
                 int new_ticks = CopyTicks ( _Symbol , cur_ticks, COPY_TICKS_ALL , last_tick_time, 0 );
                 for ( int i = 0 ; i < new_ticks; i ++ )
                {
                        PrintTick( "OnTick" , cur_ticks[i] );
                }
                 if ( new_ticks > 0 )
                {
                        last_tick_time = cur_ticks[new_ticks- 1 ].time_msc;
                        last_tick = cur_ticks[new_ticks- 1 ];
                }
        }
}

void PrintTick( string func_name, MqlTick &tick )
{
         if ( tick.time_msc == last_tick.time_msc &&
                        tick.bid == last_tick.bid &&
                        tick.ask == last_tick.ask &&
                        tick.last == last_tick.last ) return ;
         Print ( GetTickCount64 (), ": tick received from " , func_name, ": " ,
                        tick.time, "   " , tick.time_msc, "  " ,
                         DoubleToString ( tick.bid, _Digits ), " / " ,
                         DoubleToString ( tick.ask, _Digits ), " / " ,
                         DoubleToString ( tick.last, _Digits ) );
};

그런 다음 Expert Advisors 로그를 살펴보고 틱 수신 시간을 분석하십시오.


흥미로운 것을 발견했다면(예를 들어, OnTick에서 틱( GetTickCount64 )을 얻는 시간이 OnBook에서 유사한 것(같은 틱에 대해)보다 더 긴 시간)을 여기에 게시하십시오.

 
Andrey Khatimlianskii :

마지막 밴드(bid/ask)에 영향을 미치지 않거나 지속되는 주문서의 변경 사항을 틱이라고 부르지 않으면 예, 이러한 트리거는 틱과 관련이 없습니다.


당신은 착각하고 있습니다. 나는 이것을 천 번째로 당신에게 말합니다.

두 개의 차트에서 하나의 터미널에서 이 EA를 실행하십시오. 하나는 "OnBookEvent 사용" 모드이고 다른 하나는 "OnTick 사용" 모드(입력 매개변수)입니다. 이벤트 핸들러 내부의 코드는 동일합니다.

그런 다음 Expert Advisors 로그를 살펴보고 틱 수신 시간을 분석하십시오.


흥미로운 것을 발견하면(예: OnTick에서 틱(GetTickCount64)을 수신하는 시간이 OnBook에서 유사한 시간(동일한 틱에 대해)보다 긴 경우) 여기에 게시하세요.

내가 말한대로 모두!

로그(협업)의 맨 첫 줄에서 내 설명을 직접 확인

OnTick()은 나중에 실행되어 부실 데이터가 발생합니다.


파일:
20200131.log  220 kb
 
prostotrader :

내가 말한대로 모두!

로그(협업)의 맨 첫 줄에서 내 설명을 직접 확인

OnTick()은 나중에 실행되어 부실 데이터가 발생합니다.

이 로그 조각 앞에 몇 가지 정보를 표시하십시오.

출시 직후(최초 녹음)였나요? 고문은 어떤 순서로 시작되었습니까?

ps. 첨부된 로그가 보이네요, 지금부터 살펴보겠습니다.

 
Andrey Khatimlianskii :

이 로그 조각 앞에 몇 가지 정보를 표시하십시오.

출시 직후(최초 녹음)였나요? 고문은 어떤 순서로 시작되었습니까?

먼저 온북, 그 다음 온틱, 로그가 위에 첨부되어 있습니다.