rust: 写CTP策略中的几个难点

博客指出写CTP策略,原生C++最佳,也可选择C#或Java,不推荐Python。虽Rust适合写交易策略,但无人开源,因其小众且学习曲线陡。还总结了用Rust写CTP策略的难度,如C++接口封装、事件注册、异步处理、消息分发及日常应用等方面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写CTP策略,最好的用原生C++写;其次是C#或Java;个人不推荐用python之类(有争议)。
从rust的语言本身特性来看,虽然是比较适合写交易策略的。 但可惜到目前,并没有人开源。

一方面原因是rust还很小众,群众基础不够;另外一方面是,rust的学习曲线很陡,让人生畏,水平不高,单独弄还真有难度,交易代码的后果的严重性,想必容易理解的。

简单总结一下,有几方面的难度:

1、CTP 的C++接口封装

CTP的接口是原生C++,C++要与Rust进行交互。
因此, 这个难度存在两方面,一方面对Rust方面FFI要比较熟悉,特别是包括部分复杂类型的处理;另外一方面,同时也要对C++有一定的熟悉;
Rust封装C++的接口,一种是写代码生成相应的代码;另一种是借助第三库来自动封装。这个看自己的喜好和熟悉程度。

2、CTP中的事件注册
在C++中,要注册thost相关的回调,以C# TradeApi为例:

            strManager.ctpTradeAPI.OnFrontConnected += new FrontConnected(OnFrontConnected);
            strManager.ctpTradeAPI.OnFrontDisconnected += new FrontDisconnected(OnFrontDisconnected);
            strManager.ctpTradeAPI.OnHeartBeatWarning += new HeartBeatWarning(OnHeartBeatWarning);
            strManager.ctpTradeAPI.OnRspError += new RspError(OnRspError);
            strManager.ctpTradeAPI.OnRspUserLogin += new RspUserLogin(OnRspUserLogin);
            strManager.ctpTradeAPI.OnRspOrderAction += new RspOrderAction(OnRspOrderAction);
            strManager.ctpTradeAPI.OnRspOrderInsert += new RspOrderInsert(OnRspOrderInsert);
            strManager.ctpTradeAPI.OnRspQryInstrument += new RspQryInstrument(OnRspQryInstrument);
            strManager.ctpTradeAPI.OnRtnInstrumentStatus += new RtnInstrumentStatus(OnRtnInstrumentStatus);
            strManager.ctpTradeAPI.OnRspQryInvestorPosition += new RspQryInvestorPosition(OnRspQryInvestorPosition);
            strManager.ctpTradeAPI.OnErrRtnOrderAction += new ErrRtnOrderAction(OnErrRtnOrderAction);
            strManager.ctpTradeAPI.OnRspQryTradingAccount += new RspQryTradingAccount(OnRspQryTradingAccount);
            strManager.ctpTradeAPI.OnRspSettlementInfoConfirm += new RspSettlementInfoConfirm(OnRspSettlementInfoConfirm);
            strManager.ctpTradeAPI.OnRtnOrder += new RtnOrder(OnRtnOrder);
            strManager.ctpTradeAPI.OnRtnTrade += new RtnTrade(OnRtnTrade);
            strManager.ctpTradeAPI.OnRspQryInvestorPositionDetail += new RspQryInvestorPositionDetail(OnRspQryInvestorPositionDetail);

如何在RUST中处理?在rust中,订阅thost相关的回调函数。

3、CTP中的异步处理

CTP中,多个策略之间是共同一套报单引用体系(自增的);这也意味着,在策略下单和撤单是同步的。
策略之间的信号是独立的,异步的,这些与thost交互部分,需要进行同步处理;

4、CTP中消息的分发

thost把行情(不同品种)、不同交易回报等信息回传给策略处理方时,如何进行消息分发?有些是用window窗体机制进行分发,对于rust要采用自身的处理方式。

5、Rust日常的应用

这些包括基础知识,和写一般的工程没什么区别;当然,如果架构好一些,会更好。这部分工作是相当容易的,只是建立一个优秀的交易框架,这个是内功。差的架构也能跑。