[程序化交易实战]连载7:策略编写陷阱

《程序化交易实战》连载7:策略编写陷阱—未来函数

1. 未来函数

⑴.概念介绍

未来函数是指引用未来数据的函数,在策略中的表现形式也就是引用未来时刻的信息作为判断条件,对现在时刻下达开平仓指令。换句话说,函数利用了现在还不知道的信息,产生交易信号。这在历史后验中是完全可以实现的,因为在程序化交易的历史后验中,我们从一开始就拥有所有的历史数据。而且,Bar 驱动策略是基于 Bar 信息开发的策略,如果不加以注意,很容易在编写策略时出错,引用未来的信息。但是在实盘交易中,行情是按时间顺序到达,在“现在”这个时间点上,我们只能拥有这个时间点以前的信息,也就是过去的数据,不可能获取这个时间点之后的信息,即未来的行情。因此,我们必须确保在历史后验中也遵循这一规则,发出的每一个交易信号都是基于该时点以前的信息,而并不包含该时点之后的信息,以避免这种“偷窥未来”的错误。

与偷价格类似,未来函数也一样会为我们带来一条完美的后验曲线和漂亮的后验数据,但是在实盘使用这个策略之后,它会立即现出原形,丧失盈利能力。下面我们分别举几个未来函数的例子,并分析其发生的原因。

⑵.原因解析

与偷价格类似,未来函数的表现形式也有很多,但归根结底,原因只有一个:我们使用了未来才能知道的信息作为现在的判断条件或者开仓条件。这并非是我们根据现在的信息有效地预测了未来,而是通过bar后验的机制,偷看到了未来的信息,并且加以利用。我们也通过几个例子来仔细分析一下未来函数出现的原因。

①.案例一

上面这段代码是Q语言编写的一段开仓条件:如果上一根bar的收盘价高于长期均线,且当前K线收阳,也就是说这根bar的收盘价大于这根bar的开盘价,

则以这根bar的开盘价做多。这就是一个典型的未来函数。问题在于,下单价格是当前K线的开盘价Open[0]。所以“现在”这一时间点就是当前K线开盘的一瞬间,而判断条件中使用了当前K线的收盘价Close[0],也就是“未来”的信息。这相当于我们知道了这根K线收阳之后,通过时光机再回到开盘的那个时间点进行下单,这样当然可以盈利。

上图就是这个策略的后验曲线,股指年化收益率达到500%,而且收益曲线极其平滑,几乎没有回撤。但非常遗憾,这在实盘交易中显然是不可能实现的。因为我们在开盘时是无法知道收盘价是多少的;而等到收盘以后,虽然我们已经知道了收盘价是多少,却再也无法以开盘价成交。

这是用Q语言编写的一个多头止盈的模块,当头寸价格上涨超过0.5%时,一旦从最高点回撤0.8个点即止盈平仓。这段代码中也存在未来函数。在历史后验中,由于使用的是bar驱动的后验机制,在这根bar执行主程序的时候,我们就已经知道Open[0],High[0],Low[0]和Close[0]的最终值。但是在实盘中,只有Open[0]是在这根bar开盘的时候就固定下来的,而High[0],Low[0]和Close[0]在这根bar结束之前,都是不停变动的。只有在bar结束之后,才成为固定的值,并且当新的bar到来之后立即变成High[1],Low[1]和Close[1]。上面这段代码相当于在这根bar还没有结束的时候,就已经使用了这根bar结束之后才能知道的信息作为判断条件,那么下面K线图中所有的平仓点位都接近每根bar的高点也就不足为奇了。

然而,一旦我们实盘使用这个策略,程序会这样运行:在前面几个条件都满足的情况下,在bar内第一次出现比0.8个点更大的回落时,就会触发Close[0]

③.案例三

上面一段代码是在之前讨论偷价格时给出的正确写法,这段代码是否存在未来函数的问题呢?在代码中,虽然在这根bar结束之前使用了仍然会变动的High[0]作为判断条件,但这并不是未来函数。因为在实时行情中,最新的bar会不断运动。当一个新的Tick被推送过来后,最高价High[0]也随之更新,但是High[0]的变化是单方向的,它只可能越来越大。当价格突破上边界UpperBand的一瞬间,条件High[0] >= UpperBand刚好得到满足。而一旦满足,该条件便会固定下来,无论接下来价格如何变化,都不会改变。在此过程中,我们没有引入任何未来的信息。因此,这段代码中不存在任何未来函数。

相反,如果我们以High[0]

④.案例四

在上面的代码中,在判断条件中同时使用了High[0]和Low[0],这也会导致

未来函数的错误。因为在实时行情中,Low[0] = UpperBand条件发生之后,等到这两个条件同时满足的时候,我们设定的开仓价格已经不复存在了。而在Bar后验时,我们并没有考虑到时间的先后。相当于我们在High[0] >= UpperBand的一瞬间已经知道了未来会触发Low[0]

我们再看下面一段代码,它也引入了未来函数,也是错误的。

在High[0] >= UpperBand和Low[0] = UpperBand,然后开多仓。这意味着,在后验中,我们在开空仓条件成立的时候,知道了未来开多仓的条件也会成立,所以没有开仓,并且等到开多仓条件成立的时候开了多仓。这相当于将未来的信息引入了判断条件,造成后验与实盘不一致。

⑶.总结

综上所述,未来函数也是一个非常容易导致策略的历史后验与实盘表现不一致的陷阱。与偷价格相比,未来函数更加隐蔽,更不容易被人察觉,对后验真实度的影响也更大。因为通过在K线上画出辅助线的方法,结合K线上的开平仓信号,大部分偷价格的问题都可以直观地看出来。而未来函数则不同,它的出现是由于策略在设计逻辑上出了问题,因此无法通过观察K线直接判断,而只能通过检查代码的逻辑来识别。这个问题在比较复杂的策略中更加容易出现。所以,当我们在看到很平滑的后验曲线之后,一定要仔细检查未来函数的问题。

我们进行历史后验的目的就是通过策略的后验表现,预测这个策略在实盘使用之后是否具有盈利能力。如果策略中存在未来函数,后验与实盘会出现极大的偏离,我们也就无法把策略后验的表现作为对实盘表现的预测依据,使得后验彻底失去了意义。

《程序化交易实战》连载7:策略编写陷阱—未来函数

1. 未来函数

⑴.概念介绍

未来函数是指引用未来数据的函数,在策略中的表现形式也就是引用未来时刻的信息作为判断条件,对现在时刻下达开平仓指令。换句话说,函数利用了现在还不知道的信息,产生交易信号。这在历史后验中是完全可以实现的,因为在程序化交易的历史后验中,我们从一开始就拥有所有的历史数据。而且,Bar 驱动策略是基于 Bar 信息开发的策略,如果不加以注意,很容易在编写策略时出错,引用未来的信息。但是在实盘交易中,行情是按时间顺序到达,在“现在”这个时间点上,我们只能拥有这个时间点以前的信息,也就是过去的数据,不可能获取这个时间点之后的信息,即未来的行情。因此,我们必须确保在历史后验中也遵循这一规则,发出的每一个交易信号都是基于该时点以前的信息,而并不包含该时点之后的信息,以避免这种“偷窥未来”的错误。

与偷价格类似,未来函数也一样会为我们带来一条完美的后验曲线和漂亮的后验数据,但是在实盘使用这个策略之后,它会立即现出原形,丧失盈利能力。下面我们分别举几个未来函数的例子,并分析其发生的原因。

⑵.原因解析

与偷价格类似,未来函数的表现形式也有很多,但归根结底,原因只有一个:我们使用了未来才能知道的信息作为现在的判断条件或者开仓条件。这并非是我们根据现在的信息有效地预测了未来,而是通过bar后验的机制,偷看到了未来的信息,并且加以利用。我们也通过几个例子来仔细分析一下未来函数出现的原因。

①.案例一

上面这段代码是Q语言编写的一段开仓条件:如果上一根bar的收盘价高于长期均线,且当前K线收阳,也就是说这根bar的收盘价大于这根bar的开盘价,

则以这根bar的开盘价做多。这就是一个典型的未来函数。问题在于,下单价格是当前K线的开盘价Open[0]。所以“现在”这一时间点就是当前K线开盘的一瞬间,而判断条件中使用了当前K线的收盘价Close[0],也就是“未来”的信息。这相当于我们知道了这根K线收阳之后,通过时光机再回到开盘的那个时间点进行下单,这样当然可以盈利。

上图就是这个策略的后验曲线,股指年化收益率达到500%,而且收益曲线极其平滑,几乎没有回撤。但非常遗憾,这在实盘交易中显然是不可能实现的。因为我们在开盘时是无法知道收盘价是多少的;而等到收盘以后,虽然我们已经知道了收盘价是多少,却再也无法以开盘价成交。

这是用Q语言编写的一个多头止盈的模块,当头寸价格上涨超过0.5%时,一旦从最高点回撤0.8个点即止盈平仓。这段代码中也存在未来函数。在历史后验中,由于使用的是bar驱动的后验机制,在这根bar执行主程序的时候,我们就已经知道Open[0],High[0],Low[0]和Close[0]的最终值。但是在实盘中,只有Open[0]是在这根bar开盘的时候就固定下来的,而High[0],Low[0]和Close[0]在这根bar结束之前,都是不停变动的。只有在bar结束之后,才成为固定的值,并且当新的bar到来之后立即变成High[1],Low[1]和Close[1]。上面这段代码相当于在这根bar还没有结束的时候,就已经使用了这根bar结束之后才能知道的信息作为判断条件,那么下面K线图中所有的平仓点位都接近每根bar的高点也就不足为奇了。

然而,一旦我们实盘使用这个策略,程序会这样运行:在前面几个条件都满足的情况下,在bar内第一次出现比0.8个点更大的回落时,就会触发Close[0]

③.案例三

上面一段代码是在之前讨论偷价格时给出的正确写法,这段代码是否存在未来函数的问题呢?在代码中,虽然在这根bar结束之前使用了仍然会变动的High[0]作为判断条件,但这并不是未来函数。因为在实时行情中,最新的bar会不断运动。当一个新的Tick被推送过来后,最高价High[0]也随之更新,但是High[0]的变化是单方向的,它只可能越来越大。当价格突破上边界UpperBand的一瞬间,条件High[0] >= UpperBand刚好得到满足。而一旦满足,该条件便会固定下来,无论接下来价格如何变化,都不会改变。在此过程中,我们没有引入任何未来的信息。因此,这段代码中不存在任何未来函数。

相反,如果我们以High[0]

④.案例四

在上面的代码中,在判断条件中同时使用了High[0]和Low[0],这也会导致

未来函数的错误。因为在实时行情中,Low[0] = UpperBand条件发生之后,等到这两个条件同时满足的时候,我们设定的开仓价格已经不复存在了。而在Bar后验时,我们并没有考虑到时间的先后。相当于我们在High[0] >= UpperBand的一瞬间已经知道了未来会触发Low[0]

我们再看下面一段代码,它也引入了未来函数,也是错误的。

在High[0] >= UpperBand和Low[0] = UpperBand,然后开多仓。这意味着,在后验中,我们在开空仓条件成立的时候,知道了未来开多仓的条件也会成立,所以没有开仓,并且等到开多仓条件成立的时候开了多仓。这相当于将未来的信息引入了判断条件,造成后验与实盘不一致。

⑶.总结

综上所述,未来函数也是一个非常容易导致策略的历史后验与实盘表现不一致的陷阱。与偷价格相比,未来函数更加隐蔽,更不容易被人察觉,对后验真实度的影响也更大。因为通过在K线上画出辅助线的方法,结合K线上的开平仓信号,大部分偷价格的问题都可以直观地看出来。而未来函数则不同,它的出现是由于策略在设计逻辑上出了问题,因此无法通过观察K线直接判断,而只能通过检查代码的逻辑来识别。这个问题在比较复杂的策略中更加容易出现。所以,当我们在看到很平滑的后验曲线之后,一定要仔细检查未来函数的问题。

我们进行历史后验的目的就是通过策略的后验表现,预测这个策略在实盘使用之后是否具有盈利能力。如果策略中存在未来函数,后验与实盘会出现极大的偏离,我们也就无法把策略后验的表现作为对实盘表现的预测依据,使得后验彻底失去了意义。


相关文章

  • 企业内训:应收账款催收和信用管理
  • 企业内训:应收账款催收和信用管理 明阳天下拓展 培训主题:应收账款催收技巧 信用管理体系设计 合同结算风险防范天数:2 天 课程背景 赊销是很多企业维持和拓展销售渠道.增强企业竞争力的必要手段,然而由于订单管理.合同管理.物流管理.信用管理 ...查看


  • 庄家心理操纵术:散户与庄家博弈的实战兵法_前言
  • 股市永远是投机者的乐园.而在庄家暗流操纵的漩涡中,能够生存下来,并有所成就的人却很少,主要是因为他们对庄家的"另一面"不了解.庄家操纵的核心其实是人的心理.面对"涨停板敢死队"在概念股中的行为,相关监 ...查看


  • 股市剑客大学课程目录
  • 股市剑客大学课程目录 一.股市剑客大学办学理念 为了提升全国各地股民的整体素质,让更多的新老股民接受全方位的系统性正规教育,着力打造股民教育第一品牌,精心培育股民投资全新思维,股市剑客先生在呱呱<股市剑客梦工厂专区>特开办< ...查看


  • 量价关系实战分析图解
  • 量价关系实战分析图解 正常的"价涨量增,价跌量缩"同步的情况下,并无必要特别加以注意,应该引起重视的是在"量价背离"的情况下,买卖股票时要特别加以分析. 这里需要纠正一个量价分析中被忽略了的问题.价涨 ...查看


  • 品牌营销策划与管理自学考试大纲
  • 品牌营销策划与管理(4273)自学考试大纲 I. 课程性质与设置目的 品牌营销策划与管理是市场营销专业(独立本科段)的重要专业课.随着科技的进步和世界经济一体化的进展,市场高度成熟,并且越来越呈现出个性化与规模化的特点.营销活动与市场价值都 ...查看


  • 商务合同签订注意事项 专业律师实战经验谈
  • 商务合同签订注意事项 专业律师实战经验谈 接受当事人委托,帮助当事人起草或审查当事人拟与其他单位或个人签署的经济合同(本文仅探讨经济合同,以下称合同),此乃律师常规业务.律师在起草.审查合同时,通常要进行三个方面的准备,一是要审阅当事人提供 ...查看


  • 期货与期权教案
  • 课程介绍 [课程类别]二专 [学分]3 [周学时]3 [考核方法]课堂课后模拟与讨论.期末考试(闭卷) [预修课程]证券投资学.证券投资技术分析 [主要内容]本课程内容主要包括两大部分:第一部分为期货市场知识与价格预测.共分6章.第一章,是 ...查看


  • 审计课程-企业内部审计及内部控制与财务风险管理
  • 如何确保企业经营的效率和效果? 如何确保企业财务报告的可靠性? 如何保证企业始终遵守法律法规? 如何保证企业资产的安全? 如何评估与防范财务风险,保证企业永续经营? 如何通过内部审计发现企业经营异常并及时采取有效措施? -- 为了实现上述目 ...查看


  • 网络购物安全隐患及应对策略
  • 网络购物安全隐患及应对策略 作者:郭雪梅 来源:<企业技术开发·中旬刊>2013年第11期 摘 要:随着互联网的不断发展,网购作为新兴的消费模式正在快速发展,人们一方面享受到网络购物的方便,另一方面也遭受到来自网络诈骗等的威胁. ...查看


热门内容