原创文章第113篇,专注“个人成长与财富自由、世界运作的逻辑, AI量化投资”。
昨天的策略我是比较满意的,沿着进化的方向在迭代我们的策略。ETF轮动+RSRS择时,加上卡曼滤波:年化48.41%,夏普比1.89
我们会持续做这件事。
星球的会员群里,大家的讨论氛围非常好,非常好。这才是我们做社群的核心目的,也坚定我想把这件事持续做下去的信心。
很多人技术很好,只是没有找到量化的方向;另外一些同学经验非常丰富,需要前沿技术的突破来提升等等。
01 RSRS标准分
前面我们计算了RSRS的值,在研报上还有标准分,就是rolling(600)天的标准化。这里我们实现一个Norm的表达式。
class Norm(Rolling): def __init__(self, feature, N): super(Norm, self).__init__(feature, N, "slope") def _load_internal(self, instrument): # 因子标准化 def get_zscore(sub_series): mean = np.mean(sub_series) std = np.std(sub_series) return (sub_series[-1] - mean) / std series = self.feature.load(instrument) series = series.fillna(0.0) result = series.rolling(self.N, min_periods=100).apply(get_zscore) series = pd.Series(result, index=series.index) return series
另外昨天有星球成员反馈,可以让quantstats直接打开html。
import webbrowser webbrowser.open('stats.html')
使用标准分进行回测:
RSRS_benchmark = '510300.SH' #e.add_extra(RSRS_benchmark, fields=['RSRS($high,$low,18)', '$RSRS_beta<0.8'], names=['RSRS', 'signal']) e.add_extra(RSRS_benchmark, fields=['RSRS($high,$low,18)','Norm($RSRS_beta,600)','$Zscore<0.0'], names=['RSRS','Zscore', 'signal'])
在使用标准分之后,回撤会进一步下降,当然收益率也随之减少。
02 总结与反思
动量与RSRS都是不错的东西,如何把它们有机整合起来,还需要再做更深层次的挖掘,结合真实交易背后的逻辑,实现订单与交易的情况进行分析。一个指标完深入了,比起追求更多花里胡哨的东西,要有用得多。
我们还会继续在RSRS,KF,动量,ETF轮动策略上深挖。
03 随笔
当我这个原创数字更新到1000时,我相信疫情消散,人间皆安。
昨天看万维纲的《高手》,做决策的时候,10/10/10的理念,也就是想想自己10分钟,10个月,10年后对自己当前这个决策会怎么看。
我把它引入到自己的情绪管理。10秒,10小时,1000天。
10秒原则会让你避免掉很多情绪上的”应激反应“,很多人在地铁上与陌生人能吵得面红耳赤,甚至大打出手。其实很多时候,想骂人的话,想动的手,你让自己能冷静10秒钟,感觉不叫事;
10小时,差不多是一个半天,都决策时,给自己一个冷静期;
10年太长,那么沧海桑田,往前看三年,想想眼前面临的困难,纠结,担忧还算不算事?往前看三年,疫情不是事。我们要做的,趁着这些时光,快速充实自己,在类似的黑天鹅出现时,不会再次陷入被动。