您现在的位置:程序化交易>> 期货公式>> 交易开拓者(TB)>> 开拓者知识>>正文内容

程序化的一些常见问题 [开拓者 TB]

  • 咨询内容: 1. 开仓或平仓信号闪烁
    历史回测很好,实盘时开平仓信号时有时无。这是很多新手刚写的完程序实盘时的常见问题。一般都是因为调用了未来函数,比如收盘价。当根K线的行情还没有走完时,收盘价是个未来值,如果调用就会发生信号闪烁状况。
    程序里一定不能调用收盘价做判断指标,也尽量少用最高价或最低价。当根K线能确定的只有开盘价。所以一般写代码时,都是用的上一根K线的数据。
    例:CountIf(h[1]-Max(c[1],o[1])>c[1]*0.001 and c[1]<o[1]*1.001,3)==0;
    前三根K线没有出现实体较小的长上影。


    2. 偷价
    历史回测时,利润率和盈亏比高的自己都被吓死。实盘时发现很多看起来赚钱的单子实际都是亏损的。这种情况就是在开盘价和收盘价上做文章。比如开多单时用的是最低价,平多单时用的是最高价。这是卖策略的人经常玩的把戏。呵呵。
    自用策略时,请参照以下代码:
    开多:Buy(0,max(o,h[1]));
    平多:Sell(0,min(o,l[1]));
    开空:SellShort(0,min(o,l[1]));
    平空:BuyToCover(0,max(o,h[1]));
    这样写后,程序就不会有偷价行为,且自带滑点。前一根阳线不是光头阳线或光脚阴线时,就算没有加滑点也能保证成交。

    做好这两点后,相信很多刚写策略的人再回头看看自己之前写的,肯定是惨不忍睹了吧。


    3. 过渡优化、拟合
    很多专门卖的策略,回测结果非常好看:胜率、盈亏比都很高。这种情况就是专门针对历史行情进行拟合。比如策略在某一个大涨行情里实际没有开出单,但写策略的人根据大涨前的行情专门写一段代码让他补出单来,并添加时间限制,只在这一特定时间开出这么个多单来。
    很多策略好看不要用有很大原因就是添加了太多的拟合代码,在历史回测中避免了大亏,抓住了大赚行情。


    4. 过滤条件太多
    策略为了避免亏损,认为添加了很多过滤条件,从而使策略在回测时的结果看起来很好。实际这些过滤条件对未来实盘的行情一点作用都没有,该亏损还是照亏不误。
    其实这也是一种拟合。


    我个人并不反对拟合。写策略本身就是一个不断拟合的过程,但如果刻意拟合就是欺骗了。拟合是要寻找规律,从杂乱无章的行情中找到合适的算法。让这种算法去抓住大部分类似的赚钱行情,过滤掉大部分类似的亏损行情。没有核心算法的拟合就是刻意拟合,对自己或对别人的欺骗。
    比如添加了一个过滤算法,历史回测时;过滤了10单满足条件的单子。这10单中,有7单以上是亏损的,赚钱的三单也赚的不多。策略总体盈亏比和胜率都有提高。那么这个过滤算法就是有效的,或者说这个拟合有效。


    5. 回测数据不可靠
    商品的主力合约和非主力合约的差别是很大的。
    非主力合约成交稀少,价格波动变化小,行情简单易控,不需要太复杂的算法就可以把这些行情全部抓牢。比如波动指标和趋势指标在非主力合约上的信号非常明确。
    主力合约成交量大,价格波动大,行情变幻莫测。常规的波动指标和趋势指标会乱走,很难通过简单的代码去实现盈利。
    另外商品的指数跟主力合约的差异也是很大的,除了股指指数跟股指主力有高相关性,商品指数跟商品大多是不相关的,这里涉及到跨期套利的影响。很多时候近月在涨,而远月在跌,这种指数怎么能可靠。
    所以那些商品回测几年的策略,打死我也不相信的。国内的商品主力合约一般有效期顶多4个月。如果自己写策略,请参照主力合约。非主力合约的测试结果请无视。


    小结:
    一般而言,胜率低的策略实盘时胜率只会更低。简单的策略只会让亏损变得简单。没有核心算法的策略都不能说是成功的策略。没有大量有效数据作为测试依据的策略都是不可靠的。

     

  • TB技术人员: 极有价值。谢谢分享,我收藏了。

 

有思路,想编写各种指标公式,程序化交易模型,选股公式,预警公式的朋友

可联系技术人员 QQ: 511411198  点击这里给我发消息进行 有偿 编写!不贵!点击查看价格!


【字体: 】【打印文章】【查看评论

相关文章

    没有相关内容