以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  高级功能研发区  (http://weistock.com/bbs/list.asp?boardid=5)
----  链接账号时g_pMainFormework->GetHolding2返回值为0  (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=78579)

--  作者:yu_xm
--  发布时间:2015/5/14 9:33:16
--  链接账号时g_pMainFormework->GetHolding2返回值为0
LRESULT CMainWindowDlg::OnNotifyUpdate(WPARAM w,LPARAM l)
{
CString strText;

if(w == 2)
{
//行情刷新时处理止损信息
ReportUpdate(l);
}
else if(w == 3)
{
//委托状态改变
OrderStatus(pKsi);
}
else if(w == 4)
{
BARGAIN_NOTIFY_KSI * pKsi = (BARGAIN_NOTIFY_KSI*)l;
if(strcmp(pKsi->m_szStatus,"Connected") == 0)
{
//账户已经连接
WriteLog("账户已经连接");
GetHoldInfo(); ///////在这里获取持仓信息,g_pMainFormework->GetHolding2(szAccount);返回的信息竟然为0
}
else if(strcmp(pKsi->m_szStatus,"Disconnected") == 0)
{
//账户断开连接
WriteLog("账户断开连接");
}
}
return 0;
}

--  作者:王锋
--  发布时间:2015/5/14 12:34:29
--  

不明白你的描述,能否再详细说明一下你的诉求?


--  作者:yu_xm
--  发布时间:2015/5/14 14:31:09
--  
账号连接时,去获取持仓信息,g_pMainFormework->GetHolding2(szAccount);获取到的持仓数量竟然为0(实际上有仓位的,且在交易时间),之后在别的地方调用相同的代码,持仓信息是可以获取的。
调用下面的代码:

else if(w == 4)
{
BARGAIN_NOTIFY_KSI * pKsi = (BARGAIN_NOTIFY_KSI*)l;
if(strcmp(pKsi->m_szStatus,"Connected") == 0)
{
//账户已经连接
WriteLog("账户已经连接");
GetHoldInfo(); ///////在这里获取持仓信息,g_pMainFormework->GetHolding2(szAccount);返回的信息竟然为0
}

--  作者:王锋
--  发布时间:2015/5/14 15:45:37
--  
帐号正在连接后,持仓信息需要一定时间才能从期货公司柜台返回回来。
--  作者:王锋
--  发布时间:2015/5/14 16:13:26
--  

 

你可以使用

g_pMainFormework->GetAccount(2); 如果返回值是255表示账户是未初始化完成或者连接无效的,这样配合使用,只有当这个函数返回正确值后再考虑读取持仓量


--  作者:yu_xm
--  发布时间:2015/5/20 11:29:05
--  
未登录账户状态:
VARIANT var = g_pMainFormework->GetAccount(2);
var.intVal 值为1573119,并不是你说的255


GetAccount(2)

http://www.weistock.com/bbs/dispbbs.asp?BoardID=5&ID=25452&replyID=&skin=1
帖子也出现过相似的问题

请问有什么可靠的方法判断账户已经登录连接正常。

--  作者:王锋
--  发布时间:2015/5/20 12:47:32
--  
VARIANT 是可变体类型,你不要去暴力使用intVal,应该判断里面的变量是什么样的值后再读取相应的字段