当前已经积累的策略集:
代码已经发布至星球:
今天的策略是风险平价:
name = "全球大类资产风险平价" desc = "全球大类资产风险平价" symbols = ["563300.SH", "510300.SH", "510500.SH", "512100.SH", "159915.SZ", "159967.SZ", "159920.SZ", "513100.SH", "513500.SH", "518880.SH", "159985.SZ", "513520.SH", "510050.SH"] algo_period = "RunMonthly" algo_period_days = 20 #在RunPeriod时有效 rules_buy = [] at_least_buy = 1 rules_sell = [] at_least_sell = 1 order_by = "" topK = 1 dropN = 0 b_ascending = 0 algo_weight = "WeightERC" algo_weight_fix = [] feature_names = [] features = [] start_date = "20100101" end_date = "" commission = 0.0001 slippage = 0.0001 init_cash = 1000000 benchmark = "510300.SH"
算子代码如下:
class WeightERC(Algo): """ Sets temp['weights'] based on equal risk contribution algorithm. Sets the target weights based on ffn's calc_erc_weights. This is an extension of the inverse volatility risk parity portfolio in which the correlation of asset returns is incorporated into the calculation of risk contribution of each asset. The resulting portfolio is similar to a minimum variance portfolio subject to a diversification constraint on the weights of its components and its volatility is located between those of the minimum variance and equally-weighted portfolios (Maillard 2008). See: https://en.wikipedia.org/wiki/Risk_parity Args: * lookback (DateOffset): lookback period for estimating covariance * initial_weights (list): Starting asset weights [default inverse vol]. * risk_weights (list): Risk target weights [default equal weight]. * covar_method (str): method used to estimate the covariance. See ffn's calc_erc_weights for more details. (default ledoit-wolf). * risk_parity_method (str): Risk parity estimation method. see ffn's calc_erc_weights for more details. (default ccd). * maximum_iterations (int): Maximum iterations in iterative solutions (default 100). * tolerance (float): Tolerance level in iterative solutions (default 1E-8). Sets: * weights Requires: * selected """ def __init__( self, lookback=pd.DateOffset(months=3), initial_weights=None, risk_weights=None, covar_method="ledoit-wolf", risk_parity_method="ccd", maximum_iterations=100, tolerance=1e-8, lag=pd.DateOffset(days=0), ): super(WeightERC, self).__init__() self.lookback = lookback self.initial_weights = initial_weights self.risk_weights = risk_weights self.covar_method = covar_method self.risk_parity_method = risk_parity_method self.maximum_iterations = maximum_iterations self.tolerance = tolerance self.lag = lag def __call__(self, target): selected = target.temp["selected"] curr_symbols = target.df_bar.index selected = [s for s in selected if s in curr_symbols] if len(selected) == 0: target.temp["weights"] = {} return True if len(selected) == 1: target.temp["weights"] = {selected[0]: 1.0} return True t0 = target.now - self.lag prc = target.df_close.loc[t0 - self.lookback: t0, selected] returns = prc.pct_change().dropna() if len(returns) < 10: return False # ERC = EqualRiskContribution(returns.cov()) # ERC.solve() # tw = ERC.x # print(tw) tw = calc_erc_weights( returns, initial_weights=self.initial_weights, risk_weights=self.risk_weights, covar_method=self.covar_method, risk_parity_method=self.risk_parity_method, maximum_iterations=self.maximum_iterations, tolerance=self.tolerance, ) target.temp["weights"] = tw.dropna().to_dict() return True
吾日三省吾身
想给一些量化新手提供更易用的“开箱即用”的平台。这几天调研了前端的开发。
有考虑过uni-app,ionic和flutter。
uni-app与ionic类似,都是web的解决方案,当然可以打包成app,flutter可以打包成原生的app。——当然app并非咱们直接的刚需,但有当然更好了。
三者缺点是都要引入新的技术栈。uni-app与ionic都支持vue3,而flutter背后是dart。
原先对于dart这种高级语言的形态还是很满意了。折腾了Andriod Studio,androd sdk, flutter sdk等,包非常大,动辄几个G,加上在外网就更慢了。在启动安卓虚拟机时,最终决定放弃了。——还是太重。
想起之前折腾过几天的flet。
又过了这么一段时间,有惊喜。
之前体验过flet 和 nicegui。工欲善其事,必先利其器-NiceGUI:AI量化投资研究开发,后来用nicegui是直接原因是当前flet竟然没有Datetime Picker控件。之后又不用nicegui的原因是,它的控件更面像桌面程序。做出来的web感觉四不像。而我们真正的诉求的手机H5为主,App为辅。
Flet开发的图,还行吧。
历史文章:
Quantlab v3.9.2:策略集合——创成长与红利低波动的智能Beta策略(年化29.3%,最大回撤24%)(附源码)
继续写策略:大小盘轮动——沪深300与创业板ETF的轮动,取动量大者,若均小于0,则持有现金:
年化18.1%,最大回撤28.2%。
其实大家发现,结合我们昨天的三个策略:
Quantlab v3.9.2:策略集合——创成长与红利低波动的智能Beta策略(年化29.3%,最大回撤24%)(附源码)
要开发一个年化20-30%的策略并不难。
为什么大家仍然觉得投资很难。
因为不确定性,更确切地说,因为回撤。
在回撤期,你无法相信是策略或因子失效,还是正常的策略回调。
国内版本的“全天候策略”:
策略代码如下:
name = "中国版全天候策略" desc = "中国版全天候策略" symbols = ['159928.SZ','510050.SH','512010.SH','513100.SH','518880.SH','511220.SH','511010.SH','161716.SZ'] algo_period = "RunQuarterly" algo_period_days = -1 #在RunPeriod时有效 rules_buy = [] at_least_buy = 1 rules_sell = [] at_least_sell = 1 order_by = "" topK = 1 dropN = 0 b_ascending = 0 algo_weight = "WeightFix" algo_weight_fix = [0.03,0.06,0.08,0.05,0.1,0.32,0.26,0.1] # WeightFix时生效 feature_names = [] features = [] start_date = "20100101" end_date = "" commission = 0.0001 slippage = 0.0001 init_cash = 1000000 benchmark = "510300.SH"
系统源代码(策略与数据)请前往星球下载:
所有的策略参数均在这个目录下(还是持续更新中):
历史文章:
Quantlab v3.9.2:策略集合——创成长与红利低波动的智能Beta策略(年化29.3%,最大回撤24%)(附源码)
Quantlab3.9代码:内置大模型LLM因子挖掘,全A股数据源以及自带GUI界面
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/103428
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!