Skip to content

Commit 1c0674b

Browse files
authored
Merge branch 'dev' into dev
2 parents a3bddf8 + 68e589d commit 1c0674b

22 files changed

+108
-146
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# Python
22
*.pyc
3+
*.pyo
34
*.egg-info/
45

56
# Jupyter
@@ -33,4 +34,4 @@ _static
3334
_templates
3435

3536
# Misc
36-
.DS_Store
37+
.DS_Store

README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,8 @@ vn.py是一套基于Python的开源量化交易系统开发框架,于2015年1
108108

109109
* script_trader:脚本策略模块,针对多标的组合类交易策略设计,同时也可以直接在命令行中实现REPL指令形式的交易,不支持回测功能
110110

111+
* portfolio_manager:投资组合模块,面向各类基本面交易策略,以独立的策略子账户为基础,提供交易仓位的自动跟踪以及盈亏实时统计功能
112+
111113
* rpc_service:RPC服务模块,允许将某一VN Trader进程启动为服务端,作为统一的行情和交易路由通道,允许多客户端同时连接,实现多进程分布式系统
112114

113115
* csv_loader:CSV历史数据加载器,用于加载CSV格式文件中的历史数据到平台数据库中,用于策略的回测研究以及实盘初始化等功能,支持自定义数据表头格式
@@ -130,7 +132,7 @@ vn.py是一套基于Python的开源量化交易系统开发框架,于2015年1
130132

131133
## 环境准备
132134

133-
* 推荐使用vn.py团队为量化交易专门打造的Python发行版[VNStudio-2.0.7](https://download.vnpy.com/vnstudio-2.0.7.exe),内置了最新版的vn.py框架以及VN Station量化管理平台,无需手动安装
135+
* 推荐使用vn.py团队为量化交易专门打造的Python发行版[VNStudio-2.0.8](https://download.vnpy.com/vnstudio-2.0.8.exe),内置了最新版的vn.py框架以及VN Station量化管理平台,无需手动安装
134136
* 支持的系统版本:Windows 7以上/Windows Server 2008以上/Ubuntu 18.04 LTS
135137
* 支持的Python版本:Python 3.7 64位(**注意必须是Python 3.7 64位版本**
136138

appveyor.yml

Lines changed: 0 additions & 64 deletions
This file was deleted.

docs/index.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ vn.py项目文档
1313
data_recoder.md
1414
algo_trader.md
1515
script_trader.md
16+
spread_trading.md
1617
rpc_service.md
1718
gateway.md
1819
database.md

examples/vn_trader/run.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from vnpy.gateway.bitmex import BitmexGateway
99
# from vnpy.gateway.futu import FutuGateway
1010
# from vnpy.gateway.ib import IbGateway
11-
# from vnpy.gateway.ctp import CtpGateway
11+
from vnpy.gateway.ctp import CtpGateway
1212
# from vnpy.gateway.ctptest import CtptestGateway
1313
# from vnpy.gateway.mini import MiniGateway
1414
# from vnpy.gateway.sopt import SoptGateway
@@ -36,7 +36,7 @@
3636
# from vnpy.app.cta_strategy import CtaStrategyApp
3737
# from vnpy.app.csv_loader import CsvLoaderApp
3838
# from vnpy.app.algo_trading import AlgoTradingApp
39-
# from vnpy.app.cta_backtester import CtaBacktesterApp
39+
from vnpy.app.cta_backtester import CtaBacktesterApp
4040
# from vnpy.app.data_recorder import DataRecorderApp
4141
# from vnpy.app.risk_manager import RiskManagerApp
4242
# from vnpy.app.script_trader import ScriptTraderApp
@@ -54,7 +54,7 @@ def main():
5454
main_engine = MainEngine(event_engine)
5555

5656
# main_engine.add_gateway(BinanceGateway)
57-
# main_engine.add_gateway(CtpGateway)
57+
main_engine.add_gateway(CtpGateway)
5858
# main_engine.add_gateway(CtptestGateway)
5959
# main_engine.add_gateway(MiniGateway)
6060
# main_engine.add_gateway(SoptGateway)
@@ -83,7 +83,7 @@ def main():
8383
main_engine.add_gateway(BybitGateway)
8484

8585
# main_engine.add_app(CtaStrategyApp)
86-
# main_engine.add_app(CtaBacktesterApp)
86+
main_engine.add_app(CtaBacktesterApp)
8787
# main_engine.add_app(CsvLoaderApp)
8888
# main_engine.add_app(AlgoTradingApp)
8989
# main_engine.add_app(DataRecorderApp)

requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ pymysql
99
psycopg2
1010
mongoengine
1111
numpy
12+
pandas==0.24.2
1213
matplotlib
1314
seaborn
1415
futu-api

vnpy/app/cta_strategy/backtesting.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -895,7 +895,12 @@ def cross_stop_order(self):
895895
self.strategy.on_trade(trade)
896896

897897
def load_bar(
898-
self, vt_symbol: str, days: int, interval: Interval, callback: Callable
898+
self,
899+
vt_symbol: str,
900+
days: int,
901+
interval: Interval,
902+
callback: Callable,
903+
use_database: bool
899904
):
900905
""""""
901906
self.days = days

vnpy/app/cta_strategy/engine.py

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -514,29 +514,33 @@ def load_bar(
514514
vt_symbol: str,
515515
days: int,
516516
interval: Interval,
517-
callback: Callable[[BarData], None]
517+
callback: Callable[[BarData], None],
518+
use_database: bool
518519
):
519520
""""""
520521
symbol, exchange = extract_vt_symbol(vt_symbol)
521522
end = datetime.now()
522523
start = end - timedelta(days)
524+
bars = []
525+
526+
# Pass gateway and RQData if use_database set to True
527+
if not use_database:
528+
# Query bars from gateway if available
529+
contract = self.main_engine.get_contract(vt_symbol)
530+
531+
if contract and contract.history_data:
532+
req = HistoryRequest(
533+
symbol=symbol,
534+
exchange=exchange,
535+
interval=interval,
536+
start=start,
537+
end=end
538+
)
539+
bars = self.main_engine.query_history(req, contract.gateway_name)
523540

524-
# Query bars from gateway if available
525-
contract = self.main_engine.get_contract(vt_symbol)
526-
527-
if contract and contract.history_data:
528-
req = HistoryRequest(
529-
symbol=symbol,
530-
exchange=exchange,
531-
interval=interval,
532-
start=start,
533-
end=end
534-
)
535-
bars = self.main_engine.query_history(req, contract.gateway_name)
536-
537-
# Try to query bars from RQData, if not found, load from database.
538-
else:
539-
bars = self.query_bar_from_rq(symbol, exchange, interval, start, end)
541+
# Try to query bars from RQData, if not found, load from database.
542+
else:
543+
bars = self.query_bar_from_rq(symbol, exchange, interval, start, end)
540544

541545
if not bars:
542546
bars = database_manager.load_bar_data(

vnpy/app/cta_strategy/strategies/atr_rsi_strategy.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,7 @@ class AtrRsiStrategy(CtaTemplate):
3636

3737
def __init__(self, cta_engine, strategy_name, vt_symbol, setting):
3838
""""""
39-
super(AtrRsiStrategy, self).__init__(
40-
cta_engine, strategy_name, vt_symbol, setting
41-
)
39+
super().__init__(cta_engine, strategy_name, vt_symbol, setting)
4240
self.bg = BarGenerator(self.on_bar)
4341
self.am = ArrayManager()
4442

vnpy/app/cta_strategy/strategies/boll_channel_strategy.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,7 @@ class BollChannelStrategy(CtaTemplate):
3939

4040
def __init__(self, cta_engine, strategy_name, vt_symbol, setting):
4141
""""""
42-
super(BollChannelStrategy, self).__init__(
43-
cta_engine, strategy_name, vt_symbol, setting
44-
)
42+
super().__init__(cta_engine, strategy_name, vt_symbol, setting)
4543

4644
self.bg = BarGenerator(self.on_bar, 15, self.on_15min_bar)
4745
self.am = ArrayManager()

0 commit comments

Comments
 (0)