文章 "网格和马丁格尔交易系统中的机器学习。 您敢为其打赌吗?" - 页 3

 
我在哪里可以看到乘法器的变体? 例如,不是按马丁,而是在增长或减少时增加手数、停止手数变化、对冲另一序列的手数以及其他变体的不同变体。
[删除]  
1_lexa:
我在哪里可以看到乘数的选项? 例如,不是按马丁,而是在增长或减少时增加手数、停止手数变化、对冲另一序列的手数以及其他变量。

网格系数、网格间距、网格大小

这里假设所有情况下的网格都是固定的,机器学习算法会将其泛化到所有情况。对于对冲,您需要修正标记和测试逻辑。我还没有做过。

[删除]  
Aleksey Vyazmikin:

尽量不要按照利润,而是按照未平仓头寸的 数量来标价,越少越好。

我就会发现,有很多选择。等我完成另一项研究,我就试试看

要做到这一点并不难,只需改变加价条件。
[删除]  
Maxim Dmitrievsky:

我们会看到,有很多选择。等我完成另一项研究,我就试试看

这并不难,只需更改标记条件即可。
def add_labels(dataset, min, max, distances, coefficients):
    labels = []
    for i in range(dataset.shape[0]-max):
        rand = random.randint(min, max)
        all_pr = dataset['close'][i:i + rand + 1]

        grid_stats = {'up_range': all_pr[0] - all_pr.min(),
                      'dwn_range': all_pr.max() - all_pr[0],
                      'up_state': 0,
                      'dwn_state': 0,
                      'up_orders': 0,
                      'dwn_orders': 0,
                      'up_profit': all_pr[-1] - all_pr[0] - MARKUP,
                      'dwn_profit': all_pr[0] - all_pr[-1] - MARKUP
                      }

        for i in np.nditer(distances):
            if grid_stats['up_state'] + i <= grid_stats['up_range']:
                grid_stats['up_state'] += i
                grid_stats['up_orders'] += 1
                grid_stats['up_profit'] += (all_pr[-1] - all_pr[0] + grid_stats['up_state']) \
                * coefficients[int(grid_stats['up_orders']-1)]
                grid_stats['up_profit'] -= MARKUP * coefficients[int(grid_stats['up_orders']-1)]

            if grid_stats['dwn_state'] + i <= grid_stats['dwn_range']:
                grid_stats['dwn_state'] += i
                grid_stats['dwn_orders'] += 1
                grid_stats['dwn_profit'] += (all_pr[0] - all_pr[-1] + grid_stats['dwn_state']) \
                * coefficients[int(grid_stats['dwn_orders']-1)]
                grid_stats['dwn_profit'] -= MARKUP * coefficients[int(grid_stats['dwn_orders']-1)]
        
        if grid_stats['up_orders'] < grid_stats['dwn_orders'] and grid_stats['up_profit'] > 0:
            labels.append(0.0)
            continue
        elif grid_stats['dwn_profit'] > 0:
            labels.append(1.0)
            continue
        
        labels.append(2.0)

    dataset = dataset.iloc[:len(labels)].copy()
    dataset['labels'] = labels
    dataset = dataset.dropna()
    dataset = dataset.drop(
        dataset[dataset.labels == 2].index).reset_index(drop=True)
    return dataset

黄色 - 更改条件

结果(2020.05 的研究)

这些条件很容易随意更改,你可以添加时间过滤器(见上一篇文章)或其他。

可以找到一些设置,在这些设置下,机器人自 2010 年及以前几乎无法被杀死(如果在一些情况下使用平仓)。

仍有大量交易

也许我们应该类比前一篇文章,对参数进行搜索。

 
Maxim Dmitrievsky:

黄色 - 更改条件

结果(从 2020.05 开始培训)

这些条件可以根据需要轻松更改,您还可以添加时间筛选器(参见前一篇文章)或其他筛选器。

您可以找到一些设置,在这些设置下,机器人自 2010 年及以前几乎无法被杀死(如果您在一些情况下使用平仓)。

仍有大量交易

也许我们应该类比前一篇文章,对参数进行搜索。

这样似乎更好。

对我来说,在模型网格上进行训练的意义在于决定在某一特定价位建仓 还是跳过这一信号。为此,当达到平仓点时,模型应将总头寸的平仓评估为盈利。如果有利润,就没有必要建仓。为此,有必要估算平仓时的价格值。

[删除]  
Aleksey Vyazmikin:

这样好多了。

对我来说,网格模型的训练重点在于决定在某一价位建仓 还是跳过这一信号。为此,模型应在达到平仓点时评估总仓位的平仓利润。如果有利润,就没有必要建仓。为此,有必要估算平仓时的价格值。

因此,还不错,但还需要在更长的历史上进行变通。例如,它在强势下跌的危机中不起作用,因为在培训期间没有这样的例子。

 
Maxim Dmitrievsky:

是的,还不错,但还需要在更长的历史中进行变通。例如,它在强势下跌的危机中不起作用,因为在训练过程中没有这样的例子。

如果想在危机中求生存,总收益会比危机之前和之后的时期小得多。这是一个哲学问题,是在危机中损失一部分资金,但赚取的收益是危机前后损失的数倍,还是有机会在危机中不损失资金,但赚取的收益要慢 3-5 倍。

至少需要动态水平,才能在大波动中生存。

[删除]  
Aleksey Vyazmikin:

如果在危机中求生存,总收益会比危机前后少得多。是在危机中损失部分存款,赚取比危机前后损失多几倍的收益,还是有机会不在危机中流失,但赚取的速度慢 3-5 倍,这是一个哲学问题。

至少需要动态水平,才能在大波动中生存。

如果我们把危机和平静的市场相提并论,那么是的,标准筹码很紧张,我们要么需要这个,要么需要那个。或者寻求折中方案。

 
Aleksey Vyazmikin:

这样好多了。

对我来说,网格模型的训练重点在于决定在某一价位建仓 还是跳过这一信号。为此,模型 应在达到平仓点时评估总仓位的平仓利润。如果有利润,就没有必要建仓。为此,有必要估算平仓时的价格值。

我不明白,在这种情况下,这还算不算网格? 如果预测认为不会有利润,那么无论如何都有必要平仓,而不是考虑开仓与否。而在网格中,您无论如何都应该开盘。

因为网格只是为了赢得距离,将收盘点移动到一个更有可能获得相同利润的点上。

好吧,如果你想使用网格,就应该建立一个结果矩阵,并根据 每一次新的价格变动,即新的预测,用贝叶斯法对 其进行修正。

[删除]  
Aleksey Mavrin:

我不明白,在这种情况下,这到底算不算网格? 如果预测结果是没有利润,那么您就应该平仓,而不是考虑开仓与否。而在网格中,您无论如何都应该开仓。

因为网格只是为了赢得距离,将收盘点移动到一个更有可能 的点,并获得相同的利润。

好吧,如果你想使用网格,就应该建立一个结果矩阵,并根据 每一次新的价格变动,即新的预测,用贝叶斯法对 其进行修正。

这就是我们的目标,找到没有网格不可能实现的其他设置。