CTP行情交易接口.Net封装完整版源码

Discussion in 'CTP' started by 马不停蹄, Apr 24, 2012.

  1. 感谢楼主
     
  2. 马兄,非常感谢你提供的封装。刚看到你发布新版本的接口。
    我开了一个几个基于你之前接口的套利系统,偶尔会发现疯狂下单的情况,但是交易接口我的确只调用了一次。实盘测试的。当然出现的概率比较少。
    不知道你是否有碰到过。
    情况大概是这样子的,我调用一下下单接口,发出一个单,然后好像程序自动往ctp发了很多单,把全部资金都用完了。
     
  3. 我这边没有发现乱发单的情况。最好把狂发单时候的详细信息用log文件记录下来,便于问题的跟踪和解决。我这边只测试了单边的情况,不知道你的套利是发两个单边投机的单,还是用交易所的套利合约。
     
  4. 马兄

    请问,是什么原因你要重新做一个.net的封装呢?海风的那个不能满足需求吗?
     
  5. 都差不多,习惯哪个就用哪个吧
     
  6. 说下我我用下来的感觉吧,如有错误还请多多包涵

    海洋最早看到的CTP C#封装是LumenXH发的,也是我最早使用的,印象中在2010年中就停止公开了。当时的版本其实不算很完整,值得是全部封装的完整性,基本的交易行情都是完全没问题的。最大的特点是容易使用,其实不光封装了CTP的api,内部还有LumenXH对自己对api的处理。最近LumenXH又重新开放了下载,比原来更详细,内部的处理也更多了,呵呵,可以多多学习~

    然后是海风的api,刚拿到手的时候最大的感觉是详细、清晰。但使用下来不知道为什么至少在我的程序中没法多账户登录,试了多次仍然不行就放弃了。。。

    然后是楼主的封装。看了下代码应该是最直接的了,清晰度也很好。

    其实最大的区别是前2个封装是C# dllimport,而楼主的是C++/cli直接封装。理论上C++/cli的会快一点。。。
     
  7. CTP.Net3.5,TargetFrameworkVersion为3.5 (VS2010编译.net3.5 C++/CLI项目可能需要同时安装VS2008)
    CTP.Net4.0,TargetFrameworkVersion为4.0
    -------------------------------------------------------------------


    为什么要有个CTP.Net3.5,我电脑上老说我没安frame3.5,实际上我下载安上了.马兄,这是什么原因.
     
  8. 感谢楼主的善心。向各位大侠请教:我测试接受行情的时候看到行情总是有30秒的滞后,是什么原因呢,是交易所本来提供的数据就是这样的吗还是什么原因呢,非常感谢。
     
  9. 因为一些软件仅支持.Net3.5,比如OpenQuant 2.9,比如RightEdge,它们是使用3.5版运行库的,写CTP插件的话也必须使用.Net3.5版,而OpenQuant 3已经使用.Net4.0了,所以同时提供了两个版本的CTP.Net库。

    如果是自己写独立的软件,而不是其他软件的插件,则随便哪个版本的都可以。如果3.5版本的无法编译,可以在解决方案里右键菜单“卸载项目”,只保留4.0版的就可以了。
     
  10. 这个是用的模拟行情吗?模拟行情本来就这样,比实盘Delay了一段时间。
     
  11. 因为问的朋友比较多,这里说一下编译和运行的问题:

    编译:
    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."的错误。

    在开发环境下一般都有这些库的支持,部署到其他机器上会遭遇这些问题。
     
  12. 谢谢楼主,那实盘行情如何获取呢,是不是要改前置地址呢?还是怎样?我就是运行CSharpMdTest,前置地址用的仍然是26213,用户名密码都改过了。
     
  13. 马不停蹄兄的接口封装已经使用了一段时间了,如前面所说,是最直接的,个人很喜欢这种封装方式,和CTP官方API保持一致。虽然现在已经有了CTP股票接口的P/Invoke封装,但很期待马不停蹄兄的股票接口封装。
     
  14. 那个源码过期啦,各位大神谁有源码能否发小弟一份!
     
  15. 马不停蹄兄,CTP官方库更新到了20130402,希望你更新C#封装。
    造福大家,谢谢啊。
     
  16. 查询持仓方向时,买入开仓和卖出开仓的返回值都是long,净仓时返回short,大家有没有遇到啊?
     
  17. 请教 ”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();
    }
    ---------------------------------

    结果在这个地方报异常:

    [​IMG]

    ----------------------------------------------------------------------------
    避免照片不能查看,把过程描述如下:
    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.
    ----------------------------------------------------------------------------

    请马哥指点指点!!
     
  18. 接上。

    现在查出异常来自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 的设置 还是别的问题!

    麻烦了!