马兄,非常感谢你提供的封装。刚看到你发布新版本的接口。 我开了一个几个基于你之前接口的套利系统,偶尔会发现疯狂下单的情况,但是交易接口我的确只调用了一次。实盘测试的。当然出现的概率比较少。 不知道你是否有碰到过。 情况大概是这样子的,我调用一下下单接口,发出一个单,然后好像程序自动往ctp发了很多单,把全部资金都用完了。
说下我我用下来的感觉吧,如有错误还请多多包涵 海洋最早看到的CTP C#封装是LumenXH发的,也是我最早使用的,印象中在2010年中就停止公开了。当时的版本其实不算很完整,值得是全部封装的完整性,基本的交易行情都是完全没问题的。最大的特点是容易使用,其实不光封装了CTP的api,内部还有LumenXH对自己对api的处理。最近LumenXH又重新开放了下载,比原来更详细,内部的处理也更多了,呵呵,可以多多学习~ 然后是海风的api,刚拿到手的时候最大的感觉是详细、清晰。但使用下来不知道为什么至少在我的程序中没法多账户登录,试了多次仍然不行就放弃了。。。 然后是楼主的封装。看了下代码应该是最直接的了,清晰度也很好。 其实最大的区别是前2个封装是C# dllimport,而楼主的是C++/cli直接封装。理论上C++/cli的会快一点。。。
CTP.Net3.5,TargetFrameworkVersion为3.5 (VS2010编译.net3.5 C++/CLI项目可能需要同时安装VS2008) CTP.Net4.0,TargetFrameworkVersion为4.0 ------------------------------------------------------------------- 为什么要有个CTP.Net3.5,我电脑上老说我没安frame3.5,实际上我下载安上了.马兄,这是什么原因.
因为一些软件仅支持.Net3.5,比如OpenQuant 2.9,比如RightEdge,它们是使用3.5版运行库的,写CTP插件的话也必须使用.Net3.5版,而OpenQuant 3已经使用.Net4.0了,所以同时提供了两个版本的CTP.Net库。 如果是自己写独立的软件,而不是其他软件的插件,则随便哪个版本的都可以。如果3.5版本的无法编译,可以在解决方案里右键菜单“卸载项目”,只保留4.0版的就可以了。
因为问的朋友比较多,这里说一下编译和运行的问题: 编译: VS2008,必须同时安装C#和C++,只能编译.Net3.5版本。 VS2010,必须同时安装C#和C++,可以编译.Net4.0版本;要编译.Net3.5版本的话,必须要同时满足上面VS2008的条件。因为VS2010仅带有VC++ 10.0版本,无法生成.Net3.5的C++/CLI项目,必须要VS2008带的VC++ 9.0才能完成。 运行: 必须要同时有对应版本的.Net运行库和VC++运行库 比如.Net3.5版,除了.Net3.5 Framework外,还需要Visual C++ 2008 Runtime Libraries (x86) 比如.Net4.0版,除了.Net4.0 Framework外,还需要Visual C++ 2010 Runtime Libraries (x86) 如果仅安装了.Net库,而没有对应版本的VC++库的话,会报出一个"Could not load file or assembly 'CTP.dll' or one of its dependencies."的错误。 在开发环境下一般都有这些库的支持,部署到其他机器上会遭遇这些问题。
马不停蹄兄的接口封装已经使用了一段时间了,如前面所说,是最直接的,个人很喜欢这种封装方式,和CTP官方API保持一致。虽然现在已经有了CTP股票接口的P/Invoke封装,但很期待马不停蹄兄的股票接口封装。
请教 ”AccessViolationException was unhandle“ 问题。 马不停蹄兄你好! 我是小菜鸟,请教你一问题! 我用VS2010. 借用了 这一版本的 http://ishare.iask.sina.com.cn/f/34438582.html CTP.DLL,thostmduserapi.dll 及 thosttraderapi.dll 。 用了些常规代码想测试下与QuoteServer的连接: -------------------------------- public Trade() { InitializeComponent(); string QuoteServerAddress = Settings.Default.QuoteServerAddress; string TradeServerAddress = Settings.Default.TradeServerAddress; string BrokerID = Settings.Default.BrokerID; string UserID = Settings.Default.TradingAccountID; string Password = Settings.Default.TradingAccountPassword; ppInstrumentID[0] = Settings.Default.InstrumentId1; ppInstrumentID[1] = Settings.Default.InstrumentId2; mdAdapter = new CTPMDAdapter(); mdAdapter.OnFrontConnected += new FrontConnected(OnFrontConnected); mdAdapter.OnFrontDisconnected += new FrontDisconnected(OnFrontDisconnected); mdAdapter.OnHeartBeatWarning += new HeartBeatWarning(OnHeartBeatWarning); mdAdapter.OnRspError += new RspError(OnRspError); mdAdapter.OnRspSubMarketData += new RspSubMarketData(OnRspSubMarketData); mdAdapter.OnRspUnSubMarketData += new RspUnSubMarketData(OnRspUnSubMarketData); mdAdapter.OnRspUserLogin += new RspUserLogin(OnRspUserLogin); mdAdapter.OnRspUserLogout += new RspUserLogout(OnRspUserLogout); mdAdapter.OnRtnDepthMarketData += new RtnDepthMarketData(OnRtnDepthMarketData); try { mdAdapter.RegisterFront(QuoteServerAddress); mdAdapter.Init(); mdAdapter.Join(); // 阻塞直到关闭或者CTRL+C } catch (Exception e) { Console.WriteLine(e.Message); } finally { mdAdapter.Release(); } // traderAdapter = new CTPTraderAdapter(); } --------------------------------- 结果在这个地方报异常: ---------------------------------------------------------------------------- 避免照片不能查看,把过程描述如下: 1.build 已经通过。 2.debug 的时候弹出 CTPMDAdapter.cpp 然后指出: void CTPMDAdapter::RegisterFront(String^ pszFrontAddress) { CAutoStrPtr asp = CAutoStrPtr(pszFrontAddress); m_pApi->RegisterFront(asp.m_pChar); } AccessViolationException was unhandle. Attempted to read or write protected memory. This is often an indication that other memory is corrupt. ---------------------------------------------------------------------------- 请马哥指点指点!!
接上。 现在查出异常来自CTP.dll Debug 输出信息如下: -------------------------------------------------------------- ------WorkerDoWork------122.224.174.140:41213 RuntimeError:Invalid location in line 44 of file ..\..\source\network\ServiceName.cpp A first chance exception of type 'System.AccessViolationException' occurred in CTP.dll -------------------------------------------------------------- 麻烦马哥指点下,究竟是小弟VS2010 的设置 还是别的问题! 麻烦了!