本文分享的是量化投資中回測實現方法的最簡單例子,該例子僅僅說明回測的原理實現,在實際的情況中,要比該例子更加複雜。
1,買入賣出信號構建
構建買入信號 signal=1,賣出信號 signal=0,其他為 NaN。
注意,這裡假設都是全倉操作,連續的信號只有第一個是有實際的操作意義。即一旦第 1 個信號成交後,後面雖然仍有信號發出,但由於買入全倉,所以沒有錢再買了。賣出同理。
2,信號轉化為持股狀態
構建持有 keep=1,空倉為 0,假設都是全倉操作,則 keep=signal。
# 由於假設都是全倉操作所以 signal=keep,即 1 代表買入持有,0 代表賣出空倉
test_kl['keep'] = test_kl['signal']
對 keep=NaN 的數據進行向下填充,即 NaN 都與其前面的元素保持一致。
# 將 keep 列中的 nan 使用向下填充的方式填充,結果使 keep 可以代表最終的交易持股狀態
test_kl['keep'].fillna(method='ffill', inplace=True)
3,計算基準收益
這裡的基準收益的概念是從第 1 天開始持有股票,到最後 1 天的每一天收益。其每一天收益的計算為:(當天收盤價 - 前一天收盤價)/ 前一天收盤價。
test_kl['benchmark_profit2'] =
test_kl['close'] / test_kl['close'].shift(1) - 1
test_kl['benchmark_profit'] =
np.log(test_kl['close'] / test_kl['close'].shift(1))
4,計算策略收益
策略收益即為持倉與否 * 基準收益。其中持倉與否只有 1 和 0 的數據,* 基準收益後就類似於創建了一個濾波器,自動過濾 0 的數據。
test_kl['trend_profit'] = test_kl['keep'] * test_kl['benchmark_profit']
5,可視化收益對比
將基準收益和策略收益逐日累加,並進行對比。
test_kl[['benchmark_profit','trend_profit']].cumsum().
plot(grid=True, figsize=14, 7));