Quantlab3.0进展,结合Quant4.0的思考:全自动,可解释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的框架研发。

星球里留给大家的作业,感谢很多同学的积极参与。

我总结了下,几个方面:

打通实盘的诉求,期货和股票一半一半。

比如下面一个问题以及我的答复:

图片

我们下一步要做的事情,quantlab3.0,主打单标的择时。

今天我们要重温一个“quant4.0”,对于咱们AI量化事业,业内一个比较系统的思考。

Quant 1.0:交易信号和交易策略通常是简单、可理解和可解释的,以减少建模中样本内过拟合的风险。

传统量化主要是基于交易员经验的策略模型。普通人学习量化,仍然是最佳的入门方式,海龟,三重滤网等经典的量化投资系统,有助于个人交易思想的建立。

Quant 2.0:将量化的研究模式从小型的天才工坊转变为工业化、标准化的阿尔法工厂。这些因子通常具有高回测收益率,高夏普比率,合理的换手率以及与Alpha数据库中现有因子的低相关性。

Quant2.0主要是挖因子,在股票市场的私募里已经比较流行

gplearn等自动挖掘因子的工具基本是标配:gplearn在期货和多支股票上因子挖掘实战的代码(代码+数据下载)

Quant3.0:Quant 3.0更注重深度学习建模。在使用相对简单的因子下,深度学习仍然有潜力通过其强大的端到端学习能力和灵活的模型拟合能力。深度学习需要大量的数据。

咱们在DeepAlphaGen里有尝试过端到端的因子合成:端到端因子挖掘框架:DeepAlphaGen V1.0代码发布,支持最新版本qlib

当然,这里权是alpha模型的部分,风控与投资组合管理仍然是必要的。

Quant4.0:新一代量化技术“Quant 4.0”融合了最先进的自动化AI、可解释AI、知识驱动AI,正在践行“端到端全流程AI”和“AI creates AI”的理念,勾勒量化行业的新前景。

图片

自动特征工程,比如autogluon,咱们之前也写过代码。Keras(Tensorflow) vs AutoGluon对沪深300指数20日收益率预测对比(代码+数据)

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

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

相关推荐

发表回复

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