[Add] query_history function for OkexfGateway

This commit is contained in:
vn.py 2019-07-16 16:15:07 +08:00
parent 49f0af6889
commit ecabe203c7
2 changed files with 92 additions and 9 deletions

View File

@ -4,21 +4,21 @@ from vnpy.event import EventEngine
from vnpy.trader.engine import MainEngine from vnpy.trader.engine import MainEngine
from vnpy.trader.ui import MainWindow, create_qapp from vnpy.trader.ui import MainWindow, create_qapp
from vnpy.gateway.binance import BinanceGateway # from vnpy.gateway.binance import BinanceGateway
# from vnpy.gateway.bitmex import BitmexGateway # from vnpy.gateway.bitmex import BitmexGateway
# from vnpy.gateway.futu import FutuGateway # from vnpy.gateway.futu import FutuGateway
# from vnpy.gateway.ib import IbGateway # from vnpy.gateway.ib import IbGateway
# from vnpy.gateway.ctp import CtpGateway # from vnpy.gateway.ctp import CtpGateway
# from vnpy.gateway.ctptest import CtptestGateway # from vnpy.gateway.ctptest import CtptestGateway
from vnpy.gateway.mini import MiniGateway # from vnpy.gateway.mini import MiniGateway
# from vnpy.gateway.femas import FemasGateway # from vnpy.gateway.femas import FemasGateway
# from vnpy.gateway.tiger import TigerGateway # from vnpy.gateway.tiger import TigerGateway
# from vnpy.gateway.oes import OesGateway # from vnpy.gateway.oes import OesGateway
# from vnpy.gateway.okex import OkexGateway from vnpy.gateway.okex import OkexGateway
# from vnpy.gateway.huobi import HuobiGateway # from vnpy.gateway.huobi import HuobiGateway
# from vnpy.gateway.bitfinex import BitfinexGateway # from vnpy.gateway.bitfinex import BitfinexGateway
# from vnpy.gateway.onetoken import OnetokenGateway # from vnpy.gateway.onetoken import OnetokenGateway
# from vnpy.gateway.okexf import OkexfGateway from vnpy.gateway.okexf import OkexfGateway
# from vnpy.gateway.xtp import XtpGateway # from vnpy.gateway.xtp import XtpGateway
# from vnpy.gateway.hbdm import HbdmGateway # from vnpy.gateway.hbdm import HbdmGateway
# from vnpy.gateway.tap import TapGateway # from vnpy.gateway.tap import TapGateway
@ -43,21 +43,21 @@ def main():
main_engine = MainEngine(event_engine) main_engine = MainEngine(event_engine)
main_engine.add_gateway(BinanceGateway) # main_engine.add_gateway(BinanceGateway)
# main_engine.add_gateway(CtpGateway) # main_engine.add_gateway(CtpGateway)
# main_engine.add_gateway(CtptestGateway) # main_engine.add_gateway(CtptestGateway)
main_engine.add_gateway(MiniGateway) # main_engine.add_gateway(MiniGateway)
# main_engine.add_gateway(FemasGateway) # main_engine.add_gateway(FemasGateway)
# main_engine.add_gateway(IbGateway) # main_engine.add_gateway(IbGateway)
# main_engine.add_gateway(FutuGateway) # main_engine.add_gateway(FutuGateway)
# main_engine.add_gateway(BitmexGateway) # main_engine.add_gateway(BitmexGateway)
# main_engine.add_gateway(TigerGateway) # main_engine.add_gateway(TigerGateway)
# main_engine.add_gateway(OesGateway) # main_engine.add_gateway(OesGateway)
# main_engine.add_gateway(OkexGateway) main_engine.add_gateway(OkexGateway)
# main_engine.add_gateway(HuobiGateway) # main_engine.add_gateway(HuobiGateway)
# main_engine.add_gateway(BitfinexGateway) # main_engine.add_gateway(BitfinexGateway)
# main_engine.add_gateway(OnetokenGateway) # main_engine.add_gateway(OnetokenGateway)
# main_engine.add_gateway(OkexfGateway) main_engine.add_gateway(OkexfGateway)
# main_engine.add_gateway(HbdmGateway) # main_engine.add_gateway(HbdmGateway)
# main_engine.add_gateway(XtpGateway) # main_engine.add_gateway(XtpGateway)
# main_engine.add_gateway(TapGateway) # main_engine.add_gateway(TapGateway)

View File

@ -25,6 +25,7 @@ from vnpy.trader.constant import (
Product, Product,
Status, Status,
Offset, Offset,
Interval
) )
from vnpy.trader.gateway import BaseGateway from vnpy.trader.gateway import BaseGateway
from vnpy.trader.object import ( from vnpy.trader.object import (
@ -33,10 +34,12 @@ from vnpy.trader.object import (
TradeData, TradeData,
AccountData, AccountData,
ContractData, ContractData,
PositionData,
BarData,
OrderRequest, OrderRequest,
CancelRequest, CancelRequest,
SubscribeRequest, SubscribeRequest,
PositionData, HistoryRequest
) )
REST_HOST = "https://www.okex.com" REST_HOST = "https://www.okex.com"
WEBSOCKET_HOST = "wss://real.okex.com:10442/ws/v3" WEBSOCKET_HOST = "wss://real.okex.com:10442/ws/v3"
@ -61,6 +64,19 @@ TYPE_OKEXF2VT = {
} }
TYPE_VT2OKEXF = {v: k for k, v in TYPE_OKEXF2VT.items()} TYPE_VT2OKEXF = {v: k for k, v in TYPE_OKEXF2VT.items()}
INTERVAL_VT2OKEXF = {
Interval.MINUTE: "60",
Interval.HOUR: "3600",
Interval.DAILY: "86400",
}
TIMEDELTA_MAP = {
Interval.MINUTE: timedelta(minutes=1),
Interval.HOUR: timedelta(hours=1),
Interval.DAILY: timedelta(days=1),
}
instruments = set() instruments = set()
currencies = set() currencies = set()
@ -130,6 +146,10 @@ class OkexfGateway(BaseGateway):
"""""" """"""
pass pass
def query_history(self, req: HistoryRequest):
""""""
return self.rest_api.query_history(req)
def close(self): def close(self):
"""""" """"""
self.rest_api.stop() self.rest_api.stop()
@ -337,6 +357,7 @@ class OkexfRestApi(RestClient):
product=Product.FUTURES, product=Product.FUTURES,
size=int(instrument_data["trade_increment"]), size=int(instrument_data["trade_increment"]),
pricetick=float(instrument_data["tick_size"]), pricetick=float(instrument_data["tick_size"]),
history_data=True,
gateway_name=self.gateway_name, gateway_name=self.gateway_name,
) )
self.gateway.on_contract(contract) self.gateway.on_contract(contract)
@ -510,6 +531,68 @@ class OkexfRestApi(RestClient):
self.exception_detail(exception_type, exception_value, tb, request) self.exception_detail(exception_type, exception_value, tb, request)
) )
def query_history(self, req: HistoryRequest):
""""""
buf = {}
end_time = None
for i in range(10):
path = f"/api/futures/v3/instruments/{req.symbol}/candles"
# Create query params
params = {}
if end_time:
params["end"] = end_time
# Get response from server
resp = self.request(
"GET",
path,
params=params
)
# Break if request failed with other status code
if resp.status_code // 100 != 2:
msg = f"获取历史数据失败,状态码:{resp.status_code},信息:{resp.text}"
self.gateway.write_log(msg)
break
else:
data = resp.json()
if not data:
msg = f"获取历史数据为空"
break
for l in data:
ts, o, h, l, c, v, _ = l
dt = datetime.strptime(ts, "%Y-%m-%dT%H:%M:%S.%fZ")
bar = BarData(
symbol=req.symbol,
exchange=req.exchange,
datetime=dt,
interval=req.interval,
volume=float(v),
open_price=float(o),
high_price=float(h),
low_price=float(l),
close_price=float(c),
gateway_name=self.gateway_name
)
buf[bar.datetime] = bar
begin = data[-1][0]
end = data[0][0]
msg = f"获取历史数据成功,{req.symbol} - {req.interval.value}{begin} - {end}"
self.gateway.write_log(msg)
# Update start time
end_time = begin
index = list(buf.keys())
index.sort()
history = [buf[i] for i in index]
return history
class OkexfWebsocketApi(WebsocketClient): class OkexfWebsocketApi(WebsocketClient):
"""""" """"""