增加:非交易时间,自动断开连接功能

This commit is contained in:
msincenselee 2016-10-23 22:58:29 +08:00
parent 7858fa3fca
commit e984694753

View File

@ -16,6 +16,7 @@ from vnctpmd import MdApi
from vnctptd import TdApi from vnctptd import TdApi
from ctpDataType import * from ctpDataType import *
from vtGateway import * from vtGateway import *
from datetime import datetime
import logging import logging
@ -71,9 +72,9 @@ class CtpGateway(VtGateway):
def __init__(self, eventEngine, gatewayName='CTP'): def __init__(self, eventEngine, gatewayName='CTP'):
"""Constructor""" """Constructor"""
super(CtpGateway, self).__init__(eventEngine, gatewayName) super(CtpGateway, self).__init__(eventEngine, gatewayName)
self.mdApi = CtpMdApi(self) # 行情API self.mdApi = None # 行情API
self.tdApi = CtpTdApi(self) # 交易API self.tdApi = None # 交易API
self.mdConnected = False # 行情API连接状态登录完成后为True self.mdConnected = False # 行情API连接状态登录完成后为True
self.tdConnected = False # 交易API连接状态 self.tdConnected = False # 交易API连接状态
@ -86,7 +87,13 @@ class CtpGateway(VtGateway):
# 载入json文件 # 载入json文件
fileName = self.gatewayName + '_connect.json' fileName = self.gatewayName + '_connect.json'
fileName = os.getcwd() + '/ctpGateway/' + fileName fileName = os.getcwd() + '/ctpGateway/' + fileName
if self.mdApi is None:
self.mdApi = CtpMdApi(self) # 行情API
if self.tdApi is None:
self.tdApi = CtpTdApi(self) # 交易API
try: try:
f = file(fileName) f = file(fileName)
except IOError: except IOError:
@ -121,35 +128,48 @@ class CtpGateway(VtGateway):
#---------------------------------------------------------------------- #----------------------------------------------------------------------
def subscribe(self, subscribeReq): def subscribe(self, subscribeReq):
"""订阅行情""" """订阅行情"""
self.mdApi.subscribe(subscribeReq) if self.mdApi is not None:
self.mdApi.subscribe(subscribeReq)
#---------------------------------------------------------------------- #----------------------------------------------------------------------
def sendOrder(self, orderReq): def sendOrder(self, orderReq):
"""发单""" """发单"""
return self.tdApi.sendOrder(orderReq) if self.tdApi is not None:
return self.tdApi.sendOrder(orderReq)
#---------------------------------------------------------------------- #----------------------------------------------------------------------
def cancelOrder(self, cancelOrderReq): def cancelOrder(self, cancelOrderReq):
"""撤单""" """撤单"""
self.tdApi.cancelOrder(cancelOrderReq) if self.tdApi is not None:
self.tdApi.cancelOrder(cancelOrderReq)
#---------------------------------------------------------------------- #----------------------------------------------------------------------
def qryAccount(self): def qryAccount(self):
"""查询账户资金""" """查询账户资金"""
self.tdApi.qryAccount() if self.tdApi is not None:
self.tdApi.qryAccount()
#---------------------------------------------------------------------- #----------------------------------------------------------------------
def qryPosition(self): def qryPosition(self):
"""查询持仓""" """查询持仓"""
if self.tdApi is None:
return
self.tdApi.qryPosition() self.tdApi.qryPosition()
#---------------------------------------------------------------------- #----------------------------------------------------------------------
def close(self): def close(self):
"""关闭""" """关闭"""
if self.mdConnected: if self.mdConnected and self.mdApi is not None:
self.mdApi.close() self.mdApi.close()
if self.tdConnected: self.mdApi = None
if self.tdConnected and self.tdApi is not None:
self.tdApi.close() self.tdApi.close()
self.tdApi = None
log = VtLogData()
log.gatewayName = self.gatewayName
log.logContent = u'主动断开连接'
self.onLog(log)
#---------------------------------------------------------------------- #----------------------------------------------------------------------
def initQuery(self): def initQuery(self):
@ -329,7 +349,10 @@ class CtpMdApi(MdApi):
tick.openInterest = data['OpenInterest'] tick.openInterest = data['OpenInterest']
tick.time = '.'.join([data['UpdateTime'], str(data['UpdateMillisec']/100)]) tick.time = '.'.join([data['UpdateTime'], str(data['UpdateMillisec']/100)])
tick.date = data['TradingDay'] tick.date = data['TradingDay']
# add by Incense Lee
tick.tradingDay = data['TradingDay']
tick.openPrice = data['OpenPrice'] tick.openPrice = data['OpenPrice']
tick.highPrice = data['HighestPrice'] tick.highPrice = data['HighestPrice']
tick.lowPrice = data['LowestPrice'] tick.lowPrice = data['LowestPrice']
@ -343,6 +366,26 @@ class CtpMdApi(MdApi):
tick.bidVolume1 = data['BidVolume1'] tick.bidVolume1 = data['BidVolume1']
tick.askPrice1 = data['AskPrice1'] tick.askPrice1 = data['AskPrice1']
tick.askVolume1 = data['AskVolume1'] tick.askVolume1 = data['AskVolume1']
#tick.bidPrice2 = data['BidPrice2']
#tick.bidVolume2 = data['BidVolume2']
#tick.askPrice2 = data['AskPrice2']
#tick.askVolume2 = data['AskVolume2']
#
#tick.bidPrice3 = data['BidPrice3']
#tick.bidVolume3 = data['BidVolume3']
#tick.askPrice3= data['AskPrice3']
#tick.askVolume3 = data['AskVolume3']
#
#tick.bidPrice4 = data['BidPrice4']
#tick.bidVolume4 = data['BidVolume4']
#tick.askPrice4 = data['AskPrice4']
#tick.askVolume4 = data['AskVolume4']
#
#tick.bidPrice5 = data['BidPrice5']
#tick.bidVolume5 = data['BidVolume5']
#tick.askPrice5 = data['AskPrice5']
#tick.askVolume5 = data['AskVolume5']
self.gateway.onTick(tick) self.gateway.onTick(tick)