以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (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=98066) |
-- 作者:gamexumeng -- 发布时间:2016/6/1 1:30:07 -- 成功登陆到获得合约信息之间有时间差 if (!g_pMainFormework->GetCTPAccountName(0, szAcc)) // 成功登陆了,账户值返回是对的 ... int _itotal = g_pMainFormework->GetHolding2(szAcc); // 获得账户持仓合约总量, 在登录账户过后一小段时间里,这个返回是0(很明显就是在重新开金字塔链接服务器的时候), 然后我的初始化就错了 所以这个有什么方法能避免这个问题吗? 是否有标志可以知道持仓总量是真的等于0,还是服务器还没返回?
|
-- 作者:王锋 -- 发布时间:2016/6/1 7:52:30 --
//得到指定的非IB外盘帐户信息
参数 nType = 2 如果返回255,则表示账户当前尚未登录或者登录后尚未初始化完毕 |
-- 作者:gamexumeng -- 发布时间:2016/6/1 9:02:15 -- 谢谢
|
-- 作者:gamexumeng -- 发布时间:2016/6/3 22:39:45 -- 帮我看看,这段程序,为什么会拿到账户持仓数量等于0呢? 我持仓数量是3,哪里错了呢? bool CQHGoods::InitInfo() { char szAcc[64] = { 0 }; if (!g_pMainFormework->GetCTPAccountName(0, szAcc)) return false; if ( g_pMainFormework->GetAccount2(2,szAcc).intVal == 255 ) { return false; } m_strAcc = szAcc; m_bAccConnected = true; Log("成功获取登录账号,初始化..."); if (!g_pMainFormework->GetContract((char*)m_code.c_str(), m_wMarket, m_fMultipliter, m_fMinTick, m_fShortPercent, m_fLongPercent)) { stringstream ss; ss << "获得合约信息失败!"; Log(ss.str().c_str()); return false; } else { stringstream ss; ss << "获得合约信息成功!合约:" << m_code << " 市场代码:" << m_wMarket << " 合约乘数:" << m_fMultipliter << " 最小变动单位:" << m_fMinTick << " 空头保证金率:" << m_fShortPercent << " 多头保证金率: " << m_fLongPercent; Log(ss.str().c_str()); } int _itotal = g_pMainFormework->GetHolding2(szAcc); // 持仓合约总量 stringstream ss; ss << "持仓合约总量: " << _itotal; Log(ss.str().c_str()); } log 输出为: Account connected! 成功获取登录账号,初始化... 获得合约信息成功!合约:M09 市场代码:20804 合约乘数:10 最小变动单位:1 空头保证金率:5 多头保证金率: 5 持仓合约总量: 0 成功监听豆粕1609 成功获取登录账号,初始化... 获得合约信息成功!合约:Y09 市场代码:20804 合约乘数:10 最小变动单位:2 空头保证金率:5 多头保证金率: 5 持仓合约总量: 0 成功监听豆油1609 成功获取登录账号,初始化... 获得合约信息成功!合约:I09 市场代码:20804 合约乘数:100 最小变动单位:0.5 空头保证金率:5 多头保证金率: 5 持仓合约总量: 0 |
-- 作者:gamexumeng -- 发布时间:2016/6/3 23:03:28 -- 我在一台机器上是好的, if ( g_pMainFormework->GetAccount2(2,szAcc).intVal == 255 ) { return false; } 这个是能成功返回的,另一台机器上就不行,两台机器都是模拟账号,不一样的账号
|
-- 作者:gamexumeng -- 发布时间:2016/6/3 23:19:51 -- 我手动买了1手豆粕,然后关掉客户端,重启,再持仓信息没返回来之前,执行InitInfo ,结果: GetCTPAccountName:
612152 成功获取登录账号,初始化... 获得合约信息成功!合约:M09 市场代码:20804 合约乘数:10 最小变动单位:1 空头保证金率:5 多头保证金率: 5 持仓合约总量: 0 成功监听豆粕1609 |
-- 作者:王锋 -- 发布时间:2016/6/4 0:05:39 -- 没有完全看懂你的描述,你的意思是始终取不到持仓总量呢还是当GetAccount2(2,szAcc).intVal != 255 时不能取得持仓总量? |
-- 作者:gamexumeng -- 发布时间:2016/6/6 10:00:31 -- 你之前说的: 参数 nType = 2 如果返回255,则表示账户当前尚未登录或者登录后尚未初始化完毕 所以我加了判断: if ( g_pMainFormework->GetAccount2(2,szAcc).intVal == 255 ) { return false; } 但是现在程序 执行结果是这个判断已经过了, 仍然取不到持仓总量 就是说 GetAccount2(2,szAcc).intVal != 255 时不能取得持仓总量,为0 |
-- 作者:王锋 -- 发布时间:2016/6/6 10:07:58 -- 取不到持仓总量,是一直都取不到,还是过会儿就收到了 |
-- 作者:gamexumeng -- 发布时间:2016/6/6 10:23:40 -- 过一会就能取到 |