底层替换了pybroker,其实我们仅依赖pandas(numpy),大家读起代码更容易了。
现在我们要把传统一些经典的规则策略和系统实现一下。
有同学问,为何为直接把gplearn整合进来,deepalphagen端对端因子挖掘整合进来。
这是一个递进的过程。
机器学习时代,不意味着传统规则量化就完全失效了。
咱们的框架这么写指标,我们支持大家引入ta-lib或者tulipy(这个可以直接使用pip安装)
def SMA(arr: pd.Series, n: int) -> pd.Series:
"""
Returns `n`-period simple moving average of array `arr`.
"""
return pd.Series(arr).rolling(n).mean()
def HIGH(arr: pd.Series, n: int) -> pd.Series:
return pd.Series(arr).shift(1).rolling(n).max()
def LOW(arr: pd.Series, n: int) -> pd.Series: return pd.Series(arr).shift(1).rolling(n).min() import tulipy as ti def ATR(high: pd.Series, low: pd.Series, close: pd.Series, n: int) -> pd.Series: hi, lo, c_prev = pd.Series(high).shift(1), pd.Series(low).shift(1),pd.Series(close).shift(1) tr = np.max([hi - lo, (c_prev - hi).abs(), (c_prev - lo).abs()], axis=0) atr = pd.Series(tr).rolling(n).mean().bfill() return atr
类似于tradingview,指标可以直接可视化显示出来,这个还是非常方便的。
简单的海龟策略的代码——这里仅实现了“突破”买入卖出:
from backtesting import Backtest, Strategy from backtesting.lib import crossover from backtesting.test import * class TurtleStrategy(Strategy): def init(self): price = self.data.Close self.high = self.I(HIGH, price, 20) self.low = self.I(LOW, price, 10) self.atr = self.I(ATR, self.data.High, self.data.Low, price, 20) print(self.atr) def next(self): if self.data.Close[-1] > self.high[-1]: self.buy() if self.data.Close[-1] < self.low[-1]: self.sell() bt = Backtest(GOOG, TurtleStrategy, commission=.002, exclusive_orders=True) stats = bt.run() print(stats) bt.plot()
大家可以前往星球下载最新版本代码:
原创文章第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的部分代码。
吾日三省吾身
在高度不确定的当下,没有人可以预测未来,更不用说资本市场。
但我们仍然可以做很多事情。
反脆弱的系统设计,所谓“守正出奇”。
寻找“局部”最优解,持续迭代,总能突破。
这是当下的力量。
我们能拥用的只有当下。
往你能掌控的最优的步骤,多走一步,看到更多的信息,得到进一步的反馈,再优化我们的系统。
按咱们星球的习惯,每周更新一次代码。
12.1系统原代码发布:
1、趋势策略更新:年化32.1%。
2、简化了gui,把策略task优化成通用的bug。
3、修正一些已知的bug。
下一步计划:端对端的基于深度学习和强化学习的因子挖掘框架搭建。
没错,我们即将启动DeepAlphaGen的框架研发。
星球里留给大家的作业,感谢很多同学的积极参与。
我总结了下,几个方面:
打通实盘的诉求,期货和股票一半一半。
比如下面一个问题以及我的答复:
吾日三省吾身
“你在凝望深渊的时候,深渊也是凝望你”。
放下情绪,追逐自己的成长。
人脉如此。
曾经我们多么渴望接近一些东西,可能带来安全感。
然而,人脉讲求对称性。你的价值决定人脉的质量。
实力不够,圈子不要硬挤,没有意义。
要搞很多人际关系的生意,肯定不是好的生意。——老俞。
最近策略与文章:
想进入财富自由快车道,要找到自己”天生喜欢和擅长“的领域,去积累专长。
十年年化20%-29.6%的策略集:覆盖动量、风险平价,波动率(系统+策略集代码+数据)
稳健的绝对型收益策略:长期年化10.6%的风险平价策略(代码+数据)
十二年年化21.4%的大小盘(沪深300vs创业板ETF)轮动策略,简单而有效(代码+数据下载)
创业板单标的择时策略,年化20.6%,投资只要你有耐心,守纪律,年化20%+并不难。(代码+数据)
实盘SAAS化策略:长期年化29.6%,代码发布,请下载更新
我们有两个星球:
AI量化实验室,关注AI量化投资,开发&开源共享20%+的策略集,数据集。多因子,AI模型,量化框架等。
财富自由践行社:10%低风险投资组合+财富自由快车道的心法,践行手册,主要不聊投资,谈储蓄,复利,成长, 人生意义与幸福。
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/103606
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!