以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://222.73.7.161/bbs/index.asp) -- 高级功能研发区 (http://222.73.7.161/bbs/list.asp?boardid=5) ---- vc++开发dll遇到问题 (http://222.73.7.161/bbs/dispbbs.asp?boardid=5&id=137829) |
-- 作者:三木成材 -- 发布时间:2016/8/10 22:23:03 -- vc++开发dll遇到问题 大家好,我在用金字塔网站下载的VC++范例进行DLL开发,但是范例在vc++6.0下编译成功,却在文件夹里找不到AddinDemo.adi或者AddinDemo.dll,请大侠指教!谢谢! |
-- 作者:王锋 -- 发布时间:2016/8/10 22:24:17 -- VC的工程属性设置里,看看编译后的文件的存放路径在哪里 |
-- 作者:三木成材 -- 发布时间:2016/8/10 22:32:05 -- 太感谢,找到了,在D:\\Weisoft Stock(x86)下面,谢谢! |
-- 作者:emtfemtf -- 发布时间:2016/8/11 6:31:47 -- 金字塔网站上,哪里有VC的范例呢? |
-- 作者:三木成材 -- 发布时间:2016/8/13 12:57:35 -- 再请教一下,我想设置几个变量记录持仓量、持仓均价、目前交易获利、按现价平仓盈亏和几个数组,我是在CMainWindowDlg类中增加成员变量好呢,还是在设置全局变量好呢(StdAfx.cpp中:int m_globalA;然后在StdAfx.h中:extern int m_globalA;) 或者类中变量设置为静态好呢?我希望晚上电脑关闭后,第二天还能继续这些变量的继续记录!谢谢! |
-- 作者:王锋 -- 发布时间:2016/8/15 9:01:23 -- StdAfx.cpp中:int m_globalA;然后在StdAfx.h中:extern int m_globalA;) 会更好一些 |
-- 作者:三木成材 -- 发布时间:2016/8/17 22:26:18 -- 各位老师,我在DLL编写后调试中遇到一个问题:持仓手数统计中,我在OrderStatus函数的返回值为"Tradeing" 时统计,持仓量+= m_gCCV-pKsi->m_nFilled,结果当分多次成交时,统计重复了;后来我改在返回为"Filled" 时统计,又出现一个问题,当有两个委托单时,前一个委托单的成交量又没有被统计进去,恳请指教!代码如下: /*
订单的变化类型,有如下字符串值: "Cancelled" 表示订单已经撤销 "Submitted"和"PreSubmitted" 表示订单已经提交,当只成交一部分尚未完全成交时也会出现此事件,此时已成交数量在Filled参数中显示 "Filled" 表示本地订单已经全部成交 "Tradeing" 每笔成交回报,此时Filled是本次成交数量,Remaining将始终为0 "Inactive" 表示本次委托无效,比如价格超过允许范围,委托数量超出范围等等 "PendingSubmit" 本次委托已经发送服务器,但是服务器未发出确认消息(仅IB有效) "PendingCancel" 本次撤单委托已经发送服务器,但是服务器未发出确认消息(仅IB有效) */ void CMainWindowDlg::OrderStatus(BARGAIN_NOTIFY_KSI * pKsi) {
CString strLog;
strLog.Format("[回报] 挂单%d, 状态 %s", pKsi->m_nOrderID, pKsi->m_szStatus);
WriteLog(strLog);
//记录日志到文件
//LOG_DEBUG_INFO( "c:\\\\MyData.txt", "[回报] 挂单%d, 状态 %s", pKsi->m_nOrderID, pKsi->m_szStatus);
if(strcmp(pKsi->m_szStatus,"Tradeing") == 0)
{
//在这里处理订单成交的代码
}
else if(strcmp(pKsi->m_szStatus ,"Cancelled")==0)
{
}
else if(strcmp(pKsi->m_szStatus,"Filled")==0)
{
if(pKsi->m_fPrice==委托价1)
{
m_gCCP=(m_gCCP*m_gCCV+pKsi->m_nFilled*MM[kk])/(m_gCCV+pKsi->m_nFilled);
m_gCCV=m_gCCV+pKsi->m_nFilled;
}else if(pKsi->m_fPrice==委托价2)
{
m_gCCP=(m_gCCP*m_gCCV+pKsi->m_nFilled*MM[kk])/(m_gCCV+pKsi->m_nFilled);
m_gCCV=m_gCCV+pKsi->m_nFilled;
}
else if(strcmp(pKsi->m_szStatus,"Inactive")==0)
{
//在这里处理订单被撤销,无效订单
} } |
-- 作者:王锋 -- 发布时间:2016/8/17 22:36:43 -- 不懂你的程序逻辑什么 |
-- 作者:三木成材 -- 发布时间:2016/8/18 21:44:32 -- 我的程序逻辑是:在OnNotifyUpdate(WPARAM w,LPARAM l)中w=2时,对满足条件的价格进行 限价委托买入,然后需要在OrderStatus(BARGAIN_NOTIFY_KSI * pKsi)中获取成交情况,记录持仓手数,以便再次收到新价格时判断并确定卖出多少手 |
-- 作者:王锋 -- 发布时间:2016/8/19 11:05:26 -- 你可以用TXT日志记录的方式来调试一下你的代码,如果出现运行情况与你预期不符,通过日志来查找一下问题原因。 我们无法得知你的具体逻辑,所以你提出的问题我们无法帮你解决,只是初步看了一下你的程序隐患在if(pKsi->m_fPrice==委托价1)这里,我们C++程序员都应该知道浮点数是存在浮点误差的,不能将2个浮点数直接用=的方式去判断 |