宽客秀

宽客秀

Quant.Show的Web3站点,Archives from quant.show

量化投資的回測實現方法

本文分享的是量化投資中回測實現方法的最簡單例子,該例子僅僅說明回測的原理實現,在實際的情況中,要比該例子更加複雜。

1,買入賣出信號構建
構建買入信號 signal=1,賣出信號 signal=0,其他為 NaN。
注意,這裡假設都是全倉操作,連續的信號只有第一個是有實際的操作意義。即一旦第 1 個信號成交後,後面雖然仍有信號發出,但由於買入全倉,所以沒有錢再買了。賣出同理。

00293oHAzy7klMa5nMGde&690

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));

基準收益 + 策略收益

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。