量化交易软件:实战的策略实用自动交易技术

该 EA 也适用在赫兹量化软件,原因与上一个 EA 相同,因为它更容易看到盈利因子的改善:

添加图片注释,不超过 140 字(可选)

该智能交易系统里的信号是依次生成的。 买入之后是卖出,卖出之后则是买入。 这样做是为了演示该机制的实质。 在第二个测试中,我们采用固定手数,而在第一个测试中采用的是混合手数变化。 从其可见,只有原信号的余额波动最小的情况下,该系统才能改善盈利因子。 该系统将无法承受大浪。

均摊原理

均摊原理是一种相当有趣的算法。 尽管它像网格和金字塔一样无利可图,但它具有一项非常有趣的功能,可以帮助进行波浪交易。 如果已知走势将持续到某个水平,然后必然要回滚一定的点数,则在这种情况下可以使用马丁格尔均摊。 该技术在马丁格尔中特别有效,因为它可令您减少所需的回滚,同时保持盈利因子大于 1.0。

添加图片注释,不超过 140 字(可选)

该原理利用这样的假设:如果价格未如愿朝着我们的持仓方向移动,那么一段时间后,价格无疑会回滚一部分。 这虽非总会发生,但事实上还是有可能,尽管您能够在研究多个品种的波浪性质之后对该算法进行微调。 为了基于这种回调产生盈利,赫兹量化软件需要凭经验对其进行预测或预判。

这也适用于强级别操作,因为当级别被突破后,市场经常会尝试对其进行回踩测试。 如果我们猜对了第一次交易的方向,并且利润达到了期望值,那么我们应平仓,并在看起来更具吸引力的方向上开一笔新仓。 如果价格去往错误方向,则可以通过某些步骤尝试加仓。 在加仓时,我们应当非常小心 - 应该根据预期的回滚,精确完成。 以下是两种可能的示例。

一系列买入订单的示例:

添加图片注释,不超过 140 字(可选)

一系列卖出订单的示例:

添加图片注释,不超过 140 字(可选)

现在,我将展示如何计算所有订单的盈亏,以及如何根据现有情况,基于所需的回滚来计算下一笔订单的手数。 为了扇骨形持仓的平仓,有必要知道为什么要构建扇骨形,以及哪种条件会令它有用。 我将使用盈利因子。 如果扇骨形为正,则其盈利因子也为正。 若是所有订单的总盈利刚刚变为正数,就把扇骨形平仓是不明智的,因为服务器上的任何价格波动或滑点都可能令盈利向负方向偏移 - 在这种情况下,这种扇骨形似乎毫无用处。 此外,周期的盈利因子为激进的均摊提供了额外调整机会,这一条可在优化自动策略或手动搜索设置时用到。

假设系列中的最大订单数有限制。 然后,假设我们正处于某种未知状态下,此处我们已经开立了 k 笔订单 - 像任何集合或数组一样,它们的索引从 0 开始。 因此,该系列中最后一笔订单的索引为 “k-1”。 当我们开立下一笔订单时,其索引将为 k,订单编号为 “k+1”。 我们将这些思想情况转化为问题的输入数据:

  • { MaxOrders } - 系列中允许的最大订单数

  • { k = 0 ... 1 ... 2 ... (MaxOrders-1) } - 系列中下一笔订单的索引,如果我们未能从之前的方式法获利,其为我们打算开立的订单

  • { ProfitFactorMax } - 允许平仓的盈利因子

  • { i = 1 ... 1 ... 2 ... k } - 已经存在的扇骨形订单,和我们要开立的下一笔订单的索引

  • { S[i-1] } - 从上一笔订单到当前订单的点数距离

  • { X[i-1] } - 从系列的零号订单到当前的点数距离

  • { D[k] } - 相对于系列最后一笔订单的开单价,预测所需方向上的回滚

另外,可以说,当我们引用特定订单时,MQL4 和 MQL5 语言会提供以下数据,包含我们计算选项所需的所有数据:

  • { P[i] } - 在不排除佣金和隔夜利息的情况下,特定订单的利润

  • { С[i] } - 选定订单的佣金

  • { S[i] } - 所计算订单每天零点时的滚动隔夜利息

  • { L[i] } - 订单交易量

  • { Sp[i] } - 开买单时的点差/卖单的当前点差

  • { TickSize } - 假设持仓量等于 1 手,并且价格朝期望的方向移动了 1 个点,持仓增加的利润

所有这些数值并非都可在自动交易中实际使用,但它们可以高亮示意计算这些数值的所有可能选项。 上图示意其中一些相关的数值,这些数值可以相对于价格进行描述。 赫兹量化软件从代码中使用的最简单计算方法开始:

如果第一笔订单以正值结果平仓,则无需任何操作。 在我们认为适当的任何时候,我们都可顺着所需方向开新单。 如果价格没有达到目标,就已朝反方向移动,那么我们必须决定价格向亏损方向移动多少点就必须开新单(S[k-one])。 如果价格已达到此水平,那么我们必须决定哪种回滚是合适的 (D [k])。 在那之后,我们必须依据计划的回滚,来判断将要开单的手数;我们得到所需的所有订单的盈利因子大于我们选择的价值 (ProfitFactorMax)。 为此,我们首先需要计算当前持仓将产生哪些利润,以及会产生哪些亏损,最后是它们的合计值。 在编写相应的公式之后,我将在后面解释其目的:

首先,我们引入每笔指定订单的未来利润值。 它等于当前利润加上订单即将盈利的增量,前提是所需的回滚将会发生:

  • { j = 0 ... 1 ... 2 ... k-1 }

  • { PF[j] = P[j] + С[j] + S[j] + (D[k] * L[j] * TickSize) } - 当所需回滚发生时,指定订单的利润将等于该值

  • { PF[k] = { ( D[k] - Spread[k] ) * L[k] * TickSize } - 无法计算此值,因为它包含我们要开仓所需的手数;但是稍后需要用到此表达式

在第一种情况下,P[i] 值是已知的,我们可以利用语言的内置函数来获取它,也可以自行计算。 该计算方法将在本文的末尾附带显示,因为所有内容都可以在标准语言里找到。 出于我们要在系列中开立最后一笔订单,它也需要佣金和隔夜利息,但是这些值只能从以前开立订单中获得。 进而,由于无法断定持仓会否在零点之前移仓,因此无法确定隔夜利息数值。 始终会有不精确的数值。 可以仅选择那些拥有正值隔夜利息的货币对

之后,我们能够利用此预测利润来划分可盈利和亏损的订单,并计算盈利因子:

  • { i = 0 ... 1 ... 2 ... k } - 已开单的索引

  • { Pr[i] >= 0, Ls[i] >= 0 } - 引入 2 个数组,根据品种接受订单盈亏(“+” 将用于获利,这是计算盈利因子所必需的)

  • { PF [i] < 0 ? Pr[i] = 0 & Ls[i] = - PF[i] } - 如果订单利润为负,则将其利润写为 “0”,而利润值应用一个负号写入亏损变量

  • { PF [i] > 0 ? Ls[i] = 0 & Pr[i] = PF[i] } - 如果订单获利为正,只需将其写入相应的数组,并在亏损数组中设置零值

数组填充完毕之后,我们可以编写一个公式来计算总盈亏,及其最终结果。

  • { SummProfit = Summ[0,k]( PF[i] ) } - 所有获利订单的总利润模块

  • { SummLoss = Summ[0,k]( Ls [i] ) } - 所有亏损订单的总亏损模块

现在我们需要编写循环平仓条件:

  • { SummLoss > 0 ? SummProfit/SummLoss = ProfitFactorMax }

为了进一步使用该方程式,您需要了解,当扇骨形持仓平仓时,系列中最后一笔订单的利润始终为正。 有基于此,您可以编写:

  • { SummProfit = Summ[0,k-1]( PF[j] ) + PF[k] }

将此值代入方程式,并得到以下结果:

  • { ( Summ[0,k-1]( PF[j] ) + PF[k] ) / SummLoss = ProfitFactorMax }

现在,通过求解 PF[k] 等式,我们得到:

  • { PF[k] = ProfitFactorMax * SummLoss - Summ[0,k-1]( PF[j] ) }

考虑到我们已经有一个 PF[k] 值的公式,我们可在此替换该表达式,并得到:

  • { ( D[k] - Spread[k] ) * L[k] * TickSize = ProfitFactorMax * SummLoss - Summ[0,k-1]( PF[j] ) }

现在我们可以相对于 L[k] 求解方程式。 因此,我们最终将获得计算所需开仓量的公式:

  • { L[k] = ( ProfitFactorMax * SummLoss - Summ[0,k-1]( PF[j] ) ) / ( ( D[k] - Spread[k] ) * TickSize ) }

这些就是全部了。 现在我们来研究如何在不使用内置函数的情况下计算 P[i] 值。

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值