データ
Data Collector または Data Preparation を参照して、フィードデータの収集と変換について確認してください。
フォーマット
hftbacktest は numpy 構造化配列を処理できます。データは以下の順序で 8 つのフィールドを持ちます。 詳細は Event を参照してください。
ev (u64): Constants で可能なフラグの組み合わせを確認できます。
exch_ts (i64): 取引所タイムスタンプ。これはイベントが取引所で発生する時間です。
local_ts (i64): ローカルタイムスタンプ。これはイベントがローカルで受信される時間です。
px (f64): 価格
qty (f64): 数量
order_id (u64): 注文 ID は L3 Market-By-Order フィードのみに使用されます。
ival (i64): 追加の i64 値用に予約されています
faval (f64): 追加の f64 値用に予約されています
生データ
1676419207212527000 {'stream': 'btcusdt@depth@0ms', 'data': {'e': 'depthUpdate', 'E': 1676419206974, 'T': 1676419205108, 's': 'BTCUSDT', 'U': 2505118837831, 'u': 2505118838224, 'pu': 2505118837821, 'b': [['2218.80', '0.603'], ['5000.00', '2.641'], ['22160.60', '0.008'], ['22172.30', '0.551'], ['22173.40', '0.073'], ['22174.50', '0.006'], ['22176.80', '0.157'], ['22177.90', '0.425'], ['22181.20', '0.260'], ['22182.30', '3.918'], ['22182.90', '0.000'], ['22183.40', '0.014'], ['22203.00', '0.000']], 'a': [['22171.70', '0.000'], ['22187.30', '0.000'], ['22194.30', '0.270'], ['22194.70', '0.423'], ['22195.20', '2.075'], ['22209.60', '4.506']]}} 1676419207212584000 {'stream': 'btcusdt@trade', 'data': {'e': 'trade', 'E': 1676419206976, 'T': 1676419205116, 's': 'BTCUSDT', 't': 3288803053, 'p': '22177.90', 'q': '0.001', 'X': 'MARKET', 'm': True}}
正規化データ
ev |
exch_ts |
local_ts |
px |
qty |
order_id |
ival |
fval |
---|---|---|---|---|---|---|---|
BUY_EVENT | DEPTH_EVENT | EXCH_EVENT | LOCAL_EVENT |
1676419205108000000 |
1676419207212527000 |
2218.8 |
0.603 |
0 |
0 |
0.0 |
BUY_EVENT | DEPTH_EVENT | EXCH_EVENT | LOCAL_EVENT |
1676419205108000000 |
1676419207212527000 |
5000.00 |
2.641 |
0 |
0 |
0.0 |
BUY_EVENT | DEPTH_EVENT | EXCH_EVENT | LOCAL_EVENT |
1676419205108000000 |
1676419207212527000 |
22160.60 |
0.008 |
0 |
0 |
0.0 |
BUY_EVENT | DEPTH_EVENT | EXCH_EVENT | LOCAL_EVENT |
1676419205108000000 |
1676419207212527000 |
22172.30 |
0.551 |
0 |
0 |
0.0 |
BUY_EVENT | DEPTH_EVENT | EXCH_EVENT | LOCAL_EVENT |
1676419205108000000 |
1676419207212527000 |
22173.40 |
0.073 |
0 |
0 |
0.0 |
BUY_EVENT | DEPTH_EVENT | EXCH_EVENT | LOCAL_EVENT |
1676419205108000000 |
1676419207212527000 |
22174.50 |
0.006 |
0 |
0 |
0.0 |
BUY_EVENT | DEPTH_EVENT | EXCH_EVENT | LOCAL_EVENT |
1676419205108000000 |
1676419207212527000 |
22176.80 |
0.157 |
0 |
0 |
0.0 |
BUY_EVENT | DEPTH_EVENT | EXCH_EVENT | LOCAL_EVENT |
1676419205108000000 |
1676419207212527000 |
22177.90 |
0.425 |
0 |
0 |
0.0 |
BUY_EVENT | DEPTH_EVENT | EXCH_EVENT | LOCAL_EVENT |
1676419205108000000 |
1676419207212527000 |
22181.20 |
0.260 |
0 |
0 |
0.0 |
BUY_EVENT | DEPTH_EVENT | EXCH_EVENT | LOCAL_EVENT |
1676419205108000000 |
1676419207212527000 |
22182.30 |
3.918 |
0 |
0 |
0.0 |
BUY_EVENT | DEPTH_EVENT | EXCH_EVENT | LOCAL_EVENT |
1676419205108000000 |
1676419207212527000 |
22182.90 |
0.000 |
0 |
0 |
0.0 |
BUY_EVENT | DEPTH_EVENT | EXCH_EVENT | LOCAL_EVENT |
1676419205108000000 |
1676419207212527000 |
22183.40 |
0.014 |
0 |
0 |
0.0 |
BUY_EVENT | DEPTH_EVENT | EXCH_EVENT | LOCAL_EVENT |
1676419205108000000 |
1676419207212527000 |
22203.00 |
0.000 |
0 |
0 |
0.0 |
SELL_EVENT | DEPTH_EVENT | EXCH_EVENT | LOCAL_EVENT |
1676419205108000000 |
1676419207212527000 |
22171.70 |
0.000 |
0 |
0 |
0.0 |
SELL_EVENT | DEPTH_EVENT | EXCH_EVENT | LOCAL_EVENT |
1676419205108000000 |
1676419207212527000 |
22187.30 |
0.000 |
0 |
0 |
0.0 |
SELL_EVENT | DEPTH_EVENT | EXCH_EVENT | LOCAL_EVENT |
1676419205108000000 |
1676419207212527000 |
22194.30 |
0.270 |
0 |
0 |
0.0 |
SELL_EVENT | DEPTH_EVENT | EXCH_EVENT | LOCAL_EVENT |
1676419205108000000 |
1676419207212527000 |
22194.70 |
0.423 |
0 |
0 |
0.0 |
SELL_EVENT | DEPTH_EVENT | EXCH_EVENT | LOCAL_EVENT |
1676419205108000000 |
1676419207212527000 |
22195.20 |
2.075 |
0 |
0 |
0.0 |
SELL_EVENT | DEPTH_EVENT | EXCH_EVENT | LOCAL_EVENT |
1676419205108000000 |
1676419207212527000 |
22209.60 |
4.506 |
0 |
0 |
0.0 |
SELL_EVENT | TRADE_EVENT | EXCH_EVENT | LOCAL_EVENT |
1676419205116000000 |
1676419207212584000 |
22177.90 |
0.001 |
0 |
0 |
0.0 |
検証
すべてのタイムスタンプは正しい順序、時系列順でなければなりません。
取引所でのイベントが別のイベントの前に発生し、より早い取引所タイムスタンプを持つ場合がありますが、ローカルでの受信は他のイベントの後になります。
これにより、取引所とローカルのタイムスタンプの時系列順序が逆転します。この状況を処理するために、hftbacktest は EXCH_EVENT
および LOCAL_EVENT
フラグを使用します。
EXCH_EVENT
フラグが付いたイベントは、取引所タイムスタンプに従って時系列順に並んでいる必要があります。
一方、LOCAL_EVENT
フラグが付いたイベントは、ローカルタイムスタンプに従って時系列順に並んでいる必要があります。
取引所タイムスタンプはローカルタイムスタンプよりも早くなければなりません。フィードレイテンシーは正の値でなければなりません。
2 つのサイト間の時間同期にエラーが発生する可能性があるため、ローカルタイムスタンプが取引所タイムスタンプよりも早くなり、負のレイテンシーが発生することがあります。 これに対処する最良の方法は、PTP (Precision Time Protocol) を使用して時間同期を改善し、負のレイテンシーの可能性を最小限に抑えることです。 ただし、基本的なレイテンシーを追加するか、負のレイテンシーのサイズをオフセットすることで、データが正のレイテンシーのみを持ち、イベントのローカルタイムスタンプが常に取引所タイムスタンプよりも遅くなるようにすることができます。
次の例を参照してください。深さフィードの取引所タイムスタンプは、取引フィードの前に進められていますが、深さフィードは取引フィードの後に受信されます。
1676419207212385000 {'stream': 'btcusdt@trade', 'data': {'e': 'trade', 'E': 1676419206968, 'T': 1676419205111, 's': 'BTCUSDT', 't': 3288803051, 'p': '22177.90', 'q': '0.300', 'X': 'MARKET', 'm': True}} 1676419207212480000 {'stream': 'btcusdt@trade', 'data': {'e': 'trade', 'E': 1676419206968, 'T': 1676419205111, 's': 'BTCUSDT', 't': 3288803052, 'p': '22177.90', 'q': '0.119', 'X': 'MARKET', 'm': True}} 1676419207212527000 {'stream': 'btcusdt@depth@0ms', 'data': {'e': 'depthUpdate', 'E': 1676419206974, 'T': 1676419205108, 's': 'BTCUSDT', 'U': 2505118837831, 'u': 2505118838224, 'pu': 2505118837821, 'b': [['2218.80', '0.603'], ['5000.00', '2.641'], ['22160.60', '0.008'], ['22172.30', '0.551'], ['22173.40', '0.073'], ['22174.50', '0.006'], ['22176.80', '0.157'], ['22177.90', '0.425'], ['22181.20', '0.260'], ['22182.30', '3.918'], ['22182.90', '0.000'], ['22183.40', '0.014'], ['22203.00', '0.000']], 'a': [['22171.70', '0.000'], ['22187.30', '0.000'], ['22194.30', '0.270'], ['22194.70', '0.423'], ['22195.20', '2.075'], ['22209.60', '4.506']]}} 1676419207212584000 {'stream': 'btcusdt@trade', 'data': {'e': 'trade', 'E': 1676419206976, 'T': 1676419205116, 's': 'BTCUSDT', 't': 3288803053, 'p': '22177.90', 'q': '0.001', 'X': 'MARKET', 'm': True}} 1676419207212621000 {'stream': 'btcusdt@trade', 'data': {'e': 'trade', 'E': 1676419206976, 'T': 1676419205116, 's': 'BTCUSDT', 't': 3288803054, 'p': '22177.90', 'q': '0.005', 'X': 'MARKET', 'm': True}}
これを次の形式に変換する必要があります。HftBacktest は、この問題を自動的に修正するための correct_event_order
メソッドを提供します。
validate_event_order
は、この問題が存在するかどうかを確認するのに役立ちます。
EXCH_EVENT 1676419207212527000 {'stream': 'btcusdt@depth@0ms', 'data': {'e': 'depthUpdate', 'E': 1676419206974, 'T': 1676419205108, 's': 'BTCUSDT', 'U': 2505118837831, 'u': 2505118838224, 'pu': 2505118837821, 'b': [['2218.80', '0.603'], ['5000.00', '2.641'], ['22160.60', '0.008'], ['22172.30', '0.551'], ['22173.40', '0.073'], ['22174.50', '0.006'], ['22176.80', '0.157'], ['22177.90', '0.425'], ['22181.20', '0.260'], ['22182.30', '3.918'], ['22182.90', '0.000'], ['22183.40', '0.014'], ['22203.00', '0.000']], 'a': [['22171.70', '0.000'], ['22187.30', '0.000'], ['22194.30', '0.270'], ['22194.70', '0.423'], ['22195.20', '2.075'], ['22209.60', '4.506']]}} EXCH_EVENT | LOCAL_EVENT 1676419207212385000 {'stream': 'btcusdt@trade', 'data': {'e': 'trade', 'E': 1676419206968, 'T': 1676419205111, 's': 'BTCUSDT', 't': 3288803051, 'p': '22177.90', 'q': '0.300', 'X': 'MARKET', 'm': True}} EXCH_EVENT | LOCAL_EVENT 1676419207212480000 {'stream': 'btcusdt@trade', 'data': {'e': 'trade', 'E': 1676419206968, 'T': 1676419205111, 's': 'BTCUSDT', 't': 3288803052, 'p': '22177.90', 'q': '0.119', 'X': 'MARKET', 'm': True}} LOCAL_EVENT 1676419207212527000 {'stream': 'btcusdt@depth@0ms', 'data': {'e': 'depthUpdate', 'E': 1676419206974, 'T': 1676419205108, 's': 'BTCUSDT', 'U': 2505118837831, 'u': 2505118838224, 'pu': 2505118837821, 'b': [['2218.80', '0.603'], ['5000.00', '2.641'], ['22160.60', '0.008'], ['22172.30', '0.551'], ['22173.40', '0.073'], ['22174.50', '0.006'], ['22176.80', '0.157'], ['22177.90', '0.425'], ['22181.20', '0.260'], ['22182.30', '3.918'], ['22182.90', '0.000'], ['22183.40', '0.014'], ['22203.00', '0.000']], 'a': [['22171.70', '0.000'], ['22187.30', '0.000'], ['22194.30', '0.270'], ['22194.70', '0.423'], ['22195.20', '2.075'], ['22209.60', '4.506']]}} EXCH_EVENT | LOCAL_EVENT 1676419207212584000 {'stream': 'btcusdt@trade', 'data': {'e': 'trade', 'E': 1676419206976, 'T': 1676419205116, 's': 'BTCUSDT', 't': 3288803053, 'p': '22177.90', 'q': '0.001', 'X': 'MARKET', 'm': True}} EXCH_EVENT | LOCAL_EVENT 1676419207212621000 {'stream': 'btcusdt@trade', 'data': {'e': 'trade', 'E': 1676419206976, 'T': 1676419205116, 's': 'BTCUSDT', 't': 3288803054, 'p': '22177.90', 'q': '0.005', 'X': 'MARKET', 'm': True}}
正規化データ
ev |
exch_ts |
local_ts |
px |
qty |
order_id |
ival |
fval |
---|---|---|---|---|---|---|---|
BUY_EVENT | DEPTH_EVENT | EXCH_EVENT |
1676419205108000000 |
1676419207212527000 |
2218.8 |
0.603 |
0 |
0 |
0.0 |
BUY_EVENT | DEPTH_EVENT | EXCH_EVENT |
1676419205108000000 |
1676419207212527000 |
5000.00 |
2.641 |
0 |
0 |
0.0 |
BUY_EVENT | DEPTH_EVENT | EXCH_EVENT |
1676419205108000000 |
1676419207212527000 |
22160.60 |
0.008 |
0 |
0 |
0.0 |
BUY_EVENT | DEPTH_EVENT | EXCH_EVENT |
1676419205108000000 |
1676419207212527000 |
22172.30 |
0.551 |
0 |
0 |
0.0 |
BUY_EVENT | DEPTH_EVENT | EXCH_EVENT |
1676419205108000000 |
1676419207212527000 |
22173.40 |
0.073 |
0 |
0 |
0.0 |
BUY_EVENT | DEPTH_EVENT | EXCH_EVENT |
1676419205108000000 |
1676419207212527000 |
22174.50 |
0.006 |
0 |
0 |
0.0 |
BUY_EVENT | DEPTH_EVENT | EXCH_EVENT |
1676419205108000000 |
1676419207212527000 |
22176.80 |
0.157 |
0 |
0 |
0.0 |
BUY_EVENT | DEPTH_EVENT | EXCH_EVENT |
1676419205108000000 |
1676419207212527000 |
22177.90 |
0.425 |
0 |
0 |
0.0 |
BUY_EVENT | DEPTH_EVENT | EXCH_EVENT |
1676419205108000000 |
1676419207212527000 |
22181.20 |
0.260 |
0 |
0 |
0.0 |
BUY_EVENT | DEPTH_EVENT | EXCH_EVENT |
1676419205108000000 |
1676419207212527000 |
22182.30 |
3.918 |
0 |
0 |
0.0 |
BUY_EVENT | DEPTH_EVENT | EXCH_EVENT |
1676419205108000000 |
1676419207212527000 |
22182.90 |
0.000 |
0 |
0 |
0.0 |
BUY_EVENT | DEPTH_EVENT | EXCH_EVENT |
1676419205108000000 |
1676419207212527000 |
22183.40 |
0.014 |
0 |
0 |
0.0 |
BUY_EVENT | DEPTH_EVENT | EXCH_EVENT |
1676419205108000000 |
1676419207212527000 |
22203.00 |
0.000 |
0 |
0 |
0.0 |
… |
|||||||
SELL_EVENT | TRADE_EVENT | EXCH_EVENT | LOCAL_EVENT |
1676419205111000000 |
1676419207212385000 |
22177.90 |
0.300 |
0 |
0 |
0.0 |
SELL_EVENT | TRADE_EVENT | EXCH_EVENT | LOCAL_EVENT |
1676419205111000000 |
1676419207212480000 |
22177.90 |
0.119 |
0 |
0 |
0.0 |
BUY_EVENT | DEPTH_EVENT | LOCAL_EVENT |
1676419205108000000 |
1676419207212527000 |
2218.8 |
0.603 |
0 |
0 |
0.0 |
BUY_EVENT | DEPTH_EVENT | LOCAL_EVENT |
1676419205108000000 |
1676419207212527000 |
5000.00 |
2.641 |
0 |
0 |
0.0 |
BUY_EVENT | DEPTH_EVENT | LOCAL_EVENT |
1676419205108000000 |
1676419207212527000 |
22160.60 |
0.008 |
0 |
0 |
0.0 |
BUY_EVENT | DEPTH_EVENT | LOCAL_EVENT |
1676419205108000000 |
1676419207212527000 |
22172.30 |
0.551 |
0 |
0 |
0.0 |
BUY_EVENT | DEPTH_EVENT | LOCAL_EVENT |
1676419205108000000 |
1676419207212527000 |
22173.40 |
0.073 |
0 |
0 |
0.0 |
BUY_EVENT | DEPTH_EVENT | LOCAL_EVENT |
1676419205108000000 |
1676419207212527000 |
22174.50 |
0.006 |
0 |
0 |
0.0 |
BUY_EVENT | DEPTH_EVENT | LOCAL_EVENT |
1676419205108000000 |
1676419207212527000 |
22176.80 |
0.157 |
0 |
0 |
0.0 |
BUY_EVENT | DEPTH_EVENT | LOCAL_EVENT |
1676419205108000000 |
1676419207212527000 |
22177.90 |
0.425 |
0 |
0 |
0.0 |
BUY_EVENT | DEPTH_EVENT | LOCAL_EVENT |
1676419205108000000 |
1676419207212527000 |
22181.20 |
0.260 |
0 |
0 |
0.0 |
BUY_EVENT | DEPTH_EVENT | LOCAL_EVENT |
1676419205108000000 |
1676419207212527000 |
22182.30 |
3.918 |
0 |
0 |
0.0 |
BUY_EVENT | DEPTH_EVENT | LOCAL_EVENT |
1676419205108000000 |
1676419207212527000 |
22182.90 |
0.000 |
0 |
0 |
0.0 |
BUY_EVENT | DEPTH_EVENT | LOCAL_EVENT |
1676419205108000000 |
1676419207212527000 |
22183.40 |
0.014 |
0 |
0 |
0.0 |
BUY_EVENT | DEPTH_EVENT | LOCAL_EVENT |
1676419205108000000 |
1676419207212527000 |
22203.00 |
0.000 |
0 |
0 |
0.0 |
… |
|||||||
SELL_EVENT | TRADE_EVENT | EXCH_EVENT | LOCAL_EVENT |
1676419206976000000 |
1676419207212584000 |
22177.90 |
0.001 |
0 |
0 |
0.0 |
SELL_EVENT | TRADE_EVENT | EXCH_EVENT | LOCAL_EVENT |
1676419206976000000 |
1676419207212621000 |
22177.90 |
0.005 |
0 |
0 |
0.0 |