按咱们星球的习惯,每周更新一次代码。
12.1系统原代码发布:
1、趋势策略更新:年化32.1%。
2、简化了gui,把策略task优化成通用的bug。
3、修正一些已知的bug。
下一步计划:端对端的基于深度学习和强化学习的因子挖掘框架搭建。
没错,我们即将启动DeepAlphaGen的框架研发。
星球里留给大家的作业,感谢很多同学的积极参与。
我总结了下,几个方面:
打通实盘的诉求,期货和股票一半一半。
比如下面一个问题以及我的答复:
吾日三省吾身
“你在凝望深渊的时候,深渊也是凝望你”。
放下情绪,追逐自己的成长。
人脉如此。
曾经我们多么渴望接近一些东西,可能带来安全感。
然而,人脉讲求对称性。你的价值决定人脉的质量。
实力不够,圈子不要硬挤,没有意义。
要搞很多人际关系的生意,肯定不是好的生意。——老俞。
财富自由践行社:10%低风险投资组合+财富自由快车道的心法,践行手册,主要不聊投资,谈储蓄,复利,成长, 人生意义与幸福。
原创文章第417篇,专注“AI量化投资、个人成长与财富自由“。
年化42.86%,比基准的12.86高出不少,回撤才9.43%,还是比较稳健的。
策略核心代码如下:我们使用KNN算法,大家可以考虑替换成SVM,或者树模型lightGBM。
class MLTrainOnceStrategy(Strategy): price_delta = .004 # 0.4% def init(self): # Init our model, a kNN classifier self.clf = KNeighborsClassifier(7) # Train the classifier in advance on the first N_TRAIN examples df = self.data.df.iloc[:N_TRAIN] X, y = get_clean_Xy(df) self.clf.fit(X, y) # Plot y for inspection self.I(get_y, self.data.df, name='y_true') # Prepare empty, all-NaN forecast indicator self.forecasts = self.I(lambda: np.repeat(np.nan, len(self.data)), name='forecast') def next(self): # Skip the training, in-sample data if len(self.data) < N_TRAIN: return # Proceed only with out-of-sample data. Prepare some variables high, low, close = self.data.High, self.data.Low, self.data.Close current_time = self.data.index[-1] # Forecast the next movement X = get_X(self.data.df.iloc[-1:]) forecast = self.clf.predict(X)[0] # Update the plotted "forecast" indicator self.forecasts[-1] = forecast # If our forecast is upwards and we don't already hold a long position # place a long order for 20% of available account equity. Vice versa for short. # Also set target take-profit and stop-loss prices to be one price_delta # away from the current closing price. upper, lower = close[-1] * (1 + np.r_[1, -1] * self.price_delta) if forecast == 1 and not self.position.is_long: self.buy(size=.2, tp=upper, sl=lower) elif forecast == -1 and not self.position.is_short: self.sell(size=.2, tp=lower, sl=upper) # Additionally, set aggressive stop-loss on trades that have been open # for more than two days for trade in self.trades: if current_time - trade.entry_time > pd.Timedelta('2 days'): if trade.is_long: trade.sl = max(trade.sl, low) else: trade.sl = min(trade.sl, high)
数据格式如下,同代码一起打包已经发布至星球:
请大家前往星球下载:
代码说明:
本周我们深度调研了vnpy, ctpbee, backtesting,还看了pyalgotrade。
结合之前的backtrader, pybroker和qlib。
quantlab2.x的底层引擎之前是pybroker,3.0引用了大量的backtesting的代码,原因如下:
1、pybroker做空部分不好理解,对于后续接实盘带来麻烦,这块需要重写。
2、vnpy和ctpbee的设计思路,回测引擎与实盘过于“追求相似”,各种send_order和order_request。其实从回测切换到实盘,从onbar开始解耦就好了。
实盘我们还会使用ctpbee的部分代码。
吾日三省吾身
在高度不确定的当下,没有人可以预测未来,更不用说资本市场。
但我们仍然可以做很多事情。
反脆弱的系统设计,所谓“守正出奇”。
寻找“局部”最优解,持续迭代,总能突破。
这是当下的力量。
我们能拥用的只有当下。
往你能掌控的最优的步骤,多走一步,看到更多的信息,得到进一步的反馈,再优化我们的系统。
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/103603
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!