宽客秀

宽客秀

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

基准收益 + 策略收益

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。