以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  金字塔软件问题提交  (http://weistock.com/bbs/list.asp?boardid=2)
----  求助:取持仓时间差问题  (http://weistock.com/bbs/dispbbs.asp?boardid=2&id=9176)

--  作者:wsanle
--  发布时间:2011/11/29 14:18:30
--  求助:取持仓时间差问题

我将程序移植到后台运行模式时,有一段通过读取持仓来判断是否有仓位,决定后续赋值和操作的实例,但在通过函数读取账户仓位时,中间有时间差,所以在这个时间差中,金字塔系统默认账户未返回数据时,函数返回值为0,如果账户返回数据确是没有仓位返回值也是0,在这时间差中(可能是1秒),我如何区分是仓位确是为0,还是有仓位(如10手)只是在账户返回持仓10手信息的瞬间,返回值也为0?请老师帮助解惑,谢谢!    

Myholding:=THOLDING();                                                     //当前持仓           
Lasthold:=EXTGBDATA(‘Lastholding\');                                       //储存在全局变量中的持仓
If Myholding<>Lasthold  Then
EXTGBDATASET(\'Lastholding\',Myholding);                                 //更新实际持仓

If EXTGBDATA(\'Lastholding\')=0 Then EXTGBDATASET(\'NumEnter\',0);

If EXTGBDATA(\'Lastholding\')<>0 Then EXTGBDATASET(\'NumEnter\',1);

以上实例由于Myholding:=THOLDING()这个语句, 在执行的瞬间,信息未返回取到的账户实际持仓之前(假如持仓为10手),Myholding的暂时返回值为0,等到账户返回真实持仓10手后,Myholding为10,但在这之前,系统已经为 EXTGBDATASET(\'NumEnter\',0)赋值为0 了。有什么方法解决这个时间差问题,请老师帮忙解答,谢谢!                                               


--  作者:fly
--  发布时间:2011/11/29 14:58:25
--  

因为对于持仓的真实判断,是要去交易柜台查持仓的,所以或多或少都会有一定的延迟.

如果真是成交了,这个时间差很短的,推荐您忽略不计.

 

当然,也可以用一个全局变量,跟在BUY后面,直接记录开仓手数(这就不需要去柜台查持仓,也没有任何时间差;---此种可能过一段时间需要去柜台查持仓,将本地的记录与柜台里的做同步)


--  作者:wsanle
--  发布时间:2011/11/29 15:20:22
--  时间差问题
谢谢fly,我原来记录仓位是用全局变量,我现在要实现的功能是:后台运行,在前台通过画趋势线开平仓,也就是手动和后台自动结合,我的后台程序自动开平仓没有问题,主要是用趋势线平仓时,后台的平仓条件不满足所以没有触发,无法靠后台得到平仓的仓位和价格等信息,所以我采取不断扫描账户读取账户的持仓信息,来检查是否是趋势线触发平仓或开仓的,以此不断更新记录仓位等信息的全局变量,供后台运行的程序以新的持仓头寸和价格计算加仓和止损止盈的条件,达到手动和自动结合的目的。现在的问题是在取账户仓位返回真实信息之前的时间间隙中,返回的信息是0,表示还暂时未取到账户持仓(交易开拓者和文华财经在未取到信息或无效信息,返回的值为-1,金字塔返回的值是0),这和账户真正的无头寸是一样的值0,所以我请fly老师能否教我用什么方法,区分未取到账户仓位或账户信息无效时候的0返回值,和真实仓位为0时返回的0值,拜托,谢谢!
--  作者:fly
--  发布时间:2011/11/29 15:30:33
--  

区分未取到账户仓位或账户信息无效时候的0返回值,和真实仓位为0时返回的0值

 

这个,还真是不会,顶顶帖求教高手.

[此贴子已经被作者于2011-11-29 15:30:44编辑过]

--  作者:wsanle
--  发布时间:2011/12/6 10:43:07
--  求高手解决仓位取值问题
为了实现5分钟后台自动运行和1分钟前台手动监控相结合的模型,我需要不断的读取账户的持仓状态,以确定是否是手动开仓或平仓(画趋势线自动),如属于前台手动开平仓,将持仓等信息传递给后台的自动化程序,以此实现手动自动相互配合的目的。现在我有一个问题用了各种方法无法解决,但又非解决不可,否则前功尽弃,请高手指导求解:用后台取持仓的函数X:=TBUYHOLDING, X:=TSELLHOLDING, X:=THOLDING取仓位时,在期货公司账户未返回结果(可能1秒钟)或账户无效时的延迟时间里,金字塔系统会暂时赋值为X=0,过后才赋值取到的仓位结果,如仓位是20手,结果将是赋值X=20,但如果账户本身就是空仓无仓位,返回的结果也会为0,即X=0,那么用什么方法能够区分两个不同的X=0值呢?因为我要根据持仓的结果做下一步。这个问题纠结了我10多天了,请高手帮忙,拜谢了!
--  作者:董小球
--  发布时间:2011/12/7 8:43:05
--  

能不能另外设置一个变量 如果这个变量和你的X都为0 就认为X是第一种

如果这个变量为1 X为0  那么就认为X是第二种


--  作者:lcgs005
--  发布时间:2012/8/30 19:57:58
--  
以下是引用wsanle在2011-11-29 15:20:22的发言:
谢谢fly,我原来记录仓位是用全局变量,我现在要实现的功能是:后台运行,在前台通过画趋势线开平仓,也就是手动和后台自动结合,我的后台程序自动开平仓没有问题,主要是用趋势线平仓时,后台的平仓条件不满足所以没有触发,无法靠后台得到平仓的仓位和价格等信息,所以我采取不断扫描账户读取账户的持仓信息,来检查是否是趋势线触发平仓或开仓的,以此不断更新记录仓位等信息的全局变量,供后台运行的程序以新的持仓头寸和价格计算加仓和止损止盈的条件,达到手动和自动结合的目的。现在的问题是在取账户仓位返回真实信息之前的时间间隙中,返回的信息是0,表示还暂时未取到账户持仓(交易开拓者和文华财经在未取到信息或无效信息,返回的值为-1,金字塔返回的值是0),这和账户真正的无头寸是一样的值0,所以我请fly老师能否教我用什么方法,区分未取到账户仓位或账户信息无效时候的0返回值,和真实仓位为0时返回的0值,拜托,谢谢!

使用一个变量来记录仓位状态即可,在李凯学堂的标准模板里即是用position来判断持仓情况,而不是使用holding函数