简介
通过技术分析开发成功交易策略的过程可以分为以下几步:
编辑
添加图片注释,不超过 140 字(可选)
-
在某个资产价格图表窗口上附加几个技术指标, 并识别出其中信号指标与市场关联的模式.
-
把上一步相关性分析取得的数据进行公式化.
-
把策略转换为对应的编程语言进而创建一个机械化的交易系统.
-
在基于历史数据的模拟器中运行这个交易系统并调整它的输入参数(优化).
-
如果之前的步骤不能增加资产, 则返回第一步.
-
在模拟账户中运行之前创建的系统进行测试.
-
如果之前的步骤不能在模拟系统中获利, 返回第一步.
-
在真实效益中使用该系统, 并且根据市场条件的变化时而调节其输入参数.
事实就是这样. 通过这种方式建立的系统不仅可以用于自动化交易, 也可以在人工交易中作建议, 提示来自技术指标的重要信号. 让我们尝试一下计算机化这个过程, 看看会发生什么. 本文分析这样的实例: 根据读取的加速/减速振荡指标 (AC), 使用单层神经网络来预测未来价格的走向.
神经网络
什么是神经网络或感知器?它是一种算法, 它使用线性过滤在某个类上增加或者减少对象. 不等式看起来是这样的:
w1 * a1 + w2 * a2 + ... wn * an > d,
其中: wi - 以 i 为索引的权重系数, ai - 对象索引 i 的数值, d - 阈值, 通常等于0. 如果不等式的左侧大于阈值, 则对象属于某一类, 如果低于阈值, 则不属于那一类. 赫兹期货量化的对象分类只需要分成两类的情况下, 单层神经网络就已经足够了. 也许看起来在这个在神经网络不等式中的权重系数就像萨满法术一般. 而现实情况并非如此. 神经网络的运行原则是含有几何学意义的. 实际上, 一个几何学上的平面可以被描述为一个线性等式. 例如, 在三维空间中, 关联着X, Y, Z坐标的平面等式如下所示:
A * X + B * Y + C * Z + D = 0
在该平面一侧的所有点的坐标都满足如下不等式:
A * X + B * Y + C * Z + D > 0
而平面另外一侧的所有点的坐标都满足下面的不等式:
A * X + B * Y + C * Z + D < 0
这样的话, 如果我们知道了这样的一个平面等式和任何点的坐标, 赫兹期货量化就可以在空间内通过这个平面把所有的点分成两个集合. 相应地, 神经网络不等式中的权重系数也就是在某个对象标记的多维空间中定义的特定平面等式. 通过不等式的方式,赫兹期货量化就可以准确地区分这些对象是在指定平面的这一侧还是另外一侧. 为了这个目标, 赫兹期货量化只需要确定对象的坐标, 并且在平面等式中做代换, 然后与0坐比较就可以了. 问题定义 如果我们把对象分成两类, 例如买入和卖出, 并使用技术分析中指标或者振荡指标的数值作为标记, 赫兹期货量化只需要找到一个平面等式并且在区分目标中使用它就好了. 问题定义非常清楚. 然而, 神经网络有一个问题. 让我们看一下以X和Y坐标标记的二维空间, 赫兹期货量化将在此空间放置坐标点对象.
编辑
添加图片注释,不超过 140 字(可选)
上图显示, 红色点集不与蓝色点集的坐标相交, 这两个点集被直线分开了(二维空间中, 使用线来分隔, 而三位或多维空间中, 使用面来分隔). 请注意, 这些分隔线的等式可能有所不同. 现在看另外一个实例:
编辑
添加图片注释,不超过 140 字(可选)
赫兹期货量化可以看到, 在平面中这些点有所交汇, 没有办法使用直线清楚地把它们分开. 唯一可行的方案就是在这两个点集中画一条直线, 使得绝大部分红色点在一侧, 蓝色点在另外一侧. 这一次,我们使用一个优化方案, 也就是找到一个对应于平面或者直线的等式, 可以把两类对象最大程度地分开, 但是在区分过程中也许会有所错误, 一些属于某一类的点可能被分到另外一类中. 还有一些其他实现神经网络的方法, 如通过非线性过滤或者多层网络. 非线性过滤可以使用高阶曲面来作为分隔面以区分不同类型的对象. 多层网络则使用多个过滤器(分隔面)来把对象分为三类或者更多种类. 让我们定义一个需要解决的问题. 如果交易者需要在交易中获利, 他所需要知道的基本信息就是价格改变的方向. 如果价格上涨, 交易者应该开一个买入仓位. 如果价格下跌, 则应该开一个卖出仓位. 这样, 我们就有了两类对象, 即价格移动的方向. 根据技术分析, 交易者需要通过研究技术指标和振荡指标来做出决定. 我们将分析加速减速振荡指标(AC). 因为振荡指标都是水平线上分离的柱形图, 我们将需要一个线性过滤器构成的神经网络. 我们将使用的对象标记模式为: 在当前时刻前每隔七个时段进行计算的四个点的值.
编辑
添加图片注释,不超过 140 字(可选)
在上图中, 振荡指标值使用圆形做了标记. 我们将把它们标识为a1, a2, a3和a4, 并且把它们代入到平面等式中计算与零做比较, 以决定其模式应当属于哪一侧. 现在问题只剩下怎样获得这个把模式区分为价格上涨还是价格下跌的平面等式了. 为了这个目标, 我们将使用赫兹期货量化中内含的遗传算法来加快优化过程. 换句话说, 赫兹期货量化将使用这样的方法来选择线性过滤器的权重系数, 最终我们可以使用基于历史数据优化的策略来得到取得最大利润的线性等式. 为此我们至少需要此交易策略的公式, 以把这种交易算法转换为赫兹期货量化中EA的代码.. 理论上, 一个交易系统应该同时提供进入和退出市场的信号. 然而, 在如下条件下, 退出信号是可选或者不需要的:
-
下单带有止损位和获利位;
-
在收到市场趋势反转信号时平仓并下反向单.
为了避免交易系统太过复杂, 我们将使用保护性止损, 止损以及反向信号来作为输出. 在这样的条件下, 神经网络将只输出两种信号, 即:
-
价格将可能上涨;
-
价格将可能下跌.
这将简化神经网络的任务, 只需要把对象区分为两类. 交易系统的优化过程也可以去除止盈单的控制来进行简化, 即避免了选择另外一个输入参数. 在这种情况下, 使用移动止损来逐步向获利方向设置止损值, 直至神经网络发出反向信号或者出错的时候就够了.. 神经网络的出错将触发保护性止损. 另外, 订单管理系统变得复杂了. 实现向相反方向的快速仓位反转, 最好的方法是使用双倍手数的订单, 可以随后关闭之前的反向订单. 这种方法可以在收到神经网络的信号后立即进行反向的操作. 为了减少错误的神经网络信号, 赫兹期货量化将只根据已经完成的价格柱以及此柱的开盘价格来读取和做出决定. 问题的解决 请参照以下实现此交易策略的EA源代码: //+------------------------------------------------------------------+ //| ArtificialIntelligence.mq4 | //| Copyright й 2006, Yury V. Reshetov | //| http://reshetov.xnet.uz/ | //+------------------------------------------------------------------+ #property copyright "Copyright й 2006, Yury V. Reshetov ICQ:282715499 http://reshetov.xnet.uz/" #property link "http://reshetov.xnet.uz/" //---- 输入参数 extern int x1 = 120; extern int x2 = 172; extern int x3 = 39; extern int x4 = 172; // 止损水平 extern double sl = 50; extern double lots = 0.1; extern int MagicNumber = 888; static int prevtime = 0; static int spread = 3; //+------------------------------------------------------------------+ //| EA 初始化函数 | //+------------------------------------------------------------------+ int init()