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

 
Roman:

すべてを台無しにした

先ほど書いたように、trade と level2 は異なるデータサブスクリプションなので、それぞれ別のイベントハンドラです。
そのため、トレードはOnTickから、ボリュームギャングはOnBookから呼び出す必要が あるのです。
OnBookイベントからトレードを、OnTickからギャングを呼び出そうとしていますね。OnBookの方がトレードが早いと思いながらね。
速くなるわけではありません。異なるデータスレッドごとに意図された2つのイベントハンドラを比較するのは、妄想だと思うのです。
これはすべて実験であることは理解していますが、ソケットのロジックを理解していないと、このOnTickとOnBookハンドラを延々と混同することになります。

一応、「私にとってはOnBookEvent()の代わりはない」と書いておきました。

そして、すべてのコード、結果、説明-その理由を明確にするために。

あなたの投稿から判断すると - あなたは理解していない...:)

もしかして、メッセージを 読んでる?

OnTick()を使わなくても、OnBookEvent()で全てのデータを素早く簡単に取得できるんです。

が、OnTick()で全てのデータが取得できるわけでは ありません。では、なぜOnTick()を使う必要があるのでしょうか?

 
prostotrader:

一応、「私にとってはOnBookEvent()の代わりはない」と書いておきました。

そして、すべてのコード、結果、説明-その理由を明確にするために。

あなたの投稿から判断すると - それはあなたにとって明確ではありません...:)

もしかして、トピックに 目を通しているのでは?

そうですね、あなたの場合、代替案がないのは当然だと理解しています。
そして、あなたの言っていることがよくわかる。この点を強調したかったのです。トレードとLevel2は異なるデータの流れであるということです。
私たちはそのことを忘れてはいけないし、知らない人は知るべきでしょう。
そのため、トレードが必要な場合は、OnTickからトレードに必要な関数を呼び出す必要があります。
体積やカップの深さなどの入札が必要な場合は、OnBookから適切な関数を呼び出す必要があります。
OnBookからイベントを取得してトレードを取得し、OnTickイベントからボリュームや深さを取得しようとするのは正しくありません。
それで、他の人に説明したり、途中で実験したりしているだけだと理解しています。

 
Roman:



それで、他の人に説明したり、途中で実験したりしているだけだと理解しました。

その通りだ。

7年前に似たような実験をしたばかりですが、私はOnbookEvent()を選びました。

そして今、何かが変わったかどうかを確認することにしました...。それはない。

 
prostotrader:

実は、デリバティブ市場(FORTS)は、「流動性の高い」商品であっても、非常に弱いのです。

適正価格で 購入できる契約数は 非常に限られているので、価格だけではダメということです。

この価格での契約数量は非常に重要 です。


そして、SymbolInfoはこの価格の出来高を出しません。

そのため、ブック全体の価格と数量の両方を提供するMarketBookGet()を使用する必要があります。

それとこのテーマとはどういう関係があるのですか?それだけで詰みます。 OnTickの方が絶対に遅くないので、OnBookは必要ないですね。

また、OnBookが不可欠であることを、なぜ20回ずつ言うのでしょうか。疑っている人はいますか?


プロストトレーダー

また、OnTck()がトリガーされたときに、ヒストリーからティックを取得できるのは納得いきません。

OnTck()が起動したときの最後のティックタイムを記憶しておくことで、ティックを取得できます。

新しいティック(s)がリアルタイムで来た - OnTck()がトリガーされ、我々はすぐに それを読む、つまりそれは履歴ではない

端末に入ってくるティックは、すでに履歴が残っています。

でも、その話ではなく、テープを隙間なく作る(SymbolInfoTickでは どうにもならない)話でした。

 
Aleksey Mavrin:

まず、コードをテストすることを希望

でも、なんかデモのオープナー口座が開けないんです。時間がずれているのか、もっと複雑になっているのか。

リアルタイムで見るTiki

プロストトレーダー さん 2020.01.31 13:18

口座番号:1007932

投資家 :FfiR87ty(読み取り専用パスワード)
 
Andrey Khatimlianskii:

この話題と何か関係があるのでしょうか?それだけに、OnTickの方が絶対に遅くないので、OnBookを使わなくてもティックを取得することができますよ。

また、OnBookが不可欠であることを、なぜ20回ずつ言うのでしょうか。疑っている人はいないのか?

端末に入ってきたダニは履歴に残ります。

しかし、私が話していたのはそういうことではなく、スキップのないテープを作るということです(SymbolInfoTickはそれを助けてはくれません)。

お互い誤解しているようですね :)))
彼はボリュームのあるベストビッドスーツについて、あなたはトレードやディールについて教えてくれます :))
よし、整理できたようだ。

まあ、これからの刻みをどう見るかによりますが......これは歴史です。
取引所のサーバーであれば履歴が残りますが、端末の場合はそうではありません。
なぜなら、OnTick用の端末は、ホットアクセスのために、最後の4096レコードをキャッシュに保存し、その後、ディスクに履歴をダンプしているからです。
すると、まだ歴史が浅いことが判明)、つまり、緊急シャットダウンではキャッシュをディスクに保存しないのです。
そして、端末の再立ち上げ 時に、キャッシュ内の失われたデータがサーバーから読み込まれます。しかし、これは OnTick データにのみ適用されます。
OnBookは、おそらくデータを読み込まないでしょう。

 

OnTickごとに少なくとも1つのOnBookがあると思ってたんだけど、これは理解できなかった。


 

このコードをOpening Demoに貼り付けて、OnTickから次のOnBookまでの平均遅延と最大遅延を計算します。

コードは手元にあります、曲がっているかもしれません、結果を見てみます。

//+------------------------------------------------------------------+
//|                                                   TestOnBook.mq5 |
//|                                           Copyright 2019, Allex@ |
//|                                                 alex-all@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, Allex@"
#property link      "alex-all@mail.ru"
#property version   "1.00"
//---
bool is_book;
enum ENUM_BOOK_OR_TICK
{
        USE_BOOK,       // Use OnBookEvent
        USE_TICK        // Use OnTick
};

input ENUM_BOOK_OR_TICK Mode = USE_BOOK;
input int   SecForPrint =  300;
//---
ulong TimeArrayBook[65536];
ulong TimeArrayTick[65536];
ushort curBook,curTick;
ulong  DelaySum=0,DelayCount=0;
int delay,delayMax=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
   curBook=0;
   curTick=0; 
   ArrayInitialize(TimeArrayBook,INT_MAX);
   ArrayInitialize(TimeArrayTick,INT_MAX);
  if(Mode == USE_BOOK) is_book = MarketBookAdd(Symbol());
  if (EventSetTimer(SecForPrint)) 
  return(INIT_SUCCEEDED);
  else return (INIT_FAILED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
  if(Mode == USE_BOOK)
  {
    if(is_book == true) MarketBookRelease(Symbol());
  }  
}
//+------------------------------------------------------------------+
//| BookEvent function                                               |
//+------------------------------------------------------------------+
void OnBookEvent(const string &symbol)
{ 
  TimeArrayBook[curBook++]=GetMicrosecondCount();
 }
void OnTick()
{
  TimeArrayTick[curTick++]=GetMicrosecondCount();
}
//+------------------------------------------------------------------+
void OnTimer()
  {
   string out=NULL;
   int total=MathMax(curBook,curTick);
   int i=0,k=0;
   while(i<total)
     {
      while(i<total && TimeArrayBook[i]<TimeArrayTick[k] )
        {
          Print("Book ",TimeArrayBook[i++]);
        }    
      if(k<curTick-1)
        {
        if(i<total)
          {
           delay=TimeArrayBook[i]-TimeArrayTick[k];
           if (delay>delayMax) 
            delayMax=delay;
           if (delay>0)
              {
                 DelaySum+=delay;
                 DelayCount++;
              }
          }
         Print("Tick ",TimeArrayTick[k++]);
        }       
        i++;
     }
     if (curTick>0)
     {
     Print("Tick ",TimeArrayTick[curTick-1], " last");
     string out="Count Event Book after Tick "+DelayCount+". Delay Average "+DoubleToString(DelaySum/DelayCount,2)+". Max "+delayMax;
     Print (out);
     Comment(out);
     }
     curBook=0;
     curTick=0;
  }
//---  
 
Andrey Khatimlianskii:

端末に入ってくるダニは、すでにネタになっている。

しかし、私が話していたのはそういうことではなく、スキップのないテープを作るということです(SymbolInfoTickはそれを助けてはくれません)。

オッケーです。歴史についてのご指摘は、非常に明快です。

しかし、私はまだ私の意見を持っています、ダニを取る方法は、によって異なります。

を読むことができます。

また、SymbolInfoTickと スキップなしのテープについては、反対はしていません。

 

それが今日の写真です。もちろん、OnBookとTickが一致しているかどうかは確認せず、OnTickがOnBookより先なら、対応するOnBookは同じか少し後であることを期待して、次のものを取っています。

追加のチェックなしでコースの最大値は、インジケータ、またはオーバーシュートまたは本当にOnBookどこか遅いです。


でも、これは説明できる人?なぜ多くのOnTickerが未実行で、その間にOnBookが1つもないのか?