对于量化新手,最有效的方式,去线上量化社区找看起来不错的策略,修改,优化。并不能指望直接能用,但策略思路是可以用借鉴的。 多看自己就有思路了。
我们的策略算子是可以积累的,因此写策略会越来越快。
进阶当然是金工研报,高阶就是金融前沿论文了。
还有一个就是社群交流,无论线上线下,多碰撞。
我们是把投资当成科学问题来研究的,尽管它有艺术的成份,这也是量化投资好玩之处,若是纯科研问题,那也是科学家的事情,普通人的机会有限。
上午尝试使用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('基准-沪深300(000300)', [ 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%波动率下,是否动用了杠杆,是否有合理性,如何优化呢?
投资及生活感悟
手中有刀,心中有佛。临事静对猛虎,事了闲看落花。
可以有菩萨心肠,但前提是你具备雷霆手段。
没有什么岁月静好,很多时候,进攻才是最好的防守。
看似段子,但又有几分道理的话:
你说女人爱你,你穷一下试试。你说男人爱你,你谈钱试试。你说老板看中你,你谈条件试试。你说你有好朋友,你借钱试试。 网络
将军赶路,不追小兔。
聚焦,延迟满足和不纠缠烂人烂事。
对于情绪巨婴——划清边界,礼貌远离,不失为上上策,也是最好的及时止损。
日拱一卒,功不唐捐
1、美股指数看下标普500,以及与之相关性高的指数。
2、每支指数的波动率测算,组合波动率分析。
3、时序动量择时
风险平价的逻辑在于近似夏普最优。当组合里有低风险标的时,自然会高配。如果没有桥水基金加杠杆的能力,风险平价组合夏普比是高的,但收益率会相对低。
不加杠杆的代码逻辑:
print('------------',vol)
if type(self.target_volatility) is dict:
target_vol = list(self.target_volatility.values())[0]
else:target_vol = self.target_volatility if vol < target_vol : #target.temp["weights"] = current_weights return True
下面是不加杠杆的版本:稳健是稳健了,但收益率差等级组合不少。
目标波动率的逻辑,当波动率小于预设值时,则调高风险资产的占比。——这里有一个存疑,就是那就不是夏普最优了,与等权的区别是?可以从风险平价出发,等比例调风险资产权重(不是调风险预算,直接调权重即可——追求模糊的正确,起点是风险平价,波动率高的低配,目标是控制波动率)。
代码已经提交到星球:
投资感悟与人生思考
关于人性,人性太复杂且不必去考验。
亲情,友情,爱情皆如是。凡事都在成本、收益考量,不同人的底线不同罢了。
关键的节点掌握在自己手里,就不必总是抱怨世态炎凉。做可以掌控的事情。
人到中年重点关注几件事:健康,赚钱,寻找意义。
长远来看,可以掌握的是成长,成功是结果。ABCZ
B计划是“超级个体”计划, C计划有梦想谁都了不起,Z计划保底,FIRE的底气,A计划是普通人的生活状态。
很多人,A计划就卷到天际,那显然不是一个稳健的人生状态。超级个体若是收可以稳定超过职场,你就是一个比较自由的状态。
有人说知识付费是伪命题,应该让客户为效果付费,拿到阶段性的成果,出售指向效果的解决方案。量化的效果就是可盈利的实盘策略,其次是大家自己可以降低大家开发策略的成本。
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/103925
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!