Revert "[Mod]add trader api of xtp"

This reverts commit 8a2489ebf9.
This commit is contained in:
vn.py 2019-04-25 19:15:01 +08:00
parent ee4f690e26
commit 1aa3b53726

View File

@ -9,9 +9,6 @@ from vnpy.api.xtp.vnxtp import (
XTPSpecificTickerStruct, XTPSpecificTickerStruct,
XTPTickByTickStruct, XTPTickByTickStruct,
XTPTickerPriceInfo, XTPTickerPriceInfo,
XTPQueryOrderReq,
XTPQueryTraderReq,
XTPOrderInsertInfo,
XTP_EXCHANGE_TYPE, XTP_EXCHANGE_TYPE,
XTP_LOG_LEVEL, XTP_LOG_LEVEL,
XTP_PROTOCOL_TYPE, XTP_PROTOCOL_TYPE,
@ -21,17 +18,11 @@ from vnpy.api.xtp.vnxtp import (
XTP_TICKER_TYPE_BOND, XTP_TICKER_TYPE_BOND,
XTP_TICKER_TYPE_OPTION, XTP_TICKER_TYPE_OPTION,
XTP_PROTOCOL_TCP, XTP_PROTOCOL_TCP,
XTP_PROTOCOL_UDP, XTP_PROTOCOL_UDP
XTP_TERT_RESTART,
XTP_SIDE_BUY,
XTP_SIDE_SELL,
XTP_PRICE_LIMIT,
XTP_PRICE_BEST5_OR_CANCEL,
XTP_BUSINESS_TYPE_CASH
) )
from vnpy.event import EventEngine from vnpy.event import EventEngine
from vnpy.trader.constant import Exchange, Product, Direction, OrderType from vnpy.trader.constant import Exchange, Product
from vnpy.trader.gateway import BaseGateway from vnpy.trader.gateway import BaseGateway
from vnpy.trader.object import (CancelRequest, OrderRequest, SubscribeRequest, from vnpy.trader.object import (CancelRequest, OrderRequest, SubscribeRequest,
TickData, ContractData, OrderData, TradeData, TickData, ContractData, OrderData, TradeData,
@ -54,18 +45,6 @@ PRODUCT_XTP2VT = {
XTP_TICKER_TYPE_OPTION: Product.OPTION XTP_TICKER_TYPE_OPTION: Product.OPTION
} }
DIRECTION_VT2XTP = {
Direction.LONG: XTP_SIDE_BUY,
Direction.SHORT: XTP_SIDE_SELL
}
DIRECTION_XTP2VT = {v: k for k, v in DIRECTION_VT2XTP.items()}
ORDERTYPE_VT2XTP = {
OrderType.LIMIT: XTP_PRICE_LIMIT,
OrderType.MARKET: XTP_PRICE_BEST5_OR_CANCEL
}
ORDERTYPE_XTP2VT = {v: k for k, v in ORDERTYPE_VT2XTP.items()}
symbol_name_map = {} symbol_name_map = {}
@ -88,7 +67,6 @@ class XtpGateway(BaseGateway):
super().__init__(event_engine, "XTP") super().__init__(event_engine, "XTP")
self.quote_api = XtpQuoteApi(self) self.quote_api = XtpQuoteApi(self)
self.trader_api = XtpTraderApi(self)
def connect(self, setting: dict): def connect(self, setting: dict):
"""""" """"""
@ -97,47 +75,38 @@ class XtpGateway(BaseGateway):
client_id = setting['客户号'] client_id = setting['客户号']
quote_ip = setting['行情地址'] quote_ip = setting['行情地址']
quote_port = setting['行情端口'] quote_port = setting['行情端口']
trader_ip = setting['交易地址'] trade_ip = setting['交易地址']
trader_port = setting['交易端口'] trade_port = setting['交易端口']
quote_protocol = setting["行情协议"] quote_protocol = setting["行情协议"]
self.quote_api.connect(userid, password, client_id, self.quote_api.connect(userid, password, client_id,
quote_ip, quote_port, quote_protocol) quote_ip, quote_port, quote_protocol)
self.trader_api.connect(userid, password, client_id,
trader_ip, trader_port)
def close(self): def close(self):
"""""" """"""
self.quote_api.close() pass
self.trader_api.close()
def subscribe(self, req: SubscribeRequest): def subscribe(self, req: SubscribeRequest):
"""""" """"""
self.quote_api.subscrbie(req) self.quote_api.subscrbie(req)
def send_order(self, req: OrderRequest) -> str: def send_order(self, req: OrderRequest) -> str:
"""""" pass
return self.trader_api.send_order(req)
def cancel_order(self, req: CancelRequest): def cancel_order(self, req: CancelRequest):
"""""" pass
self.trader_api.cancel_order(req)
def query_account(self): def query_account(self):
"""""" pass
self.trader_api.query_account()
def query_position(self): def query_position(self):
"""""" pass
self.trader_api.query_position()
class XtpQuoteApi(API.QuoteSpi): class XtpQuoteApi(API.QuoteSpi):
def __init__(self, gateway: BaseGateway): def __init__(self, gateway: BaseGateway):
"""""" """"""
super().__init__()
self.gateway = gateway self.gateway = gateway
self.gateway_name = gateway.gateway_name self.gateway_name = gateway.gateway_name
@ -197,17 +166,12 @@ class XtpQuoteApi(API.QuoteSpi):
if not ret: if not ret:
msg = "行情服务器登录成功" msg = "行情服务器登录成功"
self.query_contract() self.query_contract()
else: else:
msg = f"行情服务器登录失败,原因:{ret}" msg = f"行情服务器登录失败,原因:{ret}"
self.gateway.write_log(msg) self.gateway.write_log(msg)
def close(self):
""""""
if self.api:
self.api.RegisterSpi(None)
self.api.Release()
def subscrbie(self, req: SubscribeRequest): def subscrbie(self, req: SubscribeRequest):
"""""" """"""
xtp_exchange = EXCHANGE_VT2XTP.get(req.exchange, "") xtp_exchange = EXCHANGE_VT2XTP.get(req.exchange, "")
@ -350,22 +314,23 @@ class XtpQuoteApi(API.QuoteSpi):
def OnQueryAllTickers(self, ticker_info: XTPQuoteStaticInfo, error_info: XTPRspInfoStruct, def OnQueryAllTickers(self, ticker_info: XTPQuoteStaticInfo, error_info: XTPRspInfoStruct,
is_last: bool) -> Any: is_last: bool) -> Any:
"""""" """"""
if self.check_error("查询合约", error_info): return
return # if self.check_error("查询合约", error_info):
# return
contract = ContractData( # contract = ContractData(
symbol=ticker_info.ticker, # symbol=ticker_info.ticker,
exchange=EXCHANGE_XTP2VT[ticker_info.exchange_id], # exchange=EXCHANGE_XTP2VT[ticker_info.exchange_id],
name=ticker_info.ticker_name, # name=ticker_info.ticker_name,
product=PRODUCT_XTP2VT[ticker_info.ticker_type], # product=PRODUCT_XTP2VT[ticker_info.ticker_type],
size=1, # size=1,
pricetick=ticker_info.pricetick, # pricetick=ticker_info.pricetick,
min_volume=ticker_info.buy_qty_unit, # min_volume=ticker_info.buy_qty_unit,
gateway_name=self.gateway_name # gateway_name=self.gateway_name
) # )
self.gateway.on_contract(contract) # self.gateway.on_contract(contract)
symbol_name_map[contract.vt_symbol] = contract.name # symbol_name_map[contract.vt_symbol] = contract.name
def OnQueryTickersPriceInfo(self, ticker_info: XTPTickerPriceInfo, error_info: XTPRspInfoStruct, def OnQueryTickersPriceInfo(self, ticker_info: XTPTickerPriceInfo, error_info: XTPRspInfoStruct,
is_last: bool) -> Any: is_last: bool) -> Any:
@ -401,126 +366,3 @@ class XtpQuoteApi(API.QuoteSpi):
error_info: XTPRspInfoStruct) -> Any: error_info: XTPRspInfoStruct) -> Any:
"""""" """"""
pass pass
class XtpTraderApi(API.TraderSpi):
def __init__(self, gateway: BaseGateway):
""""""
super().__init__()
self.gateway = gateway
self.gateway_name = gateway.gateway_name
self.userid = ""
self.password = ""
self.client_id = ""
self.server_ip = ""
self.server_port = ""
self.api = None
self.session_id = 0
self.reqid = 0
self.orderid = 0
def connect(
self,
userid: str,
password: str,
client_id: str,
server_ip: str,
server_port: str
):
""""""
if self.api:
return
self.userid = userid
self.password = password
self.client_id = client_id
self.server_ip = server_ip
self.server_port = server_port
# Create API object
path = str(get_folder_path(self.gateway_name.lower()))
self.api = API.TraderApi.CreateTraderApi(
self.client_id,
path,
XTP_LOG_LEVEL.XTP_LOG_LEVEL_TRACE
)
self.api.RegisterSpi(self)
self.api.SubscribePublicTopic(XTP_TERT_RESTART)
self.gateway.write_log("交易接口初始化成功")
# Login to server
self.session_id = self.api.Login(
self.server_ip,
self.server_port,
self.userid,
self.password,
XTP_PROTOCOL_TCP
)
if self.session_id:
msg = "交易服务器登录成功"
else:
reason = self.api.GetApiLastError()
msg = f"交易服务器登录失败,原因:{reason}"
self.gateway.write_log(msg)
def close(self):
""""""
if self.api:
self.api.RegisterSpi(None)
self.api.Release()
def send_order(self, req: OrderRequest) -> str:
""""""
self.orderid += 1
xtp_req = XTPOrderInsertInfo()
xtp_req.ticker = req.symbol
xtp_req.market = EXCHANGE_XTP2VT[req.exchange]
xtp_req.price = req.price
xtp_req.quantity = req.volume
xtp_req.order_client_id = self.client_id
xtp_req.order_xtp_id = self.orderid
xtp_req.side = DIRECTION_XTP2VT.get(req.direction, "")
xtp_req.price_type = ORDERTYPE_XTP2VT.get(req.type, "")
xtp_req.business_type = XTP_BUSINESS_TYPE_CASH
self.api.InsertOrder(xtp_req, self.session_id)
order = req.create_order_data(str(self.orderid))
self.gateway.on_order(order)
return order.vt_orderid
def cancel_order(self, req: CancelRequest):
""""""
self.api.CancelOrder(req.orderid, self.session_id)
def query_account(self):
""""""
self.reqid += 1
self.api.QueryAsset(self.session_id, self.reqid)
def query_position(self):
""""""
self.reqid += 1
self.api.QueryPosition("", self.session_id, self.reqid)
def query_order(self):
""""""
self.reqid += 1
self.api.QueryOrders(XTPQueryOrderReq(), self.session_id, self.reqid)
def query_trade(self):
""""""
self.reqid += 1
self.api.QueryTrades(XTPQueryTraderReq(), self.session_id, self.reqid)