wxpython里集成bokeh做可视化 | 从零实现AI量化投资平台 # 4

今天把回测结果量化并可视化出来。

在wxpython里使用wx.html2浏览器控件显示动态的html,使用bokeh来渲染回测结果。

在wxpython的gui里嵌入浏览器控件是容易的事情。

与普通控件类似,使用wx.html2.WebView.New(当前panel),然后添加到布局器里就可以正常使用了。
 

self.browser = wx.html2.WebView.New(self)
self.vbox.Add(self.browser,proportion=-1,flag=wx.EXPAND|wx.ALL,border=10)
self.browser.LoadURL('http://www.ailabx.com')

wxpython的gui编程,在界面部分有两件重要的事情,一是控件本身使用,这个相对简单,初始化组件,然后摆放到特定的问题,获取或者设置控件的值。

布局通常会用到两个sizer,一个是boxsizer,另一个是gridsizer。

boxsize分成垂直与水平,与css的布局类似,然后在局部控件较多时,使用girdsizer分布。

wxpython里集成bokeh做可视化 | 从零实现AI量化投资平台 # 4_第1张图片

下面来看bokeh的使用,bokeh的安装和入门都非常简单。

from bokeh.plotting import figure, show
class BokehMgr:
    def plot(self):
        x = [1, 2, 3, 4, 5]
        y = [6, 7, 2, 4, 5]

        # create a new plot with a title and axis labels
        p = figure(title="Simple line example", x_axis_label='x', y_axis_label='y')
        # add a line renderer with legend and line thickness to the plot
        p.line(x, y, legend_label="Temp.", line_width=2)

        # show the results
        show(p)

创建一个figure对象,然后使用figure.line画拆线图。


 

wxpython里集成bokeh做可视化 | 从零实现AI量化投资平台 # 4_第2张图片

接下来,植入机器学习策略。

首先是数据集分割,我们使用sklearn的train_test_split对数据集进行切分。

def split_data(self, df, train_valid_date='2016-01-01'):
    print(df.tail())
    df_train = df.loc[(slice(None, train_valid_date), slice(None)), :]
    df_valid = df.loc[(slice(train_valid_date, None), slice(None)), :]

    df_feature = df_train['feature']
    df_label = df_train['label']['LABEL_1']

    from sklearn.model_selection import train_test_split
    X_train, X_test, y_train, y_test = train_test_split(df_feature,df_label, test_size=0.2)
    return X_train, X_test, y_train, y_test

对于多索引的dataframe进行切分,需要注意一点,还是使用df.loc,但传入slice(None,'2016-01-01')把数据集分成两段,一段用于训练,一段用于回测。这里与传统机器学习直接train,test不同,我们需要单独取出一段用于回测来验证策略。

然后调用lightGBM的fit方法直接训练即可。

def fit(
    self,
    dataset: DatasetH,
    num_boost_round=1000,
    early_stopping_rounds=50,
    verbose_eval=20,
    evals_result=dict(),
    **kwargs
):
    dtrain, dvalid = self._prepare_data(dataset)
    self.model = lgb.train(
        self.params,
        dtrain,
        num_boost_round=num_boost_round,
        valid_sets=[dtrain, dvalid],
        valid_names=["train", "valid"],
        early_stopping_rounds=early_stopping_rounds,
        verbose_eval=verbose_eval,
        evals_result=evals_result,
        **kwargs
    )
    evals_result["train"] = list(evals_result["train"].values())[0]
    evals_result["valid"] = list(evals_result["valid"].values())[0]

当然这里我们还没有涉及特征工程优化,新的因子挖掘,这些都是机器学习模型的核心,但我们先要把周边这边流程把跑通,固化下来。

决策树的集成学习有个好处就是可以筛选特征,这个非常厉害,所以AI量化投资里大量使用boosting或者bagging来训练模型,毕竟这是金融决策,透明可解释非常重要。

明天继续。

搭建回测系统主框架 | 从零搭建自己的AI量化平台 #1

"积木式"的策略框架 | 从零搭建自己的AI量化平台 #2

机器学习框架sklearn与qlib数据融合 | 从零搭建自己的AI量化平台 #3

你可能感兴趣的:(建立自己的算法交易事业,人工智能)