函数执行速度问题处理 (文华财经WH8赢智V8.2)

投资者咨询:函数执行速度问题处理 (文华财经WH8赢智V8.2)
来源:文华财经  日期:2018-5-4 14:30
 我使用T_BuyPosition 判断持仓,在平仓时用T_OpenOrder==0判断平仓结束
但由于两个函数执行速度不同,实际平仓已成交,但T_BuyPosition判断还有持仓,而T_OpenOrder==0已成立,搞到进入错误

我应该要如何处理这种情况?


技术人员回复
日期:2018-5-4 14:40
两个函数执行速度一致的,但是您判断的方法不对

T_BuyPosition判断当前多头持仓手数

T_OpenOrder判断的是未成交委托数量,但是如果有持仓撤单的情况下,这个函数返回值还是0的


您具体想要实现什么思路呢,可以详细描述下,我们帮您分析下
投资者咨询:函数执行速度问题处理 (文华财经WH8赢智V8.2)
来源:文华财经  日期:2018-5-4 14:30
 IF(DD>0 && QSDD!=1 && HCDD!=1 && LOCK_D!=1 && T_OpenOrder(Code_name,2)==0) 
 //短线多单进行平仓处理,无锁多仓及趋势多单,无回撤单,无挂卖平单

以上是入口条件

我思路是有短线多单持仓DD>0(使用T_BuyPosition),进入处理,原来没用T_OpenOrder函数,就会碰到其它程序在平多单时,又进这个程序处理
所以我加入T_OpenOrde,想法是在保证平多时,就算还没成交的时间里,DD>0有效,但T_OpenOrde无效,我认为当T_OpenOrde==0有效时,
DD也应该==0,

但实际程序执行T_OpenOrde函数太快,它先有效而T_OpenOrder还没有变动的情况下就进入短线多单入口了


投资者咨询:函数执行速度问题处理 (文华财经WH8赢智V8.2)
来源:文华财经  日期:2018-5-4 14:30
 我为何使用T_OpenOrder,因为我希望撤单要进来,已平仓成功就不要进来,现在是平仓成交了进来,不是我要的效果
技术人员回复
日期:2018-5-4 15:40
非正在查询持仓状态时,加个判断就可以了,请参考:

CheckPosition() == 0
投资者咨询:函数执行速度问题处理 (文华财经WH8赢智V8.2)
来源:文华财经  日期:2018-5-4 14:30
 这个函数我看了一下,还有些不明白:

请问这个函数是解决不同函数时延问题吗?也就是每个函数稳定了之后其值才用吗?

如我的应用:

 IF(DD>0 && QSDD!=1 && HCDD!=1 && LOCK_D!=1 && T_OpenOrder(Code_name,2)==0) 

改为: IF(DD>0 && QSDD!=1 && HCDD!=1 && LOCK_D!=1 && T_OpenOrder(Code_name,2)==0 &&  CheckPosition() == 0

就可以?


投资者咨询:函数执行速度问题处理 (文华财经WH8赢智V8.2)
来源:文华财经  日期:2018-5-4 14:30
 我后来又检查了我的程序,两个函数间相差了有近1000行语句,我认为是函数执行时延造成,

这种情况用CheckPosition()可以解决?

谢谢


投资者咨询:函数执行速度问题处理 (文华财经WH8赢智V8.2)
来源:文华财经  日期:2018-5-4 14:30
 还有对这个函数要解决的问题是什么?我在函数说明中实在看不明白,
我程序中像这种类似情况几百处,每处都要加这个函数?
投资者咨询:函数执行速度问题处理 (文华财经WH8赢智V8.2)
来源:文华财经  日期:2018-5-4 14:30
 还研究不出来?
技术人员回复
日期:2018-5-7 10:01
 IF(DD>0 && QSDD!=1 && HCDD!=1 && LOCK_D!=1 && T_OpenOrder(Code_name,2)==0 &&  CheckPosition() == 0) 

这种写法就可以的


如果需要添加的语句过多,可以在这些语句的外层添加一句IF(CheckPosition() == 0),把这些语句都包括进去


PS:

CheckPosition() == 0 是为了解决委托状态和持仓变化返回值不同步的问题

组件在一次执行过程中,委托状态和持仓取值,是不变化的

所以两个函数间相隔多少行,与持仓取值是无关的