【实盘策略】18年至今总回报95%,最大回撤才10%,夏普比率和卡玛比率均超过1(策略代码+数据下载)

对于量化新手,最有效的方式,去线上量化社区找看起来不错的策略,修改,优化。并不能指望直接能用,但策略思路是可以用借鉴的。 多看自己就有思路了。 

我们的策略算子是可以积累的,因此写策略会越来越快。

进阶当然是金工研报,高阶就是金融前沿论文了。

还有一个就是社群交流,无论线上线下,多碰撞。

我们是把投资当成科学问题来研究的,尽管它有艺术的成份,这也是量化投资好玩之处,若是纯科研问题,那也是科学家的事情,普通人的机会有限。

上午尝试使用numba来改造RSRS的计算,看来没有成功。numba不支持pandas,连numpy的polyfit也不支持。

由于pandas不支持多序列的rolling,这个没办法,要么使用cython来重写,但代码的可读性和可维护性又堪忧,这个还需要再想想办法。

#@jit()
def _slope_pair(se_left, se_right, N=18, index=None):
slopes = []
R2 = []
# 计算斜率值
for i in range(len(se_left)):
if i < (N - 1):
slopes.append(np.nan)
R2.append(np.nan) else: x = se_right[i - N + 1:i + 1] y = se_left[i - N + 1:i + 1] slope, intercept = np.polyfit(x, y, 1) #lr = LinearRegression().fit(np.array(x).reshape(-1, 1), y) ## y_pred = lr.predict(x.reshape(-1, 1)) #beta = lr.coef_[0] # r2 = r2_score(y, y_pred) slopes.append(slope) # R2.append(r2) slopes = pd.Series(slopes) slopes.index = index return slopes

策略的基础思路其实可以很多,现在可以做的事情是太多,而不是太少:

比如行业轮动:

策略示例采用第一种策略构建方法,利用行业动量设计策略。为了提高策略速度,以6个行业为例进行演示。

第一步:确定行业指数,获取行业指数收益率。
第二步:根据行业动量获取最佳行业指数。
第三步:在最佳行业中,选择最大市值的5支股票买入。

比如股票多因子策略:

第一步:获取股票市值以及账面市值比数据。
第二步:将股票按照各个因子进行排序分组,分组方法如上表所示。
第三步:依据式2式3,计算SMB、HML因子。
第四步:因子回归,计算alpha值。获取alpha最小并且小于0的10只的股票买入开仓。

不在浮沙筑高台,星球目前的计划是把回测引擎基础调稳定,然后把模块化算子补充完整,磨刀不误砍材功。

图片

从风险平价到目标波动率控制,是控制回撤,提升夏普比率的有利武器。

直接上结果:

图片

在波动率7%的水平下,长期年化达到11%,最大回撤才10%,夏普比率和卡玛比率均超过1,是个很稳健的策略集,而且,波动率可以随自己的风险偏好来设定。这就是智能投顾客户分层的基础逻辑。

图片

代码已经发布至星球,请大家前往下载:

图片

import engine
from engine.algos_extend import *

from datafeed.dataloader import Duckdbloader
from config import DATA_DIR

symbols = ['510300.SH',  # 沪深300
           '511220.SH',  # 城投债
           '518880.SH',  # 黄金
           #'511880.SH',  # 银华日利
           '513100.SH',  # 纳指100
           ]
loader = Duckdbloader(path=DATA_DIR.joinpath('etfs').resolve(), symbols=symbols, columns=['close'],
                      start_date="20100101")

fields = ['close/shift(close,20)-1']
factor_name = 'roc_20'
names = [factor_name]
df = loader.load(fields=fields, names=names)

df_close = df.pivot_table(columns='symbol', values='close', index='date')
df_close.dropna(inplace=True)

runAfterDaysAlgo = RunAfterDays(
    20*6 + 1
)


s = engine.Strategy('大类资产等权买入-月度再平衡',
                    [
                        RunMonthly(),
                        SelectAll(),
                        WeighEqually(),
                        Rebalance()
                    ]
                    )

s_vol = engine.Strategy('目标波动率7%-月度再平衡',
                    [
runAfterDaysAlgo,
                        RunMonthly(),
                        SelectAll(),
                        WeighERC(),
                        TargetVol(target_volatility=0.07),
                        Rebalance()
                    ]
                    )

s_vol2 = engine.Strategy('目标波动率5%-月度再平衡',
                    [
runAfterDaysAlgo,
                        RunMonthly(),
                        SelectAll(),
                        WeighERC(),
                        TargetVol(target_volatility=0.05),
                        Rebalance()
                    ]
                    )


s_bench = engine.Strategy('基准-沪深300000300',
                          [
                              SelectThese(tickers=['510300.SH']),
                              WeighEqually(),
                              Rebalance()
                          ]
                          )

s_bench2 = engine.Strategy('基准-纳指100',
                          [
                              SelectThese(tickers=['513100.SH']),
                              WeighEqually(),
                              Rebalance()
                          ]
                          )

strats = [s, s_vol,s_vol2, s_bench]
bkts = [engine.Backtest(stra, df_close, integer_positions=False) for stra in strats]
res = engine.run(*bkts)

print(res.stats)
print(res.get_transactions())
res.plot()

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']   # 显示中文
plt.rcParams['axes.unicode_minus'] = False    # 显示负号
plt.show()

目标波动率控制,能很好的对风险收益按需要订制,是战略资产配置一个很好的抓手,后续通过类内轮动的战术资产调优,可以进一步提升收益率,但可以保持一个高的夏普比率。这才是策略得以实盘的基础。

这里给星球同学留了个作业:7%波动率下,是否动用了杠杆,是否有合理性,如何优化呢?

发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/103924
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 2024 年 7 月 29 日
下一篇 2024 年 7 月 29 日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注