昨天星球同学分享一篇研报,我觉得挺有意思,打算拆解和复现了下。
研报先同步到星球,代码后续跟上。
准备数据
指数以及对应的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" # start和end是数据的开始和结束日期,格式为"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时,欲望就是一个单纯的动力,而当你功成名就时,使命驱动,让你更伟大,能走得更远。
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/103349
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!