首页 系统交易 帖子

基于k近邻的分类器 - MetaTrader 4的交易专家

附件
8645.zip (2.46 KB, 下载 2次)

大家好!今天我要和大家聊聊一个有趣的主题:基于 k近邻算法的分类器。这种方法虽然没有达到我预期的效果,但我相信通过讨论,我们或许能找到改进的方向。

首先,欧几里得距离函数是我们分类器的核心。它通过已有的向量基础来描述交易或市场情况,判断输入向量是否属于某个类别。在我们的例子中,如果交易以正收益结束,则归为类别1;若为负收益,则归为类别0。接着,我们使用欧几里得距离来寻找多维向量的最近邻,计算属于类别1的 k 个向量的数量,并根据这个值与邻居总数(即 k)的比值,来得出该向量属于类别1的概率。

不过,由于选择的向量坐标可能不佳,分类结果的可信度并不高,尤其是在概率接近0.5时。因此,我们设定一个阈值,例如当未来交易盈利的概率高于0.7时,才考虑进场交易。我们认为移动平均的比例可以作为向量的坐标,假设这些比例是静态的,经过一次分类后,可以在后续测试中继续使用。不过,事情并没有那么简单。为什么要选择 k近邻算法呢?因为第一个最近邻可能会受到随机值异常波动的影响,而忽略了附近存在的相反向量群。

分类器存在两个主要问题:

  • 1) 如何找到静态的数据来准确描述市场情况或未来交易,以达到所需的分类精度。
  • 2) 数学运算量大,计算时间较长(实际上略低于 PNN)。

简单来说,这些问题与传统的交易系统几乎相同。但分类器的优势在于它可以形式化那些交易者无法直接看到的条件,尽管交易者可能会直观地感受到某些指标值对交易决策的影响。

接下来,我们来谈谈具体的实现方式。

  • Base - true 表示写入向量基础文件, false 表示进行分类交易。
  • buy_threshold=0.6:所有 买入 头寸的阈值。
  • sell_threshold=0.6:同样适用于 卖出
  • inverse_position_open?=true:这个选项很有趣。如果盈利交易的概率很小,为什么不考虑反向入场呢?这个标志开启了这样的可能。
  • invers_buy_threshold=0.3:当盈利的 买入 头寸概率小于此值时,开启卖出交易。
  • invers_sell_threshold=0.3:同样。
  • fast=12:MACD的参数。
  • slow=34。
  • tp=40:止盈。
  • sl=30:止损。
  • close_orders=false:仅在盈利时启用反向信号平仓。

使用方法:首先,将 Base 设置为 true,将 sltp 设置为相同的值,然后在历史数据上运行(仅一次!),此时将生成向量文件。之后,将 Base 设置为 false,并建议优化阈值,根据第一次报告(未分类)选择。如果成功概率为0.5,则阈值设置为0.6和0.4(用于反向入场)。

再强调一下,这只是一个例子,分类器同样可以应用于其他交易系统和不同的输入数据。

分类之前:

分类之后,经过阈值优化:

相关帖子

评论 (0)