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