嗯嗯,漏了对乘数正负的判断
查看 大佳老师以及网上资料 ,多是
# 叫卖价差=leg1.askPrice1 - leg2.bidPrice1,volume为两者最小
arbTick.askPrice1 = leg1AskPrice1 - leg2Tick.bidPrice1
arbTick.askVolume1 = min(leg1AskVolume1, leg2Tick.bidVolume1)
# 叫买价差=leg1.bidPrice1 - leg2.askPrice1,volume为两者最小
arbTick.bidPrice1 = leg1BidPrice1 - leg2Tick.askPrice1
arbTick.bidVolume1 = min(leg1BidVolume1, leg2Tick.askVolume1)
月总,spread_trading中def load_tick_data(spread: SpreadData, start: datetime, end: datetime):
"""
合成价差tick数据
"""
"""spread_tick数据redis序列化存取"""
filename = f"{spread.name}{start.date()}_{end.date()}_tick"
redis_data = REDIS_CLIENT.hget(file_name, file_name)
if redis_data:
spread_ticks = pickle.loads(zlib.decompress(redis_data))
return spread_ticks
leg_ticks: Dict[str, Dict] = {}
min_volume = spread.min_volume
for vt_symbol in spread.legs.keys():
symbol, exchange = extract_vt_symbol(vt_symbol)
tick_data: List[TickData] = database_manager.load_tick_data(
symbol, exchange,start, end)
ticks: Dict[datetime, TickData] = {tick.datetime: tick for tick in tick_data}
leg_ticks[vt_symbol] = ticks
# Calculate spread tick data
spread_ticks: List[TickData] = []
for dt in ticks.keys():
spread_bid_price = 0
spread_bid_volume = 0
spread_ask_price = 0
spread_ask_volume = 0
spread_volume = 0
spread_last_price = 0
spread_available = True
for leg in spread.legs.values():
leg_tick = leg_ticks[leg.vt_symbol].get(dt, None)
if leg_tick:
price_multiplier = spread.price_multipliers[leg.vt_symbol]
trading_multiplier = spread.trading_multipliers[leg.vt_symbol]
spread_bid_price += price_multiplier * leg_tick.bid_price_1
spread_ask_price += price_multiplier * leg_tick.ask_price_1
spread_last_price = (spread_bid_price + spread_ask_price) / 2
这里的 spread_bid_price += price_multiplier leg_tick.bid_price_1
spread_ask_price += price_multiplier leg_tick.ask_price_1
和下方的
spread_bid_volume = min(spread_bid_volume, adjusted_bid_volume)
spread_ask_volume = min(spread_ask_volume, adjusted_ask_volume)
spread_volume = min(spread_volume, adjusted_volume)
貌似逻辑错误,
按个人理解,价差ask=主动腿的 ask-被动腿的 bid 价差bid=主动腿的 bid-被动腿的ask 才算完成对冲
你的写法是,价差ask=主动腿的 ask-被动腿的 ask 价差bid=主动腿的 bid-被动腿的bid
学习了,感恩群主与月总无私的开源精神
但是 修改这几个地方 选择交易所为IBCFD,111987412订阅合约 不成功
返回:
ERROR 1 200 No security definition has been found for the request
ERROR 2 200 No security definition has been found for the request
IB因为,交易所太多了,所以陈老师在设计的时候,并没有全部把 Exchange 加入,那我们要特定的Exchange,需要怎么加入
比如指数合约 UK 100
在IB中 对应的 IB 代码: IBGB100 Exchange :IBCFD(VNPY没有) Conid:111987412
在gateway的代码中更改
EXCHANGE_VT2IB = {
Exchange.SMART: "SMART",
Exchange.NYMEX: "NYMEX",
Exchange.GLOBEX: "GLOBEX",
Exchange.IDEALPRO: "IDEALPRO",
Exchange.CME: "CME",
Exchange.ICE: "ICE",
Exchange.SEHK: "SEHK",
Exchange.HKFE: "HKFE",
Exchange.IBCFD: "IBCFD"
}
PRODUCT_VT2IB = {
Product.EQUITY: "STK",
Product.FOREX: "CASH",
Product.SPOT: "CMDTY",
Product.OPTION: "OPT",
Product.FUTURES: "FUT",
Product.CFD:"CFD"
}
以及 class Exchange(Enum): 中也添加 IBCFD = "IBCFD"
还是不能通过 IBCFD 交易所 订阅Conid:111987412 的UK100 合约????????
麻烦指教下,还需要改哪里???
运行 vnpy 文件夹下的 fxcm包 中的 test.py 测试 福汇接口的 连接 出错
E:\ProgramData\VNConda\python.exe G:/Python/vnpy-1.9.2-LTS/vnpy/api/fxcm/test.py
api created
Traceback (most recent call last):
File "G:/Python/vnpy-1.9.2-LTS/vnpy/api/fxcm/test.py", line 28, in <module>
api.subscribeModel('Summary')
File "G:\Python\vnpy-1.9.2-LTS\vnpy\api\fxcm\vnfxcm.py", line 206, in subscribeModel
self.sio.on(model, self.processModelUpdate)
AttributeError: 'NoneType' object has no attribute 'on'
Exception in thread Thread-1:
Traceback (most recent call last):
File "E:\ProgramData\VNConda\lib\threading.py", line 801, in bootstrap_inner
self.run()
File "E:\ProgramData\VNConda\lib\threading.py", line 754, in run
self.target(*self.args, **self.kwargs)
File "G:\Python\vnpy-1.9.2-LTS\vnpy\api\fxcm\vnfxcm.py", line 109, in runReq
self.processReq(d)
File "G:\Python\vnpy-1.9.2-LTS\vnpy\api\fxcm\vnfxcm.py", line 156, in processReq
resp = requests.post(url, headers=self.headers, data=params, proxies=proxy)
File "E:\ProgramData\VNConda\lib\site-packages\requests\api.py", line 116, in post
return request('post', url, data=data, json=json, kwargs)
File "E:\ProgramData\VNConda\lib\site-packages\requests\api.py", line 60, in request
return session.request(method=method, url=url, kwargs)
File "E:\ProgramData\VNConda\lib\site-packages\requests\sessions.py", line 533, in request
resp = self.send(prep, send_kwargs)
File "E:\ProgramData\VNConda\lib\site-packages\requests\sessions.py", line 646, in send
r = adapter.send(request, kwargs)
File "E:\ProgramData\VNConda\lib\site-packages\requests\adapters.py", line 510, in send
raise ProxyError(e, request=request)
ProxyError: HTTPSConnectionPool(host='api-demo.fxcm.com', port=443): Max retries exceeded with url: /trading/subscribe (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x050737D0>: Failed to establish a new connection: [Errno 10061] ',)))