記事「リプレイシステムの開発—市場シミュレーション(第1回):最初の実験(I)」についてのディスカッション

 

新しい記事「リプレイシステムの開発—市場シミュレーション(第1回):最初の実験(I)」はパブリッシュされました:

市場がしまっているときに研究したり、市場の状況をシミュレーションしたりできるシステムを作成してはどうでしょうか。ここで、このトピックを扱う新しい連載を開始します。

このコードは、1分の期間のバーを作成します。これは、他のチャート期間を作成するためのプラットフォームの最小要件です。強調表示された部分はコード自体の一部ではありませんが、1分足の分析に役立ちます。本当にこの期間内に作成されたかどうかを確認する必要があります。作成に1分を大幅に超える時間がかかる場合は、何らかの対応をしなければならないためです。1分以内に作成された場合は、システムがすぐに実行可能であることを示している可能性があります。

このシステムを実行すると、次のビデオに示す結果が得られます。



作者: Daniel Jose

 

次のコードのポイントは?

 17        struct st00
 18       {
 19           datetime dt;
 20           int      milisec;
 21           double   Bid,
 22                    Ask,
 23                    Last;
 24           long     Vol;
 25           uchar    flag;
 26       }st00 m_ArrayInfoTicks[];
 53      m_ArrayInfoTicks[m_ArrayCount].dt = macroRemoveSec ( StringToTime ( StringSubstr (szInfo, 0 , 19 ))); 
 54      m_ArrayInfoTicks[m_ArrayCount].milisec = ( int ) StringToInteger ( StringSubstr (szInfo, 20 , 3 ));   
53行目で秒が削除されたのなら、54行目でミリ秒とその使用は意味を失う。
しかし、構造体には追加されている。
タイマー・イベントは独立して生成される。そして、それぞれの刻みは、ミリ秒や秒(これは削除される)ではなく、タイマーに従って行われる。
ミリ秒は、余分なメモリー領域のように、空中で重くなる。そして充填のための不必要な操作。
 
さらに、分足バーの構築を減らすことができる別の問題を解決していません。
例えば、赤と青で強調表示されている時間は同じで、最後の価格が同じかどうかはわかりません。
これらのティックを圧縮することで、分足バーの構築にかかる時間を大幅に短縮することができます。
 449      2021.10 . 22        09 : 00 : 38.649      107900    107905                    6
 450      2021.10 . 22        09 : 00 : 38.651                      107900    1.00000000        88
 451      2021.10 . 22        09 : 00 : 38.651                      107895    5.00000000        88
 452      2021.10 . 22        09 : 00 : 38.651                      107890    5.00000000        88
 453      2021.10 . 22        09 : 00 : 38.651                      107885    3.00000000        88
 454      2021.10 . 22        09 : 00 : 38.651                      107880    15.00000000       88
 455      2021.10 . 22        09 : 00 : 38.651                      107880    3.00000000        88
 456      2021.10 . 22        09 : 00 : 38.651                      107875    16.00000000       88
 457      2021.10 . 22        09 : 00 : 38.651                      107870    2.00000000        88
 458      2021.10 . 22        09 : 00 : 38.654                      107875    1.00000000        88
 459      2021.10 . 22        09 : 00 : 38.654                      107875    1.00000000        88
 460      2021.10 . 22        09 : 00 : 38.654                      107880    1.00000000        88
 461      2021.10 . 22        09 : 00 : 38.659                      107880    2.00000000        88
 462      2021.10 . 22        09 : 00 : 38.659                      107885    2.00000000        88
 463      2021.10 . 22        09 : 00 : 38.660                      107885    1.00000000        88
 464      2021.10 . 22        09 : 00 : 38.660                      107890    3.00000000        88
 465      2021.10 . 22        09 : 00 : 38.662                      107885    3.00000000        88
 466      2021.10 . 22        09 : 00 : 38.662                      107880    3.00000000        88
 467      2021.10 . 22        09 : 00 : 38.662                      107875    2.00000000        88
 468      2021.10 . 22        09 : 00 : 38.662                      107895    3.00000000        88
 469      2021.10 . 22        09 : 00 : 38.662                      107900    1.00000000        88
 470      2021.10 . 22        09 : 00 : 38.664                      107880    1.00000000        88       
しかし、あなたは53行目で秒を削除しました。

53      m_ArrayInfoTicks[m_ArrayCount].dt = macroRemoveSec ( StringToTime ( StringSubstr (szInfo, 0 , 19 ))); 
54      m_ArrayInfoTicks[m_ArrayCount].milisec = ( int ) StringToInteger ( StringSubstr (szInfo, 20 , 3 ));   
そして54行目にミリ秒を残しています。
これでは、この圧縮を正確に行うことは不可能です。ミリ秒と秒のバインディングはありません。
もちろん、ミリ秒の値が次の秒に移動する確率は低いし、次のティックでも継続する。しかし、それは存在する。
分バーから次のバーに 移動 するときだけ、100%の精度が保証されます。
 
刻みを未来に圧縮するにはミリ秒が必要ですか?私は正しく理解していますか?
まあ、"未来に"-私にとっては-まだ先を読んでいない。あなたにとっては、すでに「過去」なのでしょうが...)))
もしそうなら、私はこの秒数を削除することができることに同意します - 偶然の一致の確率は極めて低いです)))
 
ああ、奇跡だ!ミリ秒を圧縮すると、分ローソクの形成時間は00時01分06秒になる。圧縮なしの00:01:52に対して。我々は46秒勝った!))
 

その結果、すべての編集が終わった。


1153,809のムーブメントポジションが生まれた。

削除されたティック = 1066231

実行速度の チェック .2023.12.02 01:52:21 ---- 2023.12.02 01:53:17

最初のローソクを建てる時間:00:00:56 秒)))

56秒勝った!

ちょうど半分
 

素晴らしい仕事をありがとう!

質問があります。リプレイに巻き戻しオプションを追加することは可能ですか?つまり、前のローソクに戻り、もう一度プレーするということです。