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

如何实现平仓Bar上即使满足开仓条件也不再开仓? [开拓者 TB]

  • 咨询内容: 本帖最后由 ll407489244 于 2013-8-1 07:23 编辑

    假如我的程序在K1这根Bar上达到了平仓条件,已经平仓了,但是平仓后满足开仓条件,我不希望平仓后的Bar再去开仓,如何实现?

    开仓的时候,我会通过 if (0==MarketPosition) 来限制没有仓位的时候才开仓,在K1上如果平仓了也满足这个条件,但是我想再加个条件,就是K1上不能再开仓了,

    我所知道的是:
    有个函数叫做,BarsSinceExit,根据解释来看,只有当MarketPosition = 0时,即没有持仓的状况下,该函数才有意义,否则返回0。在平仓Bar上为0。
    如果我的条件改为:
    if (0==MarketPosition && 0!=BarsSinceExit)
    没有仓位且不在平仓Bar上开仓,看起来是对的,但问题是,公式刚加载进来的时候,从左到右运行,最开始的时候,确实没有仓位,但也从未有过开平仓操作,此时,BarsSinceExit的返回值是什么?我通过这个 0!=BarsSinceExit 的判断,实践中,我发现一直没有开仓信号。。。

    请问,我该怎么实现这个功能,还有其他的函数或者方法实现吗。
    只有模拟测试的时候才有这个问题,因为,我是先写开仓条件、执行开仓、平仓条件、执行平仓,历史测试时,平仓后不在K1上运行了就肯定不会再去判断是否满足开仓条件了。
    我在历史测试的时候,会去掉 0!=BarsSinceExit 的判断,但是我得为模拟测试写另一套代码,我的这种做法是对的吧?

     

  • TB技术人员: 为什么你要反过来写呢,很奇怪。TB执行逻辑判断不是从左到右来运行的吗?正确的写法不是应该是if (MarketPosition==0)这样的?反过来写难道执行的速度会更快吗?对结果有没有影响?我想管理员有必要科普一下哦。回到主题,如果你想平仓信号出现后,就算开仓满足,也不开仓了,可以有很多方法,比如:if(开仓 && 平仓==false) 开仓;if(平仓) 平仓;,又或者是if(平仓){ 平仓;}else if(开仓){开仓;}。

     

  • TB客服: 写c++代码写习惯了,这样子写,不容易出错,没有其他影响。
    MarketPosition==0容易写成MarketPosition=0,在if的条件表达式里写成后者了,每次必定是false。
    而0==MarketPosition写成0=MarketPosition,就会报错。

    您的第一种写法,我基本上也就是这么写的,我在 if (0==MarketPosition && 0!=BarsSinceExit) 这个if里面嵌套了if判断是否达到开仓条件,问题就是 0!=BarsSinceExit ,没有满足我的需求,无法屏蔽当前Bar上平仓的情况。
    第二种写法不满足我的需求,因为我想在某一跟Bar上开仓后还可以平仓,写成要么开仓要么平仓的话,会造成模拟测试时在同一根Bar上开仓后无法平仓。

 

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

可联系技术人员 QQ: 1145508240  有需要帮忙请点击这里留言!!!进行 有偿 编写!不贵!点击查看价格!


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

相关文章

    没有相关内容