欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → 成功登陆到获得合约信息之间有时间差

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有5134人关注过本帖树形打印复制链接

主题:成功登陆到获得合约信息之间有时间差

帅哥哟,离线,有人找我吗?
gamexumeng
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:130 积分:0 威望:0 精华:0 注册:2016/5/4 18:36:58
成功登陆到获得合约信息之间有时间差  发帖心情 Post By:2016/6/1 1:30:07 [只看该作者]

if (!g_pMainFormework->GetCTPAccountName(0, szAcc)) // 成功登陆了,账户值返回是对的

...

int _itotal = g_pMainFormework->GetHolding2(szAcc); // 获得账户持仓合约总量, 在登录账户过后一小段时间里,这个返回是0(很明显就是在重新开金字塔链接服务器的时候), 然后我的初始化就错了


所以这个有什么方法能避免这个问题吗? 是否有标志可以知道持仓总量是真的等于0,还是服务器还没返回?

 回到顶部
帅哥哟,离线,有人找我吗?
王锋
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:罗宾汉 帖子:11808 积分:20695 威望:0 精华:10 注册:2009/8/18 8:15:13
  发帖心情 Post By:2016/6/1 7:52:30 [只看该作者]

 

//得到指定的非IB外盘帐户信息 
 virtual VARIANT GetAccount2(short nType, char * szAccount) = 0;

 

参数 nType = 2

如果返回255,则表示账户当前尚未登录或者登录后尚未初始化完毕



金字塔—专业程序化软件提供商

金字塔-技术部

-----------------------------------------------------------------------------------------------------

工作时间:周一至周五 08:30 - 17:30   周末及法定节假日休息

Email:service@weistock.com
 回到顶部
帅哥哟,离线,有人找我吗?
gamexumeng
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:130 积分:0 威望:0 精华:0 注册:2016/5/4 18:36:58
  发帖心情 Post By:2016/6/1 9:02:15 [只看该作者]

谢谢

 回到顶部
帅哥哟,离线,有人找我吗?
gamexumeng
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:130 积分:0 威望:0 精华:0 注册:2016/5/4 18:36:58
  发帖心情 Post By: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
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:130 积分:0 威望:0 精华:0 注册:2016/5/4 18:36:58
  发帖心情 Post By:2016/6/3 23:03:28 [只看该作者]

我在一台机器上是好的,
 if ( g_pMainFormework->GetAccount2(2,szAcc).intVal == 255 )
 {
  return false;
 }

这个是能成功返回的,另一台机器上就不行,两台机器都是模拟账号,不一样的账号

 回到顶部
帅哥哟,离线,有人找我吗?
gamexumeng
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:130 积分:0 威望:0 精华:0 注册:2016/5/4 18:36:58
  发帖心情 Post By:2016/6/3 23:19:51 [只看该作者]

我手动买了1手豆粕,然后关掉客户端,重启,再持仓信息没返回来之前,执行InitInfo ,结果:
GetCTPAccountName:
612152
成功获取登录账号,初始化...
获得合约信息成功!合约:M09 市场代码:20804 合约乘数:10 最小变动单位:1 空头保证金率:5 多头保证金率: 5
持仓合约总量: 0
成功监听豆粕1609

 回到顶部
帅哥哟,离线,有人找我吗?
王锋
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:罗宾汉 帖子:11808 积分:20695 威望:0 精华:10 注册:2009/8/18 8:15:13
  发帖心情 Post By:2016/6/4 0:05:39 [只看该作者]

没有完全看懂你的描述,你的意思是始终取不到持仓总量呢还是当GetAccount2(2,szAcc).intVal != 255 时不能取得持仓总量?



金字塔—专业程序化软件提供商

金字塔-技术部

-----------------------------------------------------------------------------------------------------

工作时间:周一至周五 08:30 - 17:30   周末及法定节假日休息

Email:service@weistock.com
 回到顶部
帅哥哟,离线,有人找我吗?
gamexumeng
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:130 积分:0 威望:0 精华:0 注册:2016/5/4 18:36:58
  发帖心情 Post By: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


 回到顶部
帅哥哟,离线,有人找我吗?
王锋
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:罗宾汉 帖子:11808 积分:20695 威望:0 精华:10 注册:2009/8/18 8:15:13
  发帖心情 Post By:2016/6/6 10:07:58 [只看该作者]

取不到持仓总量,是一直都取不到,还是过会儿就收到了



金字塔—专业程序化软件提供商

金字塔-技术部

-----------------------------------------------------------------------------------------------------

工作时间:周一至周五 08:30 - 17:30   周末及法定节假日休息

Email:service@weistock.com
 回到顶部
帅哥哟,离线,有人找我吗?
gamexumeng
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:130 积分:0 威望:0 精华:0 注册:2016/5/4 18:36:58
  发帖心情 Post By:2016/6/6 10:23:40 [只看该作者]

过一会就能取到

 回到顶部
总数 30 1 2 3 下一页