百色金融新闻网
您的位置:百色金融新闻网 > 理财保险 > 基于遗传编程自动进化开发交易策略2-自动交易

基于遗传编程自动进化开发交易策略2-自动交易

作者:百色金融新闻网

返回目录:理财保险

第二部分

正如我上一篇文章所说,进场和离场规则以决策树形编码。在每一个K线上,这个决策树返回一个布尔值,来作为进场(根节点返回true)或离场(根节点返回false)信号。有的人建议使用一个信号树来作为进场和离场信号,不过我个人更喜欢对进场和离场规则使用各自专用的决策树,因为我认为他们会产生更好的信号。在策略进化过程中,交替激活一个或另一个决策树,并忽略非活动的决策树的信号。这适用于只做多头,或只做空头的交易策略。对于多空都做的策略,这种方案会导致四种不同的决策树被用来进化。这会也明显增加交易策略的自由度(degrees of freedom),因此会增加过拟合的风险。

基于遗传编程自动进化开发交易策略2

类型化的节点 typed nodes

在非常基本的GP实现中,决策树中的节点是未类型化的。这是有问题的,因为在这种情况下,突变和交叉往往会创建无效的决策树。让我们想象一下,一个均线规则需要一个周期参数和一个价格序列用来计算。突变mutation 的简单实现可能会将整数节点换成另一个技术指标。例如,EMA(Close,12)变成EMA(Close,ROC)。突破后的均线节点接收了一个价格序列,和另一个技术指标来作为输入,其结果是没有意义的。类似的问题也会生在交叉 crossover上。

有些人只是试图重复运行这些运算, 直到凭运气找到一个有效的方案。然而这是一种效率极低的办法。更好的替代方法是为每个节点引入类型。通过引入所有节点的输入和输出类型, 我们确保突变和交叉运算只能从一组预定义的方案中进行选择, 从而将无效搜索时间减少到最小。这么做也是有代价的。在GP中,类型化节点的实现,比简单使用未类型化节点要复杂。

基于遗传编程自动进化开发交易策略2

因此,决策树的结构遵循一定的逻辑顺序。

1、 在决策树的上部分upper section,节点通常与根节点具有相同的返回类型,例如,布尔值,或一个买入/卖出/什么也不做 的信号被聚合到根节点上。

2、 在上半部分upper middle section,我会通常会发现节点能够将作为输入的一种类型输出为另一种类型。例如,>,<,>=,<= 或者 上穿/下穿节点,以数值或价格序列作为输入,输出布尔值。

3、 在中下部分 lower middle section,我们会看到技术指标的规则,如,平均线,震荡指标,趋势指标。

4、 在树的下部,树叶节点上,完全是ERCs或价格序列的数据节点。

5、 定义返回节点的类型需要仔细思考。我的印象是许多开发者不了解这个关键点。看下面这个规则

基于遗传编程自动进化开发交易策略2

从数学的角度来看, 这一规则没有错, 而进一步检查就会发现它是完全没有意义的。因为这完全不是同一个东西,左边是两个价格的差价距离,右边是一个价格。我们必须关注两个节点相互比较是否有意义。

给节点指定输入和输出的类型,不仅可以避免比较不匹配的返回类型,阻止没有意义的决策树进化,而且能显著本来就已经很大的搜索空间。

临时随机常数Ercs

正确处理ERCs是另一个问题。许多指标都是靠“开高低收、成交量”和一个或多个参数来计算的。例如移动平均线就一个周期回溯周期参数,这个参数就是一个整数型的临时随机常数ERC。我们知道,移动平均线的周期参数必须是正数,所以非正数是无效的。大多数情况下,我们还可以定义数据的最大值,譬如日线交易频率的策略,我们设定500天的最大值——因为取更大的值是意义不大。在为 Erc 设置有意义的最小和最大值时, 我们进一步限制了搜索空间。对于浮点数, 我们甚至只能允许来自预设的序列, 例如

 [0.20, 0.21, 0.22, ..., 10.00]

进场、出场信号之外的东西

更先进的交易策略可能不仅包括多头/空头交易的入场、退出信号的决策树, 还包括仓位大小或止损止盈的决策树。这是一个多头仓位的止损规则的示例, 如果价格下跌超过入场价格的 3%, 则会触发该规则:

current price <= ((1.0 - 0.03) * entry price)

3% 的值当然可以使用浮点数的 Erc 进行进化。常见的止损技术包括在固定点数/金额、百分比止损或平均真实范围 (ATR) 止损。同样或类似的技术可以用来获取利润规则。

技术指标

选择哪种技术指标规则在很大程度上是一个个人喜好问题。我的假设是, 最常见的指标也是最好的指标。普通均线,MACD,随机指标,A/D,Chaikin震荡指标,DMI等待。

现在的问题如何对这些技术指标进行编码,过程是这样的:

1、 为要使用的技术指标创建一个专用节点。例如, 尽管 MACD 事实上由两个移动平均线构成,但我们仍创建一个专用的 MACD 节点。原因很简单。GP进化出一个强大而复杂的计算技术指标的机率非常小。如果从一开始你将立即MACD节点作为一个可能候选节点,进化过程只会寻找它的可能变体。当然, 没有什么能阻止您另外创建专用的 (简单的、指数化的、加权的等) 移动平均节点类型。

2、 接下来, 确定节点的输出类型。对于 MACD 类型, 您可能对快线上穿或下穿慢线感兴趣。因此, MACD 节点可以返回一个布尔值, 标识快线当前是否高于慢线。或者, 您可以考虑返回枚举常数, 标识快线是否刚刚上穿、下穿或根本没有 (例如向上、向下、无)慢线。

3、 确定节点的输入。一个专用的 MACD 节点肯定需要i)一个开盘价或收盘价ii)快线的周期参数iii)慢线的周期参数。也许您还想添加一个额外的输入节点, 以决定在 MACD 节点的内部应使用哪种移动平均线类型 (例如简单与指数)。

(未完待续...)

基于遗传编程自动进化开发交易策略2

相关阅读

  • 炒外汇如何快速入门?-如何炒汇

  • 百色金融新闻网财经要闻
  • 如何炒汇,第二步:学习技术指标目前国际市场上流行的说法是技术指标不起作用,但也有很大一部分人士认为,技术指标对分析外汇走势很有帮助。
关键词不能为空

经济新闻_金融新闻_财经要闻_理财投资_理财保险_百色金融新闻网