以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://www.weistock.com/bbs/index.asp)
--  高级功能研发区  (http://www.weistock.com/bbs/list.asp?boardid=5)
----  [求助]帐户掉线重新登录导致持仓函数出错的问题~  (http://www.weistock.com/bbs/dispbbs.asp?boardid=5&id=25183)

--  作者:bbking
--  发布时间:2012/9/3 14:34:43
--  [求助]帐户掉线重新登录导致持仓函数出错的问题~

我用VBA监控某帐户的实际持仓的时候~

经常有帐户掉线重连后持仓返回出错的问题~

实盘中帐户掉线重连是个小概率事件~(比如说出金后金字塔显示交易成功~你点确定然后帐户就自动掉线重连)

但是还是需要考虑到这种情况~

 

Sub Application_VBAStart()
    Call Application.SetTimer(0,500)      \'设置一个0号计时器
End Sub

 

Sub Application_Timer(ID)
dim acfl
acfl="800052"\'跟踪帐户

 

call Document.SetExtData("ACFL1_isac1",order.IsAccount(acfl))\'这个是跟踪帐户

    If ID=0 and order.IsAccount(acfl) then
call Order.HoldingInfoByCode2("if09","zj",BuyHolding,BuyCost,BuyTodayHolding,SellHolding,SellCost,SellTodayHolding,PNL,UseMargin,acfl)
call Document.SetExtData("ACFL1_thold_if",BuyHolding-SellHolding)

 

    end if
End Sub

 

 

====================

以上代码在帐户800052登录的状态下把IF09上的持仓导出为一个外生全局变量~

但是会出现这种情况~

如果800052帐户持有1手IF09多单~然后退出帐户~

这时候ACFL1_thold_if返回的还是1手多单没错~

重连后~按道理ACFL1_thold_if不会变成0~而应该还是直接为1~

但是我用后台监控这个全局变量~

在800052这个帐户登录后ACFL1_thold_if这个全局变量会自动初始化一次~

先变成0然后变成1~

我想问一下金字塔的设计师这是为什么?

因为这个变动~我的另外一个帐户会多出一次开平操作...

[此贴子已经被作者于2012-9-3 14:40:19编辑过]

--  作者:bbking
--  发布时间:2012/9/3 14:52:59
--  

我以为是帐户重连后持仓暂时刷新不出来~先会显示帐户登录

然后帐户持仓再显示出来~中间可能差个几秒

于是我用后台监控里写上一段~

800052帐户掉线重连后先sleep 20秒~

然后再记录ACFL1_thold_if这个全局变量

谁知道~ACFL1_thold_if在20秒后还是先变成0再变成1~

请问一下这是怎么回事?


--  作者:王锋
--  发布时间:2012/9/3 15:06:34
--  

使用2.93版,

Account2 方法

 

返回255表示当前是无效状态


--  作者:rushtaotao
--  发布时间:2012/9/3 15:16:29
--  
那你断线之后全局变量里面的值有变化吗?我测了一下 我的全局变量里面没有变化
--  作者:bbking
--  发布时间:2012/9/3 15:45:32
--  
以下是引用rushtaotao在2012-9-3 15:16:29的发言:
那你断线之后全局变量里面的值有变化吗?我测了一下 我的全局变量里面没有变化

 

 


2012-09-03 15:43:37.936    跟踪帐户真实持仓=6.00000
2012-09-03 15:43:38.927    =======
2012-09-03 15:43:38.928    跟踪帐户真实持仓=6.00000
2012-09-03 15:43:39.948    =======
2012-09-03 15:43:39.949    跟踪帐户真实持仓=0.00000
2012-09-03 15:43:40.962    =======
2012-09-03 15:43:40.963    跟踪帐户真实持仓=0.00000
2012-09-03 15:43:41.969    =======
2012-09-03 15:43:41.970    跟踪帐户真实持仓=6.00000
2012-09-03 15:43:42.995    =======
2012-09-03 15:43:42.996    跟踪帐户真实持仓=6.00000
2012-09-03 15:43:44.004    =======
2012-09-03 15:43:44.005    跟踪帐户真实持仓=6.00000
2012-09-03 15:43:45.022    =======
2012-09-03 15:43:45.023    跟踪帐户真实持仓=6.00000
2012-09-03 15:43:46.030    =======

 

 

==============================

 

FILEPATH:=\'C:\\debug\\t3.TXT\'; DEBUGFILE(FILEPATH,\'=======\',0);
DEBUGFILE(FILEPATH,\'跟踪帐户真实持仓=%.5f\',extgbdata(\'ACFL1_thold_if\'));


 

 

用这个代码再监控一下

不间断监控(无论有无新行情...)

先手动退出那个目标帐户~再然后登录

我监控的结果是全局变量会变成0再变成6

 

我断线后全局变量是没有变化的

是重新登录之后全局变量会先变成0再变成6...

为什么他会先变成0~我一直搞不清这个问题~所以才发帖

[此贴子已经被作者于2012-9-3 15:46:32编辑过]

--  作者:bbking
--  发布时间:2012/9/3 15:52:40
--  怎么优化应用公式的指标参数???
以下是引用王锋在2012-9-3 15:06:34的发言:

使用2.93版,

Account2 方法

 

返回255表示当前是无效状态

 

我这里不是有个order.IsAccount来防止帐户掉线吗?

干嘛还要用那个Account2返回225呢?

 

我是不明白为什么帐户重连后那个全局变量会先变成0再变成真实持仓~

能否帮我调试一下?

我非常确定不是我某段代码写错了...

 

我用的是2.93版

[此贴子已经被作者于2012-9-3 15:57:01编辑过]

--  作者:bbking
--  发布时间:2012/9/3 16:02:05
--  
以下是引用王锋在2012-9-3 15:06:34的发言:

使用2.93版,

Account2 方法

 

返回255表示当前是无效状态

 

   If ID=0 and order.Account2(2,acfl)<255 then

 

我改成这样的确没出现全局变量变成0的情况了~

明天交易时间我再测试一下...

谢谢啦


--  作者:rushtaotao
--  发布时间:2012/9/3 16:16:56
--  
问题正在处理
--  作者:rushtaotao
--  发布时间:2012/9/3 16:18:44
--  

Sub Application_VBAStart()
    Call Application.SetTimer(0,500)      \'设置一个0号计时器
End Sub

 

Sub Application_Timer(ID)
dim acfl
acfl="80008"\'跟踪帐户

 

call Document.SetExtData("ACFL1_isac1",order.IsAccount(acfl))\'这个是跟踪帐户


    If ID=0 and order.Account(2)<>"255" then
call Order.HoldingInfoByCode2("if09","zj",BuyHolding,BuyCost,BuyTodayHolding,SellHolding,SellCost,SellTodayHolding,PNL,UseMargin,acfl)
call Document.SetExtData("ACFL1_thold_if",BuyHolding-SellHolding)


    end if
End Sub

sub vbaend()
    call application.KillTimer(0)
end sub


--  作者:rushtaotao
--  发布时间:2012/9/3 16:19:03
--  金字塔数据导出问题

代码改下 我这里测了 用上面的vba就没你那问题了