以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (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个浮点数直接用=的方式去判断