以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  高级功能研发区  (http://weistock.com/bbs/list.asp?boardid=5)
----  [求助]VC++6.0 回报无账户名和无法取资金权益  (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=75592)

--  作者:ttttyyyy
--  发布时间:2015/2/12 9:39:32
--  [求助]VC++6.0 回报无账户名和无法取资金权益
用金字塔3.41自带的AddinDemo插件修改以下(成交回报)内容:

void CMainWindowDlg::OrderStatus(BARGAIN_NOTIFY_KSI * pKsi)
{
CString strLog;
//strLog.Format("[回报] 挂单%d, 状态 %s", pKsi->m_nOrderID, pKsi->m_strStatus);

//这段是调试的代码
strLog.Format("[回报] 挂单%d, 状态 %s, 账号=%s", pKsi->m_nOrderID, pKsi->m_strStatus, pKsi->m_strAccount);
WriteLog(strLog);
long m_KeYongZhiJin = (long)g_pMainFormework->GetAccount2(3, "8000273").fltVal; //可用资金
strLog.Format("可用资金1=%d", m_KeYongZhiJin);
WriteLog(strLog);
m_KeYongZhiJin = (long)g_pMainFormework->GetAccount(3).fltVal; //可用资金
strLog.Format("可用资金2=%d", m_KeYongZhiJin);
WriteLog(strLog);
long m_DongTaiQuanYi = (long)g_pMainFormework->GetAccount2(6, "8000273").fltVal; // 动态权益
strLog.Format("动态权益1=%d", m_DongTaiQuanYi);
WriteLog(strLog);
m_DongTaiQuanYi = (long)g_pMainFormework->GetAccount(6).fltVal; // 动态权益
strLog.Format("动态权益2=%d", m_DongTaiQuanYi);
WriteLog(strLog);
//以上这段是调试的代码

if(pKsi->m_strStatus == "Tradeing")
{
}
else if(pKsi->m_strStatus == "Cancelled" || pKsi->m_strStatus == "Filled" || pKsi->m_strStatus == "Inactive")
{
}
}

点下单,得到结果
2015.02.12 09:26:17 [回报] 挂单-123392180, 状态 Filled, 账号=_^][兡0?
2015.02.12 09:26:17 可用资金1=0
2015.02.12 09:26:17 可用资金2=0
2015.02.12 09:26:17 动态权益1=0
2015.02.12 09:26:17 动态权益2=0

共有2个问题
1、成交回报中账户名pKsi->m_strAccount错误
2、GetAccount和GetAccount2无法取得正确的账户内容
以上代码在2.997下的运行结果是正确的,在3.41下CTP账户错误,请测试修改更正!


--  作者:王锋
--  发布时间:2015/2/12 14:14:21
--  

1,应该是你自己的使用错误导致

2,VARIANT 类型的变量是变体类型,你这么直接使用的方法本身就有很大问题,使用前你应该判断变量类型后再去调用,或者使用下面的代码进行类型转换强制转换后再用

 

COleVariant Cvt1(vtMax);
     Cvt1.ChangeType(VT_R4);
     dbMax = Cvt1.fltVal;