我之前练习尝试每天做日内交易的时候给风控程序加了一个功能
每天收盘后 计算账户余额,如果有盈利就转出到银行
我的风控程序是用python开发,ctp包用的是下面这个包
```shell
https://github.com/keli/ctp-python
ctp出金时间有限制,交易日早上 9:05-- 下午15:30,夜盘只能入,不能出
调用的api
很简单,直调用 ReqFromFutureToBankByFuture 接口,参数如下
req=ctp.CThostFtdcReqTransferField()
req.BankID = '银行编码'
req.BankBranchID='银行营业点编码'
req.BrokerID = self.broker_id
req.AccountID = self.investor_id
req.BankAccount = '银行卡号'
req.BankPassWord= '银行卡密码'
req.Password='期货的资金密码'
req.CurrencyID="CNY"
req.TradeAmount= money
self.api.ReqFromFutureToBankByFuture(req, self.id())
一共9个参数,只有money(类型是浮点数)是变化的,其它的都是固定值,写死在代码里面即可
BankID和BankBranchID的查询方法
BankID就是银期协议里面的银行编码,都是固定值,查一次记下来就行,用ReqQryContractBank 这个方法
req=ctp.CThostFtdcQryContractBankField()
req.BrokerID =self.broker_id
self.api.ReqQryContractBank(req, self.id())
会打印出十几家主要银行的BankID 和BankBranchID,BankBranchID基本上都是'0000',这个查一次就够了,不会变化的
感想
- ctp的 接口整体就是基于c++ 虚函数的callback,业务方用起来很扭曲,导致程序要么全部用c++写,要么先用swig 来做一层binding,我在simnow的客户群里面吐槽过很多次
- 这么多年用下来,直观的感受是 ctp非常稳定,远超预期,基于互联网的接入,只要把参数填好就会有正确结果,而那些头部大厂,一堆年包百万的码农,写出来的服务,哪怕只是内部调用每分钟都会有超时,B圈那几家更是垃圾,websocket每天都会断