Merge pull request #2 from vnpy/dev

update dev731
This commit is contained in:
LimingFang 2019-07-31 10:07:00 +08:00 committed by GitHub
commit 01ff05a016
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 63 additions and 13 deletions

View File

@ -14,9 +14,13 @@
vn.py是一套基于Python的开源量化交易系统开发框架于2015年1月正式发布在开源社区5年持续不断的贡献下一步步成长为全功能量化交易平台目前国内外金融机构用户已经超过300家包括私募基金、证券自营和资管、期货资管和子公司、高校研究机构、自营交易公司、交易所、Token Fund等。
使用过程中有任何疑问,请查看[**vn.py项目文档**](https://www.vnpy.com/docs/cn/index.html),如果无法解决请前往[**官方社区论坛**](https://www.vnpy.com/forum/)的【提问求助】板块寻求帮助,也欢迎在【经验分享】板块分享你的使用心得!
**傻瓜式入门教程**已经在官方微信公众号[**vnpy-community**]全新上线,新手使用过程中有任何疑问看这个解决是最快的,后续会不断增加进阶经验、发布公告、活动报名等功能,请扫描下方二维码关注:
官方微信公众号:**vnpy-community**接下来将在公众号中陆续上线各种关于vn.py的使用教程欢迎关注。
<p align="center">
<img src ="https://vnpy.oss-cn-shanghai.aliyuncs.com/vnpy_qr.jpg"/>
</p>
在使用vn.py进行二次开发策略、模块等的过程中有任何疑问请查看[**vn.py项目文档**](https://www.vnpy.com/docs/cn/index.html),如果无法解决请前往[**官方社区论坛**](https://www.vnpy.com/forum/)的【提问求助】板块寻求帮助,也欢迎在【经验分享】板块分享你的使用心得!
2.0版本基于Python 3.7全新重构开发如需Python 2上的版本请点击[长期支持版本v1.9.2 LTS](https://github.com/vnpy/vnpy/tree/v1.9.2-LTS)。

View File

@ -1 +1,33 @@
# RPC服务
# RPC服务
由于全局锁GIL的存在单进程的Python程序只能利用CPU单核的算力为了突破这一限制解决方案就是多进程分布式的程序架构。但每个进程之间的数据在操作系统内默认是独立隔离的无法直接访问。RPC全称Remote-Procedure-Call中文“远程过程调用”是最常用的跨进程通讯方式之一。
## RPC服务器
### 加载模块
### 启动运行
## RPC客户端
### 加载接口
### 连接使用
## 参考样例
位于examples/server_client目录下
### 服务器进程
GUI模式
无界面模式
### 客户端进程

View File

@ -323,6 +323,11 @@ class CtaEngine(BaseEngine):
for req in req_list:
vt_orderid = self.main_engine.send_order(
req, contract.gateway_name)
# Check if sending order successful
if not vt_orderid:
continue
vt_orderids.append(vt_orderid)
self.offset_converter.update_order_request(req, vt_orderid)

View File

@ -434,7 +434,16 @@ class IbApi(EWrapper):
accountName,
)
if not contract.exchange:
if contract.exchange:
exchange = EXCHANGE_IB2VT.get(contract.exchange, None)
elif contract.primaryExchange:
exchange = EXCHANGE_IB2VT.get(contract.primaryExchange, None)
else:
exchange = Exchange.SMART # Use smart routing for default
if not exchange:
msg = f"存在不支持的交易所持仓{contract.conId} {contract.exchange} {contract.primaryExchange}"
self.gateway.write_log(msg)
return
ib_size = contract.multiplier
@ -444,7 +453,7 @@ class IbApi(EWrapper):
pos = PositionData(
symbol=contract.conId,
exchange=EXCHANGE_IB2VT.get(contract.exchange, contract.exchange),
exchange=exchange,
direction=Direction.NET,
volume=position,
price=price,

View File

@ -387,28 +387,28 @@ class OkexfRestApi(RestClient):
return
for pos_data in data["holding"][0]:
if float(pos_data["long_qty"]) > 0:
if int(pos_data["long_qty"]) > 0:
pos = PositionData(
symbol=pos_data["instrument_id"].upper(),
exchange=Exchange.OKEX,
direction=Direction.LONG,
volume=pos_data["long_qty"],
volume=int(pos_data["long_qty"]),
frozen=float(pos_data["long_qty"]) - float(pos_data["long_avail_qty"]),
price=pos_data["long_avg_cost"],
pnl=pos_data["realised_pnl"],
price=float(pos_data["long_avg_cost"]),
pnl=float(pos_data["realised_pnl"]),
gateway_name=self.gateway_name,
)
self.gateway.on_position(pos)
if float(pos_data["short_qty"]) > 0:
if int(pos_data["short_qty"]) > 0:
pos = PositionData(
symbol=pos_data["instrument_id"],
exchange=Exchange.OKEX,
direction=Direction.SHORT,
volume=pos_data["short_qty"],
volume=int(pos_data["short_qty"]),
frozen=float(pos_data["short_qty"]) - float(pos_data["short_avail_qty"]),
price=pos_data["short_avg_cost"],
pnl=pos_data["realised_pnl"],
price=float(["short_avg_cost"]),
pnl=float(["realised_pnl"]),
gateway_name=self.gateway_name,
)
self.gateway.on_position(pos)