如何实现平仓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 进行 有偿 编写!(不贵!点击查看价格!)
相关文章
-
没有相关内容