我之前练习尝试每天做日内交易的时候给风控程序加了一个功能

每天收盘后 计算账户余额,如果有盈利就转出到银行

我的风控程序是用python开发,ctp包用的是下面这个包

1
2
```shell
https://github.com/keli/ctp-python

ctp出金时间有限制,交易日早上 9:05– 下午15:30,夜盘只能入,不能出

调用的api

很简单,直调用 ReqFromFutureToBankByFuture 接口,参数如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
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 这个方法

1
2
3
req=ctp.CThostFtdcQryContractBankField()
req.BrokerID =self.broker_id
self.api.ReqQryContractBank(req, self.id())

会打印出十几家主要银行的BankID 和BankBranchID,BankBranchID基本上都是'0000’,这个查一次就够了,不会变化的

感想

  1. ctp的 接口整体就是基于c++ 虚函数的callback,业务方用起来很扭曲,导致程序要么全部用c++写,要么先用swig 来做一层binding,我在simnow的客户群里面吐槽过很多次
  2. 这么多年用下来,直观的感受是 ctp非常稳定,远超预期,基于互联网的接入,只要把参数填好就会有正确结果,而那些头部大厂,一堆年包百万的码农,写出来的服务,哪怕只是内部调用每分钟都会有超时,B圈那几家更是垃圾,websocket每天都会断