Merge pull request #216 from tesla1060/master
增加CTP接口的认证功能,支持部分需要程序化备案的期货公司。 非常感谢!
This commit is contained in:
commit
926d093924
@ -90,6 +90,8 @@ class CtpGateway(VtGateway):
|
||||
|
||||
self.qryEnabled = False # 是否要启动循环查询
|
||||
|
||||
self.requireAuthentication = False
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
def connect(self):
|
||||
"""连接"""
|
||||
@ -115,6 +117,14 @@ class CtpGateway(VtGateway):
|
||||
brokerID = str(setting['brokerID'])
|
||||
tdAddress = str(setting['tdAddress'])
|
||||
mdAddress = str(setting['mdAddress'])
|
||||
if 'authCode' in setting: #如果json文件提供了验证码
|
||||
authCode = str(setting['authCode'])
|
||||
userProductInfo = str(setting['userProductInfo'])
|
||||
self.tdApi.requireAuthentication = True
|
||||
else:
|
||||
authCode = None
|
||||
userProductInfo = None
|
||||
|
||||
except KeyError:
|
||||
log = VtLogData()
|
||||
log.gatewayName = self.gatewayName
|
||||
@ -124,7 +134,7 @@ class CtpGateway(VtGateway):
|
||||
|
||||
# 创建行情和交易接口对象
|
||||
self.mdApi.connect(userID, password, brokerID, mdAddress)
|
||||
self.tdApi.connect(userID, password, brokerID, tdAddress)
|
||||
self.tdApi.connect(userID, password, brokerID, tdAddress,authCode, userProductInfo)
|
||||
|
||||
# 初始化并启动查询
|
||||
self.initQuery()
|
||||
@ -446,6 +456,7 @@ class CtpTdApi(TdApi):
|
||||
|
||||
self.connectionStatus = False # 连接状态
|
||||
self.loginStatus = False # 登录状态
|
||||
self.authStatus = False
|
||||
|
||||
self.userID = EMPTY_STRING # 账号
|
||||
self.password = EMPTY_STRING # 密码
|
||||
@ -459,6 +470,8 @@ class CtpTdApi(TdApi):
|
||||
self.symbolExchangeDict = {} # 保存合约代码和交易所的印射关系
|
||||
self.symbolSizeDict = {} # 保存合约代码和合约大小的印射关系
|
||||
|
||||
self.requireAuthentication = False
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
def onFrontConnected(self):
|
||||
"""服务器连接"""
|
||||
@ -468,7 +481,9 @@ class CtpTdApi(TdApi):
|
||||
log.gatewayName = self.gatewayName
|
||||
log.logContent = u'交易服务器连接成功'
|
||||
self.gateway.onLog(log)
|
||||
|
||||
if self.requireAuthentication:
|
||||
self.authenticate()
|
||||
else:
|
||||
self.login()
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
@ -490,8 +505,13 @@ class CtpTdApi(TdApi):
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
def onRspAuthenticate(self, data, error, n, last):
|
||||
""""""
|
||||
pass
|
||||
"""验证客户端回报"""
|
||||
if error['ErrorID'] == 0:
|
||||
log = VtLogData()
|
||||
log.gatewayName = self.gatewayName
|
||||
log.logContent = u'交易服务器验证成功'
|
||||
self.gateway.onLog(log)
|
||||
self.login()
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
def onRspUserLogin(self, data, error, n, last):
|
||||
@ -1244,12 +1264,14 @@ class CtpTdApi(TdApi):
|
||||
pass
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
def connect(self, userID, password, brokerID, address):
|
||||
def connect(self, userID, password, brokerID, address, authCode, userProductInfo):
|
||||
"""初始化连接"""
|
||||
self.userID = userID # 账号
|
||||
self.password = password # 密码
|
||||
self.brokerID = brokerID # 经纪商代码
|
||||
self.address = address # 服务器地址
|
||||
self.authCode = authCode #验证码
|
||||
self.userProductInfo = userProductInfo #产品信息
|
||||
|
||||
# 如果尚未建立服务器连接,则进行连接
|
||||
if not self.connectionStatus:
|
||||
@ -1271,7 +1293,11 @@ class CtpTdApi(TdApi):
|
||||
|
||||
# 若已经连接但尚未登录,则进行登录
|
||||
else:
|
||||
if not self.loginStatus:
|
||||
if self.requireAuthentication:
|
||||
if self.authStatus:
|
||||
self.authenticate()
|
||||
else:
|
||||
if self.loginStatus:
|
||||
self.login()
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
@ -1286,6 +1312,16 @@ class CtpTdApi(TdApi):
|
||||
self.reqID += 1
|
||||
self.reqUserLogin(req, self.reqID)
|
||||
|
||||
def authenticate(self):
|
||||
if self.userID and self.brokerID and self.authCode and self.userProductInfo:
|
||||
req = {}
|
||||
req['UserID'] = self.userID
|
||||
req['BrokerID'] = self.brokerID
|
||||
req['AuthCode'] = self.authCode
|
||||
req['UserProductInfo'] = self.userProductInfo
|
||||
self.reqID +=1
|
||||
self.reqAuthenticate(req, self.reqID)
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
def qryAccount(self):
|
||||
"""查询账户"""
|
||||
|
Loading…
Reference in New Issue
Block a user