Merge branch 'dev' of https://github.com/vnpy/vnpy into dev

This commit is contained in:
vn.py 2019-07-02 23:00:09 +08:00
commit 138b118a3d
2 changed files with 28 additions and 68 deletions

View File

@ -21,79 +21,27 @@ CTA策略模块主要由7部分构成如下图
## 历史数据
### 回测历史数据
回测所需要的历史数据可通过运行getdata.py文件进行下载。该文件处于根目录下tests\backtesting文件夹内。
下载历史数据的原理是调用RQData的get_price()函数把数据下载到内存里面再通过generate_bar_from_row()函数,以固定格式把数据从内存载入到硬盘数据库中。
下面介绍具体流程:
- 填写RQData的账号密码初始化RQData
在开始策略回测之前必须保证数据库内有充足的历史数据。故vnpy提供了历史数据一键下载的功能。
下载数据功能主要是基于RQData的get_price()函数实现的。
```
import rqdatac as rq
USERNAME = ""
PASSWORD = ""
FIELDS = ["open", "high", "low", "close", "volume"]
rq.init(USERNAME, PASSWORD, ("rqdatad-pro.ricequant.com", 16011))
```
 
- 定义数据插入格式。需要插入的数据包括合约代码、交易所、K线周期、开盘价、最高价、最低价、收盘价、成交量、数据库名称、vt_symbol注意K线周期可以是"1m"、"1h"、"d"、"w"。to_pydatetime()用于时间转换成datetime格式
```
def generate_bar_from_row(row, symbol, exchange):
""""""
bar = DbBarData()
bar.symbol = symbol
bar.exchange = exchange
bar.interval = "1m"
bar.open_price = row["open"]
bar.high_price = row["high"]
bar.low_price = row["low"]
bar.close_price = row["close"]
bar.volume = row["volume"]
bar.datetime = row.name.to_pydatetime()
bar.gateway_name = "DB"
bar.vt_symbol = f"{symbol}.{exchange}"
return bar
```
 
- 定义数据下载函数。主要调用RQData的get_price()获取指定合约或合约列表的历史数据包含起止日期日线或分钟线。目前仅支持中国市场的股票、期货、ETF和上金所现货的行情数据如黄金、铂金和白银产品。注意起始日期默认是2013-01-04结束日期默认是2014-01-04
```
def download_minute_bar(vt_symbol):
"""下载某一合约的分钟线数据"""
print(f"开始下载合约数据{vt_symbol}")
symbol, exchange = vt_symbol.split(".")
start = time()
df = rq.get_price(symbol, start_date="2018-01-01", end_date="2019-01-01", frequency="1m", fields=FIELDS)
with DB.atomic():
for ix, row in df.iterrows():
print(row.name)
bar = generate_bar_from_row(row, symbol, exchange)
DbBarData.replace(bar.__data__).execute()
end = time()
cost = (end - start) * 1000
print(
"合约%s的分钟K线数据下载完成%s - %s耗时%s毫秒"
% (symbol, df.index[0], df.index[-1], cost)
get_price(
order_book_ids, start_date='2013-01-04', end_date='2014-01-04',
frequency='1d', fields=None, adjust_type='pre', skip_suspended =False,
market='cn'
)
```
 
在使用前要保证RQData初始化完毕然后填写以下4个字段信息
- 本地代码:格式为合约品种+交易所如IF88.CFFEX、rb88.SHFE然后在底层通过RqdataClient的to_rq_symbol()函数转换成符合RQData格式对应RQData中get_price()函数的order_book_ids字段。
- K线周期可以填1m、60m、1d对应get_price()函数的frequency字段。
- 开始日期格式为yy/mm/dd如2017/4/21对应get_price()函数的start_date字段。点击窗口右侧箭头按钮可改变日期大小
- 结束日期格式为yy/mm/dd如2019/4/22对应get_price()函数的end_date字段。点击窗口右侧箭头按钮可改变日期大小
填写完字段信息后,点击下方“下载数据”按钮启动下载程序,下载成功如图所示。
![](https://vnpy-community.oss-cn-shanghai.aliyuncs.com/forum_experience/yazhang/cta_backtester/data_loader.png)
### 实盘历史数据
在实盘中RQData通过实时载入数据进行策略的初始化。该功能主要在CTA实盘引擎engine.py内实现。

View File

@ -22,6 +22,7 @@ python run.py
## 连接接口
### simnow仿真
### simnow
以SinNow仿真交易账号登陆CTP接口为例点击菜单栏的“系统”->“连接CTP”后弹出如上图所示CTP接口的配置对话框输入以下内容后即可登录
- 用户名username111111 6位纯数字账号
- 密码password1111111 (需要修改一次密码用于盘后测试)
@ -44,6 +45,17 @@ python run.py
- authcode授权码0D6V7N1CIBWUT1CT
#### 实盘用户
### 中信期货(穿透式最新教程)
####仿真
以中信为例如果完全是以仿真为目的则不用向期货公司提交任何穿透式申请表直接在期货公司官网注册一个仿真账号使用期货公司提供的仿真环境即可在连接时必须import的是ctp6.3.15版本不可以是ctptest6.3.13版本)
- 用户名username[你的账户]
- 密码password[你的密码] (最好修改一下密码)
- 经纪商编号brokerid66666 (中信的)
- 交易服务器地址td_addresstcp://ctpfz1-front1.citicsf.com:51305
- 行情服务器地址md_addresstcp://ctpfz1-front1.citicsf.com:51313
- auth_code(授权码): 0D6V7N1CIBWUT1CT
- appid: client_xxx_1.0.1(注意必须写xxx仿真不允许自定义)
 
## 订阅行情