经常有利用移动平均线进行交易的朋友问到这个问题,如何在开仓时将订单的止损设置在均线上方或下方指定的点数。其实这个问题是十分简单的事情,解决它,只要两步骤,一是实时获取指定均线的数值然后加上或减去指定的点数,二是将结果赋值给订单止损。下面详细举例说明。
比如现在指定均线为60SMA,也就是周期为60、类型为SMA的均线。每次开仓将止损设置在60均线上下10个点的位置。当然,这里是要分多单和空单及开仓价格相对均线的位置。
以最简单的价格站稳60均线上方开多单,收盘在60均线下方开空单的策略来说。当价格收盘在60均线上方时开多单,那么止损就设置在60均线下方10个点;同理,当价格收盘在60均线下方时开空单,止损就设置在均线上方10个点。这里要注意多单和空单的止损规则,多单开仓时止损是要在开仓价格下方,空单开仓时止损是要在开仓价格上方,违背这种规则就会导致开仓出错或者止损设置不成功。
首先,我们获取60SMA均线的实时数值,为了便于观察,我们可以同时用注释函数将其注释到图表。代码及图示如下:
double MA_60 = iMA(Symbol(),0, 60, 0, MODE_SMA, PRICE_CLOSE, 0);
Comment(DoubleToStr(MA_60,Digits));
本文说的是EA编程中的问题,如果是手工交易,那就不用这么复杂,直接鼠标停留在60均线最右侧上,会有浮层显示其实时数值,然后再加减个距离去设置订单止损就可以。比如1898.550,上下1美金就是1899.550、1897.550。
获得60SMA均线后,我们再将它加上10个点作为空单止损,减去10个点作为多单止损,直接定义两个变量作为多空单止损就可以。当然,这里说的10个点通常是指基点,从报价倒数第二位说的,实际执行中需要从报价最后一位计算,也就是100个浮点。这里我们定义buysl为多单止损,sellsl为空单止损,代码如下:
double buysl = MA_60 - 100*Point;
double sellsl = MA_60 + 100*Point;
接下来将buysl、sellsl调用到OrderSend函数中就行了。这是一个简单的例子,但是也不能忽视一些细节,就是多空单在初始开仓时的止损设置规则。比如要是在60SMA均线下方某种条件开多单,那开仓时就无法实现将止损放在均线上方10个点。这些规则在开发其它智能交易ea时,都是需要注意到的。