JIT コンパイルのオーバーヘッド

HftBacktest は Numba の機能を活用しており、Numba JIT によってクラスがコンパイルされます。そのため、HftBacktest をインポートする際には JIT コンパイルが必要で、数秒かかることがあります。さらに、戦略関数もパフォーマンスの高いバックテストのために JIT コンパイルされる必要があり、これもコンパイルに時間がかかります。複数日のバックテストを行う場合にはそれほど重要ではないかもしれませんが、それでも煩わしいことがあります。このオーバーヘッドを最小限に抑えるために、Numba の cache 機能を使用することを検討してください。以下の例を参照してください。

from numba import njit
# May take a few seconds
from hftbacktest import BacktestAsset, HashMapMarketDepthBacktest

# Enables caching feature
@njit(cache=True)
def algo(arguments, hbt):
    # your algo implementation.

asset = (
    BacktestAsset()
        .linear_asset(1.0)
        .data([
            'data/ethusdt_20221003.npz',
            'data/ethusdt_20221004.npz',
            'data/ethusdt_20221005.npz',
            'data/ethusdt_20221006.npz',
            'data/ethusdt_20221007.npz'
        ])
        .initial_snapshot('data/ethusdt_20221002_eod.npz')
        .no_partial_fill_exchange()
        .intp_order_latency([
            'data/latency_20221003.npz',
            'data/latency_20221004.npz',
            'data/latency_20221005.npz',
            'data/latency_20221006.npz',
            'data/latency_20221007.npz'
        ])
        .power_prob_queue_model3(3.0)
        .tick_size(0.01)
        .lot_size(0.001)
        .trading_value_fee_model(0.0002, 0.0007)
)

hbt = HashMapMarketDepthBacktest([asset])
algo(arguments, hbt)