简介
如今已经开发的大量指标和震荡指标,不可避免的产生了从其中选择最有效指标的问题。通常,新手交易者在面临大量的可用分析和预测工具时,首先在历史数据和模拟账户上进行测试。之后,对这个或那个指标在某种情况下的有效性和无用性得出一套结论。
但是,这种评估并非总是客观的,因为参数数量很多(交易品种、图表周期、波动性等),因此分析的信息量也很大。对某些指标和震荡指标的更可靠的结论,可以在对其进行对比分析后得出。
实际上,如果不能将它们结合价格图表同时考虑,不可能进行指标和震荡指标的对比分析。但是,即使添加十个不同的指标到图表,也会令其严重过载。得到的图形变得混乱,不适合分析。本文描述的 Expert Advisor 可以解决这个问题,更加方便的进行对比分析。
Expert Advisor
请注意,该 EA 并非用于实时交易,因此不包含资金管理程序块。交易块的执行非常简单。Expert Advisor 的主要任务是提供信号出现与否的信息,该信号来自跟价格图表有关的不同指标。
程序分析了以下指标和震荡指标:
- 加速/减速指标 - AC
- 累积/派发指标 - A/D
- 鳄鱼指标 & 分形指标
- 加多摆动指标
- 平均方向性运动指标 - ADX
- 平均真实波动范围指标 - ATR
- 动量震荡指标
- 熊力震荡指标
- 保力加通道技术指标
- 牛力振荡指标
- 顺势指标
- DeMarker 指标
- 包络线指标
- 强力指数指标
- 一目平衡表指标 (1)
- 一目平衡表指标 (2)
- 一目平衡表指标 (3)
- 资金流量指数指标 - MFI
- 移动平均线指标
- MACD (1)
- MACD (2)
- 振荡指标的移动平均线 (Гистограмма MACD) (1)
- 振荡指标的移动平均线 (Гистограмма MACD) (2)
- 抛物线转向指标
- RSI 指标
- RVI 指标
- 标准离差指标
- 随机震荡指标 (1)
- 随机震荡指标 (2)
- 威廉指标
为了实现该任务,在图表上绘制了一个包含“-1”、“0”和“1”的数字矩阵。每个矩阵行属于某个指标或震荡指标。矩阵列在每个时刻形成(根据选定的图表周期)。矩阵行中出现“-1”表示某个指标产生卖出信号,出现“1”表示买入信号,“0”表示没有任何信号。图 1 展示了程序运行结果。
图 2 展示了基于矩阵的 RVI 指标运行分析。在第 26 行中(包含关于该指标的数据),当主线移动到信号线之上时记录“1”(指标建议买入),当信号线移动到主线之上时记录“-1”(卖出信号)。根据指标的特征,该行不包含“0”。
根据指标和震荡指标的特征,我们可以在矩阵中发现两种类型的指标:持续显著的指标,其相应的标记(在矩阵中的值)从来不等于零,和逐点显著的指标,可以接受零并且在一些特定的时间点发出信号(例如,抛物线转向指标)。请见图 3。
建议分析获得的信息,然后根据以下方式形成指标组。首先选择具有趋势的图表。然后指定可能交易的周期。在选定的趋势或趋势形成处,其开始可以是横盘阶段,周期结束时是交易仍然获利的最后时点。这样,未将先行和延迟指标信号纳入考虑。图 4 中用绿色线指示这种周期。然后分析该周期内的指标(震荡指标)的信息。正确显示趋势的指标保留,其他则筛选掉。然后可以在其他时间间隔上通过类比分析对指标组进行扩充或限制,形成最终的指标组。
程序提供了对形成的指标组的测试。为此,在策略处理程序块相应代码行中列举条件(指标显示),然后据此做出最终的卖(或买)决策。
对价格行为和每个指标(震荡指标)产生的信号进行综合分析,提供了选择其中最有效指标的可能性,从而形成进一步的指标组。
算法
在第一阶段,为每个指标(震荡指标)定义“标记”的值(-1、0 或 1)。假设某指标(例如,MACD)产生不同方式的信号(收敛与发散、交叉零线等),程序代码包含了对其定义原则的描述。例如,威廉震荡指标的分析如下:
//30. Williams Percent Range //Buy: crossing -80 upwards //Sell: crossing -20 downwards if (iWPR(NULL,piwpr,piwprbar,1)<-80&&iWPR(NULL,piwpr,piwprbar,0)>=-80) {f30=1;} if (iWPR(NULL,piwpr,piwprbar,1)>-20&&iWPR(NULL,piwpr,piwprbar,0)<=-20) {f30=-1;}
之后,‘文本’类型的独特对象从获得的标记数字值形成(以免在当前时间值下对象名称重复)并显示:
timeident=TimeCurrent(); //Time to form the unique object name for (i=0;i<=29;i++) //Loop for displaying values //Forming unique object names {ident=DoubleToStr(30-i,0)+" "+DoubleToStr(timeident,0); //Creating objects, indicating their location ObjectCreate(ident,OBJ_TEXT,0,timeident,WindowPriceMin()+Point*5*(i+1)); info=DoubleToStr(f[30-i],0); //Forming a text line to be displayed ObjectSetText(ident,info,6,"Arial", Black);} //Describing the format of displaying and displaying
为了检查形成的指标组,程序包含了“处理策略的程序块和放置主标记”。该程序块包含 EA 必须买入(如果主标记等于 1)和卖出(如果主标记等于 -1)的条件。如果未满足描述的条件,主标记继续为零,不执行交易。EA 还包含平仓的程序块(有注释)。
if(f8==1&&f21==1) //Set of conditions, providing which Buy is executed flag=1; if(f8==-1&&f21==-1) //Set of conditions, providing which Sell is executed flag=-1;
每个指标(震荡指标)的参数都以变量的形式描述,可以令其自动优化(初始参数是那些普遍接受的参数)。
总结
如上所述,提供的 Expert Advisor 并非一个现成的自动交易系统。其主要任务是进行指标和震荡指标的对比分析,以形成指标组。该 EA 展示指标产生的信号而不会让交易者的电脑过载,令分析极为方便。
EA 的灵活性如下:矩阵中可以加入一组新指标,形成的指标组可以在历史数据上进行测试。