欢迎光临散文网 会员登陆 & 注册

量化软件下载:赫兹股票期货量化软件交易订单的原始时序

2023-08-16 13:24 作者:大牛啊呢  | 我要投稿

实施提议方式的实现

和往常一样,理论上一切看起来都很完美。 现在,我们来检查一下从两个分类器中获得的实际效果。 为此,我们需要再次重写代码。

成交自动标记的函数

我已做了一些改动。 现在可以根据元模型标签重新标记基准模型的标签:

def labelling_relabeling(dataset, min=15, max=15, relabeling=False) -> pd.DataFrame:     labels = []     for i in range(dataset.shape[0]-max):         rand = random.randint(min, max)         curr_pr = dataset['close'][i]         future_pr = dataset['close'][i + rand]         if relabeling:            m_labels  = dataset['meta_labels'][i:rand+1].values                 if relabeling and 0.0 in m_labels:            labels.append(2.0)        else:             if future_pr + MARKUP < curr_pr:                 labels.append(1.0)             elif future_pr - MARKUP > curr_pr:                 labels.append(0.0)             else:                 labels.append(2.0)              dataset = dataset.iloc[:len(labels)].copy()     dataset['labels'] = labels     dataset = dataset.dropna()     dataset = dataset.drop(         dataset[dataset.labels == 2].index)     return dataset

高亮显示的代码检查是否存在重新标记标志。 如果它为真,并且当前交易水平线元标记包含零,则元模型拒绝在该部分进行交易。 相应地,此类成交被标记为 2.0,并从数据集合中删除。 因此,我们能够从基准模型的训练样本中迭代去除不必要的样本,从而减少其训练的误差。

自定义测试器函数

现在有一个扩展功能,允许我们同时测试两个模型(基准模型和元模型)。 此外,定制测试器现在能够重新标记元模型的标签,以便在下一次迭代中改进它。

def tester(dataset: pd.DataFrame, markup=0.0, use_meta=False, plot=False):     last_deal = int(2)     last_price = 0.0    report = [0.0]     meta_labels = dataset['labels'].copy()     for i in range(dataset.shape[0]):         pred = dataset['labels'][i]         meta_labels[i] = np.nan         if use_meta:            pred_meta = dataset['meta_labels'][i] # 1 = allow trades        if last_deal == 2 and ((use_meta and pred_meta==1) or not use_meta):             last_price = dataset['close'][i]             last_deal = 0 if pred <= 0.5 else 1            continue        if last_deal == 0 and pred > 0.5 and ((use_meta and pred_meta==1) or not use_meta):             last_deal = 2            report.append(report[-1] - markup +                           (dataset['close'][i] - last_price))             if report[-1] > report[-2]:                meta_labels[i] = 1            else:                 meta_labels[i] = 0            continue        if last_deal == 1 and pred < 0.5 and ((use_meta and pred_meta==1) or not use_meta):             last_deal = 2            report.append(report[-1] - markup +                           (last_price - dataset['close'][i]))             if report[-1] > report[-2]:                meta_labels[i] = 1            else:                 meta_labels[i] = 0    y = np.array(report).reshape(-1, 1)     X = np.arange(len(report)).reshape(-1, 1)     lr = LinearRegression()     lr.fit(X, y)     l = lr.coef_     if l >= 0:         l = 1    else:         l = -1    if(plot):         plt.plot(report)         plt.plot(lr.predict(X))         plt.title("Strategy performance R^2 " + str(format(lr.score(X, y) * l,".2f")))         plt.xlabel("the number of trades")         plt.ylabel("cumulative profit in pips")         plt.show()     return lr.score(X, y) * l, meta_labels.fillna(method='backfill')


量化软件下载:赫兹股票期货量化软件交易订单的原始时序的评论 (共 条)

分享到微博请遵守国家法律