下载此文档

《程序化交易实战》连载8:策略编写陷阱—信号闪烁.doc


文档分类:金融/股票/期货 | 页数:约7页 举报非法文档有奖
1/7
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/7 下载此文档
文档列表 文档介绍
《程序化交易实战》连载8:策略编写陷阱—信号闪烁
信号闪烁
⑴.概念介绍
信号闪烁是指程序发出了不稳定的交易信号。一旦出现这种情况,程序会在极短的时间之内,反复多次进行开平仓操作。换句话说,在策略研发者预期程序不该发出开平仓交易信号的时候,程序“自己”反复发出交易信号。对于交易员来说,这是非常危险的,如果不立即进行应急处理,程序很可能一直进行这种不合理的操作,产生大量的交易手续费成本和滑点成本,造成交易事故。
⑵.原因解析
信号闪烁主要由以下两个原因造成:第一,所使用的判断条件不稳定,即判断条件时而成立时而不成立。第二,虽然判断条件固定,但是开仓和平仓条件出现交集,即某些情况既满足开仓条件也满足平仓条件。这会导致程序先判断开仓条件成立,于是开仓交易;同一个Tick内,又判断平仓条件成立,所以立即把刚开的仓位平掉。接下来推送过来一个新Tick,再次判断开仓条件成立,程序会再次开仓然后平仓。如此反复,直到价格变动到开平仓条件的交集之外时,才会停下来。我们将对这两种情况分别举例说明。
①.案例一
大部分程序化交易模型的信号,都是由引用的价格满足开平仓条件后发出的,常用的引用价格有:开盘价,收盘价,最高价,最低价,均价等。我们用一个简单的例子来展示判断条件不稳定所导致的信号闪烁:根据5日均线和10日均线进行判断,金叉做多,死叉做空。即当5日均线突破10日均线时,做多;当10日均线突破5日均线时,做空。
上面是Q语言关于金叉做多、死叉做空的代码,这里引用的是当前Bar的五日均线ma5[0]和十日均线ma10[0]。但是在当前Bar还没走完的情况下,其最高价High[0]会不停变化,所对应的ma5[0]和ma10[0]也都会变化。这样一来,可能一会出现ma5[0]>ma10[0],一会又出现ma5[0]<ma10[0]的情况。因此,程序可能一会发出做多的交易信号,一会发出做空的交易信号。也就是说,所触发的交易信号不稳定,出现信号闪烁。
这种情况在程序后验的时候,是不会察觉到的,因为大部分的软件进行后验的时候,不是以Tick驱动,而是以Bar驱动。所以在涉及到信号触发那根Bar的时候,High[0] 会被默认为这根Bar的最高价,是一个常数,所以ma5[0]也是一个常数。这样做的好处是减少了后验的运算量,大大节省了后验的时间成本,但这样也会带来后验过程中无法发现信号闪烁问题的弊端。下面这幅图是这个信号闪烁的例子在价格以Tick驱动时产生的结果,我们可以清楚地看到,在同一根Bar中程序反复开平仓。
下面我们来看一下这段代码的修正方法:引用上一根Bar的五日均线ma5[1]和十日均线ma10[1],以及前一根Bar的最高价High[1]。因为它们是已经成为历史的数据,是常数。在这种情况下,一旦出现ma5[1]>ma10[1]或者ma5[1]<ma10[1],信号就会固定下来,不会反复发生改变。
②.案例二
下面我们以Hans123为例,展示一个常见的错误:策略的开仓条件和平仓条件有交集,导致程序连续不断地反复开平仓。
Hans123在开盘后一段时间(HansTime)后,确定高低点。随后价格突破高点做多,跌破低点做空。为了避免隔夜持仓,我们在程序中加入一个新的参数,离场时间ExTime。由于之前对这个策略进行过详细解释,我们在这里省略了中间部

《程序化交易实战》连载8:策略编写陷阱—信号闪烁 来自淘豆网www.taodocs.com转载请标明出处.