Quantlab 5.11含ETF策略年化52%以及卡玛比4.79的债券策略(全量ETF后复权数据下载)
原创内容第649篇,专注量化投资、个人成长与财富自由。
这两天两个策略随代码打包共享:
年化收益52%,最大回撤13%,卡玛比率3.77,ETF轮动系列大有可为(附策略代码和数据下载)。
年化12.6%,最大回撤才2.6%的债券轮动策略,卡玛比4.79,稳稳的幸福
本周更新核心要点:
1、本周所有的策略,含如上两个策略。
2、全量ETF历史日线,一共200多万行,1200+多支ETF,以及LOF基金。
全新的Engine:
class Engine:def _parse_rules(self, task: Task, df):def _rules(rules, b_or=False):signals = []for r in rules:signals.append(eval(r))all = Nonefor s in signals:if all is None:all = selse:if b_or:all != selse:all &= sreturn all# rules = ['roc_20>0.02']for factor in task.names:globals()[factor] = CSVDataloader.get_col_df(df, factor)# print(globals()[factor])all_buy = _rules(task.select_buy)all_sell = _rules(task.select_sell, b_or=True) # 卖出 求或,满足一个即卖出return all_buy, all_selldef _get_algos(self, task: Task, df):bt_algos = importlib.import_module('bt.algos')if task.period == 'RunEveryNPeriods':algo_period = bt.algos.RunEveryNPeriods(n=task.period_N)else:algo_period = getattr(bt_algos, task.period)()algo_weight = getattr(bt_algos, task.weight)()algo_select_where = None# 信号规则if task.select_buy is not None:signal_buy, signal_sell = self._parse_rules(task, df)select_signal = np.where(signal_buy, 1, np.nan)select_signal = np.where(signal_sell, 0, select_signal)select_signal = pd.DataFrame(select_signal, index=signal_buy.index, columns=signal_buy.columns)select_signal.ffill(inplace=True)select_signal.fillna(0, inplace=True)algo_select_where = bt.algos.SelectWhere(signal=select_signal)# 排序因子algo_order_by = Noneif task.order_by_signal:signal_order_by = CSVDataloader.get_col_df(df, col=task.order_by_signal)algo_order_by = SelectTopK(signal=signal_order_by, K=task.order_by_topK, dropN=task.order_by_dropN,sort_descending=task.order_by_DESC)algos = []algos.append(algo_period)if algo_select_where:algos.append(algo_select_where)else:algos.append(bt.algos.SelectAll())if algo_order_by:algos.append(algo_order_by)algos.append(algo_weight)algos.append(bt.algos.Rebalance())return algosdef run(self, task: Task):# 加载数据df = CSVDataloader.get_df(task.symbols, True, task.start_date, task.end_date)# 计算因子if len(task.symbols):df = CSVDataloader.calc_expr(df, fields=task.fields, names=task.names)s = bt.Strategy(task.name, self._get_algos(task, df))df_close = CSVDataloader.get_col_df(df, 'close')bkt = bt.Backtest(s, df_close, name='策略')bkts = [bkt]for bench in [task.benchmark]:data = CSVDataloader.get([bench])s = bt.Strategy(bench, [bt.algos.RunOnce(),bt.algos.SelectAll(),bt.algos.WeighEqually(),bt.algos.Rebalance()])stra = bt.Backtest(s, data, name='benchmark')bkts.append(stra)res = bt.run(*bkts)return res
策略代码+数据下载:AI量化实验室——2024量化投资的星辰大海
代码下载:AI量化实验室 星球,已经运行三年多,1100+会员。quantlab代码交付至5.X版本,含几十个策略源代码,因子表达式引擎、遗传算法(Deap)因子挖掘引擎等,每周五迭代一次。
02 五年财务自由退休
财富自由实战方法论,构建两大系统:金钱系统和商业系统。
推荐第八本书《最重要的事只有一件》。
关于专注。我们想做的事情太多,难免分散注意力。
注意力是稀缺的。把有限的时间聚焦到最重要的事情上。
本书就重要的观点:最重要的事情就是当你完成这件事后,其他事情变得不重要或不必须。
比如咱们说现金系统和商业系统。
最重要的是商业系统。
因为现金系统投资体系构建完成,需要更多本金。
而商业系统可以补充本金。而商业系统里,最重要的是“有价值的产品”。你就知道自己应该如何安排时间和优先级了。