실시간 틱 - 페이지 10

 
prostotrader :

투자자 : FfiR87ty (읽기 전용 비밀번호)

다른 계좌번호가 필요합니다

 
prostotrader :

어떻게 못봤어?

그리고 그게 뭐야?

이것은 어떻게 해서든 로그에 기록된 것과 동일한 가격의 틱입니다(없어야 함). 그들이 쳤던 이유 - 오프너를 확인하겠습니다.

패스가 없습니다.

 
Andrey Khatimlianskii :

여기 팬은 단 한 명, 바로 당신입니다.

나는 기술 정보를 가지고 일한다.

이 주제의 유리를 단어에서 분석하는 작업은 전혀 없었습니다. 작업 조건에 따라 가격 변동이 없는 틱은 필요하지 않습니다.

분명히, 당신이 이겼다고 생각 하세요(상황이 명백하기 때문에 계속하는 것은 어리석은 일입니다). 그러나 당신은 전혀 설득 하지 못했습니다!

반복합니다. 모두가 무엇을, 어떻게 할 것인지 선택합니다!

행운을 빕니다!

 
Andrey Khatimlianskii :

다른 계좌번호가 필요합니다

기차


 
prostotrader :

너 고의가 아닌거 같아 한표만 찍어

따라서 이 시간(0, 즉 현재 시간) 이전의 모든 것을 건너뜁니다!

내 구현은 모든 틱을 계산합니다.

귀하의 코드는 이러한 테스트에 적합하지 않습니다 !

또한, 당신은 부주의합니다:

         if ( last_tick_time <= 0 )
        {
                 if ( CopyTicks ( _Symbol , cur_ticks, COPY_TICKS_ALL , 0 , 1 ) > 0 )
...
        }
         if ( last_tick_time > 0 )
        {
                 int new_ticks = CopyTicks ( _Symbol , cur_ticks, COPY_TICKS_ALL , last_tick_time, 0 );

이것이 없으면 EA는 항상 각 이벤트 핸들러에서 하나의 틱을 수신하지만 그렇지 않습니다.

 
prostotrader :

당신이 이겼다고 생각 하는 것은 분명하지만(상황의 명확성을 위해 계속하는 것은 어리석은 일입니다), 당신은 전혀 확신하지 못했습니다 !

반복합니다. 모두가 무엇을, 어떻게 할 것인지 선택합니다!

행운을 빕니다!

멋진!

그들은 와서 작업을 이해하지 못하고 FORTS 플래그를 흔들고 이벤트 핸들러에 대해 오도했으며 잘못된 증거에 대한 응답으로 행운을 빌고 덤프했습니다.

그리고 가장 중요한 것은 그들이 당신이 무엇을 잘못 알고 있는지 이해하지 못했다는 것입니다.


당신에게도 행운을 빕니다!

 
prostotrader :

기차

덕분에 가입했습니다.

결과는 비슷합니다. OnBuk은 OnTick에 비해 종종 지연됩니다.


그리고 어떤 상황에서 OnTick이 훨씬 더 나을 수 있는지(심지어 ON FORTS! 당신을 포함하여!), 당신이 틀렸음을 인정할 때 보여줄 것입니다.

 

그건 그렇고, 올바른 진드기 수집에 대한 Vasily Sokolov의 훌륭한 기사 가있었습니다. 거기에서 동기화 프로세스가 자세히 분석됩니다(내가 가지고 있지 않기 때문에 동일한 눈금이 때때로 인쇄됨).

Но функция CopyTiks не позволяет запрашивать N последних тиков. Вместо этого она предоставляет все тики, пришедшие с указанного момента времени. Это усложняет задачу. Мы должны выполнить запрос, получить массив тиков и сравнить его с массивом тиков, полученным на предыдущем обновлении. При этом мы выясним, какие из вновь пришедших тиков не входили в "прошлую поставку", то есть являются новыми. Но сравнивать тики между собой напрямую невозможно, просто потому что видимых различий между ними может вообще не быть. Например, обратимся к нижеприведенной таблице сделок:

쌀. 5. 동일한 거래의 예가 있는 모든 거래의 표.

우리는 절대적으로 동일한 진드기의 두 그룹을 즉시 볼 수 있습니다. 빨간색 프레임으로 표시되어 있으며 시간, 수량, 방향 및 가격이 동일합니다. 그래서 우리는 개별 진드기를 서로 비교하는 것이 불가능하다는 것을 확인합니다.

그러나 틱 그룹을 비교할 수 있습니다. 두 그룹의 틱이 같으면 마지막 가격 업데이트 동안 이러한 틱과 후속 틱이 이미 분석되었다고 결론을 내릴 수 있습니다.

Пишем скальперский стакан цен на основе графической библиотеки CGraphic
Пишем скальперский стакан цен на основе графической библиотеки CGraphic
  • www.mql5.com
Именно с этой, улучшенной и дополненной версией мы и начнем работать, чтобы постепенно превратить ее в скальперский стакан цен. Краткий обзор графической библиотеки CPanel Созданию пользовательских интерфейсов в MQL5 посвящено много статей. Среди них особенно выделяется серия Анатолия Кажарского "Графические интерфейсы", после которой сложно...
 
테스트 고문이 작성했습니다.
 int OnInit ()
{
   return (! MarketBookAdd ( _Symbol )); // Подписались на стакан.
}

void OnDeinit ( const int )
{
   MarketBookRelease ( _Symbol ); // Отписались от стакана.
}

// Получает BestBands
bool GetBidAsk( double &PriceBid, double &PriceAsk, const MqlBookInfo &MarketDepth[] )
{  
  PriceAsk = 0 ;
  
   const int Size = ArraySize (MarketDepth);
   int Pos = 0 ;
  
   while ((Pos < Size) && (MarketDepth[Pos].type == BOOK_TYPE_SELL ))
  {
    PriceAsk = MarketDepth[Pos].price;
    
    Pos++;
  }
    
  PriceBid = (Pos < Size) ? MarketDepth[Pos].price : 0 ;
  
   return ( true );
}

// Получает последний известный тик.
bool GetLastTick( const string &Symb, MqlTick &Tick )
{
   static MqlTick Ticks[ 1 ];
  
   const bool Res = SymbolInfoTick (Symb, Tick) && ( CopyTicks (Symb, Ticks, COPY_TICKS_INFO , 0 , 1 ) == 1 );
  
   if (Res && (Ticks[ 0 ].time_msc > Tick.time_msc))
    Tick = Ticks[ 0 ];
  
   return (Res);
}

// Получает тики через стакан и стандартным методом.
bool GetLastTicks( const string &Symb, MqlTick &Tick, MqlTick &TickBook )
{
   MqlBookInfo MarketDepth[];

   return ( MarketBookGet (Symb, MarketDepth) && GetLastTick(Symb, Tick) && GetBidAsk(TickBook.bid, TickBook.ask, MarketDepth));
}

// Сравнивает тики.
bool IsDiff( const MqlTick &Tick1, const MqlTick &Tick2 )
{
   return ((Tick1.bid != Tick2.bid) || (Tick1.ask != Tick2.ask));
}

#define TOSTRING(A) (FuncName + " " + #A + ": " + ( string )A.bid + "/" + ( string )A.ask + "\n" )

// Распечатываем тики, полученные разными способами.
void TestFunc( const string FuncName )
{
   static MqlTick Tick = { 0 };
   static MqlTick Book = { 0 };

   if (GetLastTicks( _Symbol , Tick, Book))
     Print ((IsDiff(Tick, Book) ? "* " : NULL ) + TOSTRING(Tick) + TOSTRING(Book)); // Если тики отличаются, добавляем '*'.
}

void OnTick ()
{
  TestFunc( __FUNCTION__ ); // Распечатываем тики, полученные разными способами.
}

void OnBookEvent ( const string &Symb )
{  
   if (Symb == _Symbol )
    TestFunc( __FUNCTION__ ); // Распечатываем тики, полученные разными способами.
}


결과는 좋지 않습니다. OnTick/OnBookEvent에서 다른 방식으로 수신된 틱은 매우 자주 동일한 On-function 내에서 바로 일치하지 않습니다. 동시에 어떤 기능에서 틱을 얻는 방법이 관련이 있고 관련이 없는지 결정하는 것은 불가능합니다. 끔찍한 불확실성.


유리 자체가 오래되었을 때 발생하는 것 같습니다.

 

시도 해봐:

 //+------------------------------------------------------------------+
//|                                                   Ticks_test.mq5 |
//|                                      Copyright 2019 prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019 prostotrader"
#property link        "https://www.mql5.com"
#property version    "1.00"
//---
bool is_book;
MqlTick ticks[];
ulong last_time, mem_cnt;
bool is_first;
int t_cnt, result;
enum ENUM_BOOK_OR_TICK
{
        USE_BOOK,       // Use OnBookEvent
        USE_TICK         // Use OnTick
};

input ENUM_BOOK_OR_TICK Mode = USE_BOOK;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
{
  is_book = MarketBookAdd ( Symbol ());
  result = CopyTicks ( Symbol (), ticks, COPY_TICKS_ALL , 0 , 1 );
   if (result > 0 )
  {
    last_time = ulong (ticks[ 0 ].time_msc);
    is_first = true ;
  }
   else
  {
    is_first = false ;
     Alert ( "No start time!" );
     return ( INIT_FAILED );
  }   
   return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+ 
//| возвращает строковое описание тика                               | 
//+------------------------------------------------------------------+ 
string GetTickDescription( MqlTick &tick) 
  { 
   string res = string (tick.time) + "." +   string (tick.time_msc% 1000 ); 
// 
   bool buy_tick = ((tick.flags& TICK_FLAG_BUY )== TICK_FLAG_BUY ); 
   bool sell_tick = ((tick.flags& TICK_FLAG_SELL )== TICK_FLAG_SELL ); 
   bool ask_tick = ((tick.flags& TICK_FLAG_ASK )== TICK_FLAG_ASK ); 
   bool bid_tick = ((tick.flags& TICK_FLAG_BID )== TICK_FLAG_BID ); 
   bool last_tick = ((tick.flags& TICK_FLAG_LAST )== TICK_FLAG_LAST ); 
   bool volume_tick = ((tick.flags& TICK_FLAG_VOLUME )== TICK_FLAG_VOLUME ); 
// 
   if ((buy_tick== true ) || (sell_tick == true )) 
   { 
     res = res + (buy_tick? StringFormat ( " Buy Tick: Last=%G Volume=%d " ,tick.last,tick.volume): "" ); 
     res = res + (sell_tick? StringFormat ( " Sell Tick: Last=%G Volume=%d " ,tick.last,tick.volume): "" ); 
     res = res + (ask_tick? StringFormat ( " Ask=%G " ,tick.ask): "" ); 
     res = res + (bid_tick? StringFormat ( " Bid=%G " ,tick.ask): "" ); 
   } 
   else 
   { 
     res = res + (ask_tick? StringFormat ( " Ask=%G " ,tick.ask): "" ); 
     res = res + (bid_tick? StringFormat ( " Bid=%G " ,tick.ask): "" ); 
     res = res + (last_tick? StringFormat ( " Last=%G " ,tick.last): "" ); 
     res = res + (volume_tick? StringFormat ( " Volume=%d " ,tick.volume): "" ); 
   } 
   return res; 
  } 
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
{
   if (is_book == true ) MarketBookRelease ( Symbol ());
}
//+------------------------------------------------------------------+
//| BookEvent function                                               |
//+------------------------------------------------------------------+
//void OnTick()
void OnBookEvent ( const string &symbol)
{
   if ( Mode != USE_BOOK || symbol != Symbol () ) return ;
   if ( Symbol () == symbol)
  {
     if (is_first == true )
    {
      result = CopyTicks ( Symbol (), ticks, COPY_TICKS_ALL , last_time, 0 );
       if (result > 0 )
      {
       //  Print("First packet of ticks:");
        t_cnt = 0 ;
         for ( int i= 0 ; i<result; i++)
        {
           if (ticks[i].time_msc == ticks[ 0 ].time_msc) t_cnt++;
           Print ( __FUNCTION__ , ": " ,GetTickDescription(ticks[i]));
        }
        is_first = false ;
        last_time = ulong (ticks[ 0 ].time_msc);
      } 
    }
     else
    {
      result = CopyTicks ( Symbol (), ticks, COPY_TICKS_ALL , last_time, 0 );
       if (result > 0 )
      {
         if (result > t_cnt)
        {
          mem_cnt = t_cnt;
          t_cnt = 0 ;
           for ( int i= 0 ; i<(result - int (mem_cnt)); i++)
          {
             if (ticks[i].time_msc == ticks[ 0 ].time_msc) t_cnt++;
             Print ( __FUNCTION__ , ": " ,GetTickDescription(ticks[i]));
          } 
           if (last_time == ulong (ticks[ 0 ].time_msc))
          {
            t_cnt += int (mem_cnt);
          }
           else last_time = ulong (ticks[ 0 ].time_msc + 1 );
        }
         else
        {
          t_cnt = 0 ;
          last_time++;
        }
      }
       else
      {
        t_cnt = 0 ;
        last_time++;
         Print ( __FUNCTION__ , ": Pending order!" );
      }
    }
  }
}

void OnTick ()
{
   if ( Mode != USE_TICK ) return ;
   if (is_first == true )
    {
      result = CopyTicks ( Symbol (), ticks, COPY_TICKS_ALL , last_time, 0 );
       if (result > 0 )
      {
     //    Print("First packet of ticks:");
        t_cnt = 0 ;
         for ( int i= 0 ; i<result; i++)
        {
           if (ticks[i].time_msc == ticks[ 0 ].time_msc) t_cnt++;
           Print ( __FUNCTION__ , ": " , GetTickDescription(ticks[i]));
        }
        is_first = false ;
        last_time = ulong (ticks[ 0 ].time_msc);
      } 
    }
     else
    {
      result = CopyTicks ( Symbol (), ticks, COPY_TICKS_ALL , last_time, 0 );
       if (result > 0 )
      {
         if (result > t_cnt)
        {
          mem_cnt = t_cnt;
          t_cnt = 0 ;
           for ( int i= 0 ; i<(result - int (mem_cnt)); i++)
          {
             if (ticks[i].time_msc == ticks[ 0 ].time_msc) t_cnt++;
             Print ( __FUNCTION__ , ": " , GetTickDescription(ticks[i]));
          } 
           if (last_time == ulong (ticks[ 0 ].time_msc))
          {
            t_cnt += int (mem_cnt);
          }
           else last_time = ulong (ticks[ 0 ].time_msc + 1 );
        }
         else
        {
          t_cnt = 0 ;
          last_time++;
        }
      }
       else
      {
        t_cnt = 0 ;
        last_time++;
         Print ( __FUNCTION__ , ": Pending order!" );
      }
    }
  
}
//+------------------------------------------------------------------+

GetTickCount64() 가 없어도 함수가 어떻게 작동하는지 볼 수 있습니다.

 2020.01 . 31 17 : 01 : 56.363 Ticks_test (GOLD- 3.20 ,H1)       OnTick : 2020.01 . 31 17 : 01 : 47.889 Ask= 1585.4 
2020.01 . 31 17 : 01 : 57.294 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : 2020.01 . 31 17 : 01 : 50.159 Bid= 1585.4 
2020.01 . 31 17 : 01 : 57.637 Ticks_test (GOLD- 3.20 ,H1)       OnTick : 2020.01 . 31 17 : 01 : 47.889 Ask= 1585.4 
2020.01 . 31 17 : 01 : 57.637 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : 2020.01 . 31 17 : 01 : 50.159 Bid= 1585.4 
2020.01 . 31 17 : 01 : 57.690 Ticks_test (GOLD- 3.20 ,H1)       OnTick : 2020.01 . 31 17 : 01 : 47.889 Ask= 1585.4 
2020.01 . 31 17 : 01 : 57.690 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : 2020.01 . 31 17 : 01 : 50.159 Bid= 1585.4 
2020.01 . 31 17 : 01 : 57.730 Ticks_test (GOLD- 3.20 ,H1)       OnTick : 2020.01 . 31 17 : 01 : 47.889 Ask= 1585.4 
2020.01 . 31 17 : 01 : 57.730 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : 2020.01 . 31 17 : 01 : 50.159 Bid= 1585.4 
2020.01 . 31 17 : 01 : 58.293 Ticks_test (GOLD- 3.20 ,H1)       OnTick : 2020.01 . 31 17 : 01 : 47.889 Ask= 1585.4 
2020.01 . 31 17 : 01 : 58.294 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : 2020.01 . 31 17 : 01 : 50.159 Bid= 1585.4 
2020.01 . 31 17 : 01 : 58.519 Ticks_test (GOLD- 3.20 ,H1)       OnTick : 2020.01 . 31 17 : 01 : 47.889 Ask= 1585.4 
2020.01 . 31 17 : 01 : 58.519 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : 2020.01 . 31 17 : 01 : 51.444 Bid= 1585.4 
2020.01 . 31 17 : 01 : 58.519 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : 2020.01 . 31 17 : 01 : 51.444 Bid= 1585.4 
2020.01 . 31 17 : 01 : 58.519 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : 2020.01 . 31 17 : 01 : 51.536 Bid= 1585.4 
2020.01 . 31 17 : 01 : 58.519 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : 2020.01 . 31 17 : 01 : 52.107 Ask= 1585.5 
2020.01 . 31 17 : 01 : 58.519 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : 2020.01 . 31 17 : 01 : 52.326 Ask= 1585.4 
2020.01 . 31 17 : 01 : 59.674 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : 2020.01 . 31 17 : 01 : 51.536 Bid= 1585.4 
2020.01 . 31 17 : 01 : 59.861 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : 2020.01 . 31 17 : 01 : 52.107 Ask= 1585.5 
2020.01 . 31 17 : 02 : 00.530 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : 2020.01 . 31 17 : 01 : 52.326 Ask= 1585.4 
2020.01 . 31 17 : 02 : 01.189 Ticks_test (GOLD- 3.20 ,H1)       OnTick : 2020.01 . 31 17 : 01 : 47.889 Ask= 1585.4 
2020.01 . 31 17 : 02 : 01.216 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : 2020.01 . 31 17 : 01 : 55.7 Ask= 1585.5 
2020.01 . 31 17 : 02 : 01.492 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : Pending order!
2020.01 . 31 17 : 02 : 01.707 Ticks_test (GOLD- 3.20 ,H1)       OnTick : 2020.01 . 31 17 : 01 : 47.889 Ask= 1585.4 
2020.01 . 31 17 : 02 : 01.707 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : 2020.01 . 31 17 : 01 : 55.530 Ask= 1585.4 
2020.01 . 31 17 : 02 : 01.967 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : Pending order!
2020.01 . 31 17 : 02 : 01.989 Ticks_test (GOLD- 3.20 ,H1)       OnTick : 2020.01 . 31 17 : 01 : 47.889 Ask= 1585.4 
2020.01 . 31 17 : 02 : 01.989 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : 2020.01 . 31 17 : 01 : 55.790 Bid= 1585.4 
2020.01 . 31 17 : 02 : 02.287 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : Pending order!
2020.01 . 31 17 : 02 : 02.641 Ticks_test (GOLD- 3.20 ,H1)       OnTick : 2020.01 . 31 17 : 01 : 47.889 Ask= 1585.4 
2020.01 . 31 17 : 02 : 02.641 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : 2020.01 . 31 17 : 01 : 56.104 Ask= 1585.5 
2020.01 . 31 17 : 02 : 02.888 Ticks_test (GOLD- 3.20 ,H1)       OnTick : 2020.01 . 31 17 : 01 : 47.889 Ask= 1585.4 
2020.01 . 31 17 : 02 : 03.050 Ticks_test (GOLD- 3.20 ,H1)       OnTick : 2020.01 . 31 17 : 01 : 47.889 Ask= 1585.4 
2020.01 . 31 17 : 02 : 03.050 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : 2020.01 . 31 17 : 01 : 56.691 Ask= 1585.6 
2020.01 . 31 17 : 02 : 03.050 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : 2020.01 . 31 17 : 01 : 56.869 Bid= 1585.6 
2020.01 . 31 17 : 02 : 03.376 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : 2020.01 . 31 17 : 01 : 56.869 Bid= 1585.6 
2020.01 . 31 17 : 02 : 03.468 Ticks_test (GOLD- 3.20 ,H1)       OnTick : 2020.01 . 31 17 : 01 : 47.889 Ask= 1585.4 
2020.01 . 31 17 : 02 : 03.708 Ticks_test (GOLD- 3.20 ,H1)       OnTick : 2020.01 . 31 17 : 01 : 47.889 Ask= 1585.4 
2020.01 . 31 17 : 02 : 03.708 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : 2020.01 . 31 17 : 01 : 57.286 Ask= 1585.5   Bid= 1585.5 
2020.01 . 31 17 : 02 : 03.708 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : 2020.01 . 31 17 : 01 : 57.440 Ask= 1585.6   Bid= 1585.6 
2020.01 . 31 17 : 02 : 04.860 Ticks_test (GOLD- 3.20 ,H1)       OnTick : 2020.01 . 31 17 : 01 : 47.889 Ask= 1585.4 
2020.01 . 31 17 : 02 : 04.860 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : 2020.01 . 31 17 : 01 : 57.440 Ask= 1585.6   Bid= 1585.6 
파일:
20200131.log  28 kb