[Add] query_history function for OkexfGateway
This commit is contained in:
parent
49f0af6889
commit
ecabe203c7
@ -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)
|
||||||
|
@ -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):
|
||||||
""""""
|
""""""
|
||||||
|
Loading…
Reference in New Issue
Block a user