投资理念刷新:
1、大类资产配置,适合大资金理财,年化4-10%+,省心省事,但这个杠杆是财富自由的关键。试想,你有500-5000万+,那么这个逻辑就可以生效。
2、在本金积累阶段,我之前是不建议走投资这条道的。因为更高的收益意味着风险。然而对比下来,何事无风险?创业风险更大,职场没风险?——时间成本也是隐性的风险。而投资的风险——你是可以掌握的,可以练习的。李笑来投加密货币的过程,就“没有风险”。塔勒布的“杠铃策略”也告诉我们,要拿少部分(不超过20%)投资高风险高杠杆的东西,你才可能有“阶级跃迁”的机会。
当下阶级跃迁的机会并不多,互联网新贵的创业路、加密货币之前造就一批,还有就是顶级高管的超高薪酬。哪条路好走?似乎AI量化还算可以先走一走。
今天继续pybroker。
01 动态再平衡
动态再平衡是构建投资组合策略里一个常见的手法。就是在特定的时间,比如月初或者年初,把组合中各标的权重恢复到原来的权重,比如等权,或者一个固定的权重。
与backtrader使用Strategy是一个类的差别在于,pyb是使用传入函数的方式。
set_before_exec和set_after_exec,就是在我们类似onbar函数之前及之后,调用的函数,这两个函数与exec的区别在于,exec是逐个标的的context,而这两个函数是所有的context,是一个dict(“symbol”:ExecContext}这样的格式。
了解了这个机制:
def rebalance(ctxs: dict[str, ExecContext]): dt = tuple(ctxs.values())[0].dt if start_of_month(dt): target = 1 / len(ctxs) #等权重 set_target_shares(ctxs, {symbol: target for symbol in ctxs.keys()})
我们在执行之前:
strategy.set_after_exec(rebalance)
就可以了。
下面会用到一些context需要的功能,全局的参数:pyb.param,在每次循环里传递current_month这个变量。
——当然,我们之前“积木式”编程里有另外的做法,可以自己记录自己的日期。——后续出于开发策略效率的考虑,可以把积木式编程整合过来。
target是目标他们,需要使用ctx.calc_target_shares把target换成shares,说白就是市值/当前价格,需要买/卖多少份额。
然后根据当前持仓的pos来计算来执行买或卖。
月初买卖对应的shares。
02 动量策略
这里有两个使用框架的细节,一是如何添加指标;二是如何自定义指标;
其实框架本身没有实现指标,都是自定义,使用也比较简单。
我按官网的例子,写了一个N日动量的指标,使用了numba的njit。
其实就是实现一个函数,pyb函数就是执行单元。比如roc_N,第一个参数是bar_data,可近似理解就是一个dataframe,包括所有的数据列。后面是参数。
def roc_N(bar_data, lookback): print(type(bar_data)) print(bar_data) @njit # Enable Numba JIT. def vec_roc(values): # Initialize the result array. n = len(values) print(values) out = np.array([np.nan for _ in range(n)]) for i in range(lookback, n): out[i] = values[i]/values[i-lookback] -1 return out # Calculate with close prices. return vec_roc(bar_data.close) roc_20 = pybroker.indicator('roc_20', roc_N, lookback=20) roc_20(df)
把indicators在add_execution即可,可以传一个list——多个指标。
创业板的20日动量不错的,不过从2016年到1018年,策略属于横盘。
03 动量轮动策略
多个标的,每天按指标进行排序:
然后,根据排序结果,进行操作。
小结:
1、使用技术指标
2、自定义技术指标
3、动量策略
4、动量轮动策略
代码与数据均上传至知识星球中。
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/104128
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!