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

 
Yuriy Zaytsev:

というのは確かなのでしょうか?


4秒って、まさか! プロセッサが4秒間フリーズしたとか、メモリが4秒間解放されたとか、本気で思っているのか? 冗談だろ?

ディスクの書き込みキューが原因である可能性が高いです。

ディスクはメモリーやプロセッサーより遅い。

そして、flush()ですが、C言語にはこのようなコマンドがあり、おそらく皆さんもご存知だと思いますが、これは便利で快適なときに実行され、ディスクの読み込みに関連してより頻繁に多少の遅れがあっても実行できます。

それは、バッファをディスクにリセットする必要があるときに呼び出されるものです。

まあ、MTで実験的に確認したわけではないので、あまり自信はないのですが。しかし、これは一種の標準です。ログの中にディスクへの書き込みの時間がありますが、もしこのログへの書き込みの原因となったイベントの時間がより重要であれば、それは論理的ではないでしょうか。

そして、我々は、ログがディスクの書き込み時間に書き込まれていると仮定すると、ディスクがロードされた場合、とにかくあなたは、物理的な記録の遅延を持って、時間は書き込みバッファに書き込むためのコマンドを送信されます。

つまり、フラッシュはバッファを変更せず、遅延が発生した場合に少し後にリセットするだけです。

wp.正しく、ログに書き込むときに、端末自体を形成する唯一の時間、いずれの場合でもので、時間を書き込む必要があることを指摘し、方向づけには意味がありません。

 
Aleksey Mavrin:

まあ、MTで実験的に確認したわけではないので、そうとも言い切れませんが。しかし、それは一種の標準です - なぜログにディスクへの記録の時間、より重要な場合は、ログにこの記録を引き起こしたイベントの時間、論理的に?

そして、我々は、ログがディスクの書き込み時間に書き込まれていると仮定すると、ディスクがロードされた場合、とにかくあなたは、物理的な記録の遅延を持って、時間は書き込みバッファに書き込むためのコマンドを送信されます。

つまり、フラッシュはバッファを変更せず、遅延が発生した場合に少し後にリセットするだけです。

s.s.さんのご指摘の通り、時間を書かないといけないのは、どのような場合でも、ログに書き込むときに端末自体を形成する時間だけで、方向付けの意味がありませんから。


私は、ディスクに書き込む直前に時刻が挿入され、それですべてが組み合わさると考えていました。

シナリオを順を追って説明することで、より明確にすることができます。


1-ティックが来た(onTickを押す)-と表示されるはずです。

2-そしてOnTickはログを出力する-それは正常に保存された

3-このティックもOnTickで到着します-これもプリントされるはずです。

4-そして、悪夢がやってきた Windowsはこの瞬間、様々なプログラムから20ものデータストリームをディスク上に吐き出し、ディスクを一時的にロックしてしまうのだ-。

ドライバがデータマグネットヘッドを別の場所に置き、自分のデータを書き込んでいるのです。

5-メタトレーダーがDISKに何かを送信しようとするときです。

しかし、ディスクは、Windowsオペレーティングシステムでひどく忙しいです - オペレーティングシステムは、メタトレーダー申し訳ありませんMQは私が行うには、より重要なものを持っていると言っている - 待ってください。

6- 4秒が経過する。

7-そして、4秒後にWindowsがドライブへのキューをクリアして、MetaTraderにこう言うのです - Dear trading terminal - you want to write something to disk?- OK 書けよ

8-metatraderは4秒間の遅延でディスクに書き込み、ディスクにデータを書き込もうとした時ではなく、実際に書き込んだ時の時刻をログに記録します。

そこから4秒が生まれるのです。



---

ターミナルがローカル タイムをバッファに入れたが、書き込みが4秒遅れたというような他のシナリオでは、このようなシナリオは動作しません。

でなければ、時期が重なっていたはずです

 
Aleksey Mavrin:

まあ、MTで 実験的に確認 したわけではないので、そうとも言い切れませんが。しかし、それは一種の標準です - なぜログにディスクへの記録の時間は、より重要な場合は、ログにこの記録を引き起こしたイベントの時間、論理的に?

そして、我々は、ログがディスクの書き込み時間に書き込まれていると仮定すると、ディスクがロードされた場合、とにかくあなたは、物理的な記録の遅延を持って、時間は書き込みバッファに書き込むためのコマンドを送信されます。

つまり、フラッシュはバッファを変更せず、遅延が発生した場合に少し後にリセットするだけです。

s.s.さんのご指摘の通り、時間を書かなければならないのは、いずれにしても、ログに書き込む際に端末自体が生成する時間だけで、そこに着目する意味はありませんから。

そして、もし確認しないのであれば、でたらめにわめかないことです。

このスレで何を言ってるのかわかってるのか?

テストを見せるか、それともここから出て行くか。

 
Aleksey Mavrin:

まあ、MTで実験的に確認したわけではないので、そうとも言い切れませんが。しかし、それは標準の一種です -なぜログにディスクへの記録の時間は、より重要な場合は、ログにこの記録を引き起こしたイベントの時間であり、それは右、論理的である?

そして、我々は、ログがディスクの書き込み時間に書き込まれていると仮定すると、ディスクがロードされた場合、とにかくあなたは、物理的な記録の遅延を持って、時間は書き込みバッファに書き込むためのコマンドを送信されます。

つまり、フラッシュはバッファを変更せず、遅延が発生した場合に少し後にリセットするだけです。

s.s.は正しく、ログに書き込むときに、いかなる場合でも、端末自体を形成する唯一の時間は、意味によって導かれるため、時間を記述する必要があることを指摘した。

ただ、私たちの場合は、ディスクに書き込む時間が確保 できるのです

しかし、時間はGetTickDescriptionプロシージャでアレンジできますので、上記の作者に書いておきました。

そして、もし彼がそれを置いたとしたら、4秒後に遅延の原因となりうることを議論することはなかったでしょう。ログを見ると、OnBockとOnTickのローカルタイムは同じですが、ディスクへの転送時間が4秒違っています。

//+------------------------------------------------------------------+ 
//| возвращает строковое описание тика                               | 
//+------------------------------------------------------------------+ 
string GetTickDescription(MqlTick &tick)
{
..
..
Sergey Chalyshev:

そして、確認していないのであれば、気にする必要はありません。

このスレの意味わかってるのか?

テストを見せるか、ここから出て 行け。

そんなに厳しく言わないでくださいよ。

 

このティックキャッチを改良し、1週間、2週間と設定し、ログに記録した日付とイベントの日付が広がる瞬間をキャッチすることも可能かもしれません。

もちろん、定期的に録画用ディスクを読み込むことで、この処理を高速化することは可能です。

もう一つの質問、それは最も重要なことです。 なぜこの研究に時間を費やすのか:-)))実益は何なのか。

---

OnBukはティックだけでなく、例えばマーケットの出来高の 変化、つまり誰かが注文を出したり、閉じたり、消したりして出来高が変化したときに呼び出されます。 そしてそれはマーケットにとって非常に重要な情報なのです。

そしてもちろん、OnBukで正確に取るために論理的な株式/先物の市場での取引の意思決定のロジックではなく、OnTickで次のとおりです。

 
Sergey Chalyshev:

そして、確認していないのであれば、気にすることはありません。

このスレの意味わかってるのか?

テストを見せるか、ここから出て行け。

お前がヤジってるんだよチンカス、16ページはPrint 前のイベントのタイミングを考えてないし、測定する速度を書けよ専門家、クソが)

あなたが得意げに指摘したことを、私は確認しなかったと言われる、あなたは私の言っていることを本当に理解していないのでしょう、きっと。しかし、それを理解することは難しいでしょう。

そして、この時間が正確にディスクに記録された時間でないことを確認する。

 
Sergey Chalyshev:

そして、確認していないのであれば、気にすることはありません。

このスレの意味わかってるのか?

テストを見せるか、ここから出て行け。

どうだ、お利口さんよ、お前の言いたいことを検証する信頼できる方法を一つでも示せば、俺は会釈して理解できないことを認める、さもなければ、お前自身が理解できないことを認めて謝罪するか、会釈するんだよ。

すなわち - 端末がログに書き込む時間を正確に実験的に検証するための少なくとも1つの100%信頼できる方法、すなわちメインオプションです。

1. 端末がキューにあるPrint コマンドを受信した時間。

2. Printコマンドの開始時刻。

3. バッファ内のプリント終了時刻)

このバリアントは、正確な時間かもしれません。

4. ディスクへのプリント実行時間。

 
Aleksey Mavrin:

どうだ、お利口さんよ、お前の言いたいことを確認する確実な方法を一つでも示してくれたら、俺は会釈して理解できなかったことを認める、さもなければ、お前自身が理解できなかったことを認めて謝罪するか、会釈してやるぞ。

すなわち - 端末がログに書き込む時間を正確に実験的に検証するための少なくとも1つの100%信頼できる方法、すなわちメインオプションです。

1. 端末がキューにあるPrintコマンドを受信した時間。

2. Printコマンドの開始時刻。

3. バッファ内のプリント終了時刻)

このバリアントは、正確な時間かもしれません。

4. ディスクへのプリントの実行時間。

で、何が言いたいの?

あなたのコードを待っています...

 
prostotrader:

で、どうするんだ?

あなたのコードを待っています...

どんなコードを待っているのでしょうか?何か約束したっけ?値段はいくらだったっけ?)

p/s//あなたも、あなたの友人のように、私の言っていることが理解できていないのですね。
 

その議論のついでに、もう一つ実験をしてみました。

//+------------------------------------------------------------------+
//|                                                   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;
ulong st_time, func_time;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
  is_book = MarketBookAdd(Symbol());
  st_time = GetMicrosecondCount();
  func_time = GetMicrosecondCount();
  Print(__FUNCTION__, "; Time: ", MathAbs((func_time - st_time)/1000), " ms");
  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(Symbol() == symbol)
  {
    func_time = GetMicrosecondCount();
    Print(__FUNCTION__, "; Time: ", MathAbs((func_time - st_time)/1000), " ms");
  }
}
void OnTick()
{
  func_time = GetMicrosecondCount();
  Print(__FUNCTION__, "; Time: ", MathAbs((func_time - st_time)/1000), " ms");
}
//+------------------------------------------------------------------+

つまり、初期化時にマイクロ秒単位で時間を計っているのです。

と、毎回プリントする前に、もう一度時間をドリルで計っています。

理想は、そうであること

2020.02.04 21:28:01.316	Ticks_test_2 (GOLD-3.20,M1)	OnTick; Time: 1395 ms
2020.02.04 21:28:01.316	Ticks_test_2 (GOLD-3.20,M1)	OnBookEvent; Time: 1395 ms

しかし、非常に多くの場合、このような結果(log exposures)になります。

2020.02.04 21:28:11.133 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 11212 ms
2020.02.04 21:28:11.139 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 11218 ms

2020.02.04 21:28:15.603 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 15682 ms
2020.02.04 21:28:15.609 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 15688 ms

2020.02.04 21:28:29.521 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 29599 ms
2020.02.04 21:28:29.790 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 29868 ms
2020.02.04 21:28:29.790 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 29868 ms

2020.02.04 21:28:33.109 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 33188 ms
2020.02.04 21:28:33.115 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 33194 ms

2020.02.04 21:28:40.800 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 40878 ms
2020.02.04 21:28:40.807 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 40885 ms

2020.02.04 21:28:41.891 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 41969 ms
2020.02.04 21:28:41.896 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 41974 ms

2020.02.04 21:28:52.984 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 53063 ms
2020.02.04 21:28:52.991 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 53070 ms

2020.02.04 21:28:54.457 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 54536 ms
2020.02.04 21:28:55.276 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 55355 ms

2020.02.04 21:29:10.643 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 70722 ms
2020.02.04 21:29:10.650 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 70729 ms

2020.02.04 21:29:14.674 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 74752 ms
2020.02.04 21:29:14.681 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 74759 ms

2020.02.04 21:29:25.306 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 85384 ms
2020.02.04 21:29:25.313 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 85390 ms

2020.02.04 21:29:30.468 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 90546 ms
2020.02.04 21:29:30.481 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 90559 ms

2020.02.04 21:29:30.866 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 90944 ms
2020.02.04 21:29:30.874 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 90951 ms

2020.02.04 21:29:36.680 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 96758 ms
2020.02.04 21:29:36.688 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 96766 ms

2020.02.04 21:29:37.891 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 97968 ms
2020.02.04 21:29:37.910 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 97987 ms

そのため、printが呼ばれたときにローカルタイムが 書き込まれます。

でも、4秒では収まらない...。