リアルタイムで見るTiki - ページ 5

 
Aleksey Mavrin:

ダニは一度に複数のフラグを持つことはできないのですか?

確かに、そうですね。

//+------------------------------------------------------------------+
//|                                                   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;
//+------------------------------------------------------------------+
//| 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(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(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(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++;
      }
    }
  }
}
//+------------------------------------------------------------------+
全ティックコレクタの原理を示しましたが、このコードはお好みでお使いください(全フラグを抽出します)。
 
Aleksey Mavrin:

しかし、だからといって、すべてのOnBookEventイベントを処理する保証はあるのでしょうか?

方法

 
prostotrader:

繰り返し

OnBookEvent()は、まさに新しいティックのバッチが 到着したことを保証するものなのです

株のティックを持っているんですね。

OnTickはまさにティックが来たことを意味し、CopyTicksで全てのパッケージを手に入れることができます。

しかも、どこからでも(チャートイベントからでも)入手できる。OnBookEventにはそれなりの目的があるので、好きなところ、嫌いなところをつつく必要はない。


プロストトレーダー

参考資料より

発行率 です。 端末は各文字ごとに4096ティック(スタックが 動作している文字では65536ティック)をキャッシュに保存して おり、このデータへのクエリーが最速と なる

引用終わり------。

4K last ticksで満足できないなら、ぜひともスタックを購読してください。しかし、これが必要とされる場面は(初動以外では)想像がつきません。

 
prostotrader:

方法

そうですね、ティック履歴だけであれば、これらのイベントのキューを集めて処理する必要は全くありません。

 
Andrey Khatimlianskii:

株のティックを持っているんですね。

OnTickは単にティックが到着したことを意味し、CopyTicksで全パッケージを取得することができます。

しかも、どこからでも(チャートイベントからでも)入手できる。OnBookEventにはそれなりの目的があるので、好きなところ、嫌いなところをつつく必要はない。


4K最後の刻みが足りなければ、もちろんtumblrを購読してください。でも、どこで必要になるのか(初動以外)想像がつきません。

アンドリュー!

リアルタイムの刻み」というテーマで行われました。

ティックはタイマーなどのOnTick()イベントで受信できることを100回指摘する必要はない。

 
prostotrader:

アンドレイ!

テーマは「リアルタイムの刻み」。

タイマーなどのOnTick()イベントでtickを取得できることを100回指摘する必要はないでしょう。

そのとおりです。また、OnBookEventは、OnTimerと同じようにトピックとの関連性があります。

 
Andrey Khatimlianskii:

そのとおりです。そして、OnBookEventはOnTimerと同じように、このテーマと関係があります。

今年は株券の商品で実行

//+------------------------------------------------------------------+
//|                                                   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;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
    is_book = MarketBookAdd(Symbol());
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
    if(is_book == true) MarketBookRelease(Symbol());
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
    Print(__FUNCTION__ + " Tick is done!");
   
  }
//+------------------------------------------------------------------+
//| BookEvent function                                               |
//+------------------------------------------------------------------+
void OnBookEvent(const string &symbol)
  {
    if(Symbol() == symbol)
    {
      Print(__FUNCTION__ + " Tick is done!");
    }
   
  }
//+------------------------------------------------------------------+
 
prostotrader:

今年、株式商品で発売

ありがとう、仕組みがわかったよ。

ちょっと想像してみてください、自分とは違うトレードのやり方があるかもしれないと。

 
Andrey Khatimlianskii:

ありがとうございます、仕組みがわかりました。

ちょっと想像してみてください、自分とは違うトレードのやり方があるかもしれないと。

アンドレイ(以下、敬称 略)。

なぜ「ごちゃごちゃ」なのか?

それとも、リアルタイムで取得するのか、歴史から取得するのかの違いが わからないのでしょうか?

そして、それがもうひとつの取引手法とどのような関係があるのでしょうか。

みんな 思い思いにトレードしたり、ロボットを書いたりしているのです

によって追加されました。

リアルタイムでティックを取得する私の バージョンは好きではありませんか?

そして、あなたの バージョンを投稿してください。

では、別のアプローチで見てみましょうか...。

 
prostotrader:

アンドレイ(失礼 ながら)

なぜ「ごちゃごちゃ」なのか?

それとも、リアルタイムで取得するのか、歴史から取得するのかの違いが わからないのでしょうか?

そして、それがもうひとつの取引手法とどのような関係があるのでしょうか。

みんな 思い思いにトレードしたり、ロボットを書いたりしているのです

によって追加されました。

リアルタイムでティックを取得する私の バージョンは好きではありませんか?

そして、あなたの バージョンを投稿してください。

では、違うアプローチで見てみましょうか...。

コード中の OnBookEventをOnTickに置き換えて、結果を比較してみてください。