10.矢量化回测

用 Pandas 进行向量化回测

导入依赖的库

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.style.use('seaborn')
import warnings
warnings.filterwarnings('ignore')
import yfinance as yf

准备金融数据

f =yf.download('GOOG', end='2021-12-31', proxy="http://127.0.0.1:7890")
return_serie = f['Adj Close'].pct_change(1).dropna()
return_serie.name = 'return'
return_serie
10.矢量化回测

计算索提诺比率(Sortino ratio)

(索提诺比率越高越好,大于1最理想,小于0最差)

然后我们要计算 Sortino 比率,首先,我们需要这个serie的平均值,然后我们需要下行波动率,所以我们计算所有低于零的值的标准差。这意味着我们计算所有负收益的波动率。所以要获得负回报,我们只需告诉 pandas 我们希望所有系列回报值都低于 0。

然后,我可以创建一个 Sortino 比率,然后我可以使用 f-string 打印它。我想用三位小数计算这个 Sortino 比率的值。

mean = np.mean(return_serie)
vol = np.std(return_serie[return_serie<0])
sortino = mean/vol

print(f"Sortino: {'%.3f' % sortino}")
10.矢量化回测

但是现在,正如我们所见,我们的 Sortino 比率约为 0.1,但我们需要一个像 1.32 或 1.23 这样的结果,我不记得像以前的结果。这是因为我们没有对所有指标进行年度化,它是如此重要,这就是为什么我只想看到这个错误,因为如果你没有对所有指标进行年度化,你就会遇到一些问题。当你想解释它时,你会很难比较不同的策略。因为如果一个策略以每日间隔进行交易,例如,如果从不以每月间隔进行交易,那么您将有一个策略的每日 Sortino 比率,以及另一个策略的每月 Sortino 比率。所以你真的不能将这两种策略放在一起比较。

因此,要解决此问题,您需要对所有 Sortino 比率进行年度化。

要做到这一点,我们需要乘以 252,因为它是当年的开放日数,为什么 sqrt(252)?这是因为对均值进行年化,需要乘以 252,而要对波动率进行年化, 我们需要将其乘以 sqrt(252),因为波动率是方差的平方 。现在我们有了 Google 的年化 Sortina 比率,因此我们可以看到,考虑到该资产的波动性,该资产具有非常好的回报。

import re
# Compute the Sortino
mean = np.mean(return_serie)
vol = np.std(return_serie[return_serie<0])
sortino = np.sqrt(252) * mean/vol

print(f"Sortino: {'%.3f' % sortino}")
10.矢量化回测

原创文章,作者:朋远方,如若转载,请注明出处:https://caovan.com/10-shilianghuahuice/.html

(0)
打赏 微信扫一扫 微信扫一扫
朋远方的头像朋远方
上一篇 2022年11月15日 下午10:14
下一篇 2022年12月9日 下午5:02

相关推荐

发表回复

登录后才能评论