深红利与创成长轮动:年化27.5%,优化了一下策略(代码+数据)

研报先同步到星球,代码后续跟上。

图片

图片

图片准备数据

指数以及对应的ETF,一般来说,指数的历史数据比较全,而ETF的数据更容易获得,但有些ETF成立时间太短,比如513880.SH(日经225, 2019年才成立,历史数据太有限),而N225指数可以有很长的历史数据。

图片

指数数据来看,股票、债券指数都比较容易获得。

最难的是商品,也就是黄金和原油指数,还有10年期美债。

获取黄金指数代码:

import yfinance as yf
gold = yf.Ticker("GOLD")
gold_data = gold.history(period="max")
print(gold_data)

图片

获取布伦特原油指数数据:

import yfinance as yf

# 定义您想要获取数据的原油指数的Ticker符号
# 例如,WTI原油期货的Ticker符号是"CL",布伦特原油期货的Ticker符号是"Brent"
# 请注意,Ticker符号可能因市场而异,您需要根据实际情况进行选择
ticker = "CL"  # 这里以WTI原油为例

# 创建Ticker对象
ticker = yf.Ticker(ticker)

# 获取历史数据
# period可以是"1d", "1mo", "3mo", "6mo", "1y", "2y", "5y", "10y", "ytd", "max"
# startend是数据的开始和结束日期,格式为"YYYY-MM-DD"
data = ticker.history(period="max")

# 打印数据
print(data)

从1973年至今的数据:

图片

美债的代码是:

ticker_str = "^TNX" # 十年期美债

即可。

有了基础数据:基于指数的日频开盘价、最高价、最低价和收盘价作为原始数据,并使用 Ta-Lib
批量化生成 MACD、KDJ、RSI 等一系列量价指标,经初步筛选后共包含 154 个因子

这154个因子,研报没有具体给——首先研报可能是简版,哪位同学有完全版本,欢迎同步给我。——另外,说明因子不是那么重要。

初步考虑把常用的技术分析指标,比如MACD, KDJ,RSI,然后考虑把qlib的alpha158,worldquant101的一些指标整合起来。

模型主要是lightGBM,然后对比xgboost,这个咱们实现过很多次了。

 规则引擎

咱们的回测规则引擎,目前支持多条规则,至少满足N条这样的条件。

基本可以满足多数场景的需求。

星球有同学问,

图片

这是最强的规则表达式的逻辑。

由此引发了我的一个思考。

规则可以有无穷多,面对历史数据,我们当然可以凑出“无数个”看起来很不错的策略。

有时候不是有意为之,就得了不错的结果。

但投资有意思的地方,是你永远不知道历史能不能代表未来,有多大程度能代表未来。

谈不上因果,有时候连相关都谈不上。

所以,星球一度转向机器学习,多因子,排序策略。

但因子挖掘也面临这样的问题。

在有限数据的情况下,比如多数是价量数据,这时候,你构建100多个因子甚至更多,有某些时间段,有些因子确实表现好——严格来说“不是因子表现好”。——是时间序列在过去某段时间恰好与这个因子“相关性高。——比如小市值,比如价值,在某年年份就很突出,然后变得不好。

从因子的角度,这就是市值因子,或者说价值因子,还有动量因子等等。

因子构造复杂了就容易过拟合。

而且现在的深度学习架构,具备一定程度自己抽取特征的能力,就是说它会自动拟合,也不需要构造因子。

吾日三省吾身

特斯拉在成名之后,如同当下的网红,混迹于上流社会,结识了很多名流。

后来由于发明过于超前且执念破产。

在他精力无处宣泄,没有找到未来方向的时候,他酗酒,甚至沉迷于赌桌,唯独洁身自好的是拒绝女色。

人生之意义,究竟是使命驱动,还是欲望驱动。

我知道,很多人正义凛然说前者,什么生来就要改变世界之类的。

但事实是,多数人没有办法改变世界。

百万富翁快车道,这个兄弟的理念就是欲望驱动。

它的欲望,就是年少时看到的那台兰博基尼超跑。

特斯拉的使命感,100%强过爱迪生,但更多世人的眼中,爱迪生才真正改变的世界。

科学的成功,商业的成功,重结果而非过程,重效果而非初心。

理想主义的初心是好的,但重要的是拿到结果。

否则就是流于形式。

当你还是一个nobody时,欲望就是一个单纯的动力,而当你功成名就时,使命驱动,让你更伟大,能走得更远。

“股票投资和减肥一样,决定最终结果的不是头脑而是耐心。”

《彼得·林奇的成功投资》

修正一个小bug:(bt框架里获取历史持仓的逻辑,有一些小变化,这里做了一下修正),主体不受影响,策略表现较之前更好了。

图片

def __call__(self, target):
if len(self.rules_buy) == 0 and len(self.rules_sell) == 0:
return True

df_bar = self.df.loc[target.now]
if type(df_bar) is pd.Series: df_bar = df_bar.to_frame().T df_bar.set_index('symbol', inplace=True) for c in df_bar.columns: df_bar.loc[:, c] = df_bar[c].astype(float) # df_bar['roc_20'] = df_bar['roc_20'].astype(float) matched_buy = [] matched_sell = [] if self.rules_buy and len(self.rules_buy): matched_buy = self._check_if_matched(df_bar, self.rules_buy, self.buy_at_least_count) else: matched_buy = list(df_bar.index) # 没有配置买入规则,但有卖出,就是选全选。 if self.rules_sell and len(self.rules_sell): matched_sell = self._check_if_matched(df_bar, self.rules_sell, self.sell_at_least_count) date_pre = target.now - timedelta(days=1) if date_pre in target.positions.index: sig = target.positions.loc[date_pre] > 0 holdings = list(sig[sig == True].index) # noqa: E712 else: holdings = [] print(target.now) if len(holdings): print(holdings) # holdings = target.get_long_symbols(target.ctxs) if holdings and len(holdings) > 0: matched_buy += holdings matched_buy = list(set(matched_buy)) if matched_sell: for sell in matched_sell: if sell in matched_buy: matched_buy.remove(sell) matched_buy = list(set(matched_buy)) target.temp['selected'] = matched_buy

 

吾日三省吾身

其实没有人可以预见未来,生活就是这么一步步走出来的。

什么人生规划,职业规划,既然不可知,如何规划。

只能说是一个模糊的方向。

比如特斯拉坚持不去做牧师,而要学理工科,做电气工程师。

而拿破仑,立志要解放科西嘉,成为海岛的主人。

这些都是模糊的方向,然后做大量的,长期的积累。

对于盲目的船来说,所有的风向都是逆风。一个人生命中的最大幸运,莫过于在他的人生中途,即在他年富力强时发现了自己的人生使命。

斯蒂芬·茨威格在《人类的群星闪耀时》

没有人在乎你想要什么,你想过什么样的生活。

重要的事,你能为这个世界做些什么?你想为这个世界做些什么?

这两个不同领域的英雄的故事,代表了两个不同的方向:

特斯拉是个人英雄主义的代表,发明家,一身心血痴迷于发明创造。

如同这几天非常火的姜萍,这是需要天分加后天努力的。

科学家外加商业能力,那将无往而不利,比如爱迪生。

个人英雄主义适合于起步,然后要构建自己的组织,让生意或事业可以自主运转。

发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/103350
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 2024 年 7 月 26 日
下一篇 2024 年 7 月 29 日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注