Merge branch 'dev' into pr/1
This commit is contained in:
commit
d08274640c
@ -21,79 +21,27 @@ CTA策略模块主要由7部分构成,如下图:
|
|||||||
## 历史数据
|
## 历史数据
|
||||||
|
|
||||||
### 回测历史数据
|
### 回测历史数据
|
||||||
回测所需要的历史数据可通过运行getdata.py文件进行下载。该文件处于根目录下tests\backtesting文件夹内。
|
在开始策略回测之前,必须保证数据库内有充足的历史数据。故vnpy提供了历史数据一键下载的功能。
|
||||||
下载历史数据的原理是调用RQData的get_price()函数把数据下载到内存里面;再通过generate_bar_from_row()函数,以固定格式把数据从内存载入到硬盘数据库中。
|
下载数据功能主要是基于RQData的get_price()函数实现的。
|
||||||
|
|
||||||
下面介绍具体流程:
|
|
||||||
|
|
||||||
- 填写RQData的账号密码,初始化RQData
|
|
||||||
```
|
```
|
||||||
import rqdatac as rq
|
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,
|
||||||
USERNAME = ""
|
market='cn'
|
||||||
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)
|
|
||||||
)
|
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
在使用前要保证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内实现。
|
在实盘中,RQData通过实时载入数据进行策略的初始化。该功能主要在CTA实盘引擎engine.py内实现。
|
||||||
|
@ -22,6 +22,7 @@ python run.py
|
|||||||
|
|
||||||
## 连接接口
|
## 连接接口
|
||||||
### simnow仿真
|
### simnow仿真
|
||||||
|
### simnow
|
||||||
以SinNow仿真交易账号登陆CTP接口为例:点击菜单栏的“系统”->“连接CTP”后,弹出如上图所示CTP接口的配置对话框,输入以下内容后即可登录:
|
以SinNow仿真交易账号登陆CTP接口为例:点击菜单栏的“系统”->“连接CTP”后,弹出如上图所示CTP接口的配置对话框,输入以下内容后即可登录:
|
||||||
- 用户名username:111111 (6位纯数字账号)
|
- 用户名username:111111 (6位纯数字账号)
|
||||||
- 密码password:1111111 (需要修改一次密码用于盘后测试)
|
- 密码password:1111111 (需要修改一次密码用于盘后测试)
|
||||||
@ -44,6 +45,17 @@ python run.py
|
|||||||
- authcode(授权码):0D6V7N1CIBWUT1CT
|
- authcode(授权码):0D6V7N1CIBWUT1CT
|
||||||
#### 实盘用户
|
#### 实盘用户
|
||||||
|
|
||||||
|
### 中信期货(穿透式最新教程)
|
||||||
|
####仿真
|
||||||
|
以中信为例,如果完全是以仿真为目的,则不用向期货公司提交任何穿透式申请表,直接在期货公司官网注册一个仿真账号,使用期货公司提供的仿真环境即可,在连接时,必须import的是ctp(6.3.15版本),不可以是ctptest(6.3.13版本)
|
||||||
|
- 用户名username:[你的账户]
|
||||||
|
- 密码password:[你的密码] (最好修改一下密码)
|
||||||
|
- 经纪商编号brokerid:66666 (中信的)
|
||||||
|
- 交易服务器地址td_address:tcp://ctpfz1-front1.citicsf.com:51305
|
||||||
|
- 行情服务器地址md_address:tcp://ctpfz1-front1.citicsf.com:51313
|
||||||
|
- auth_code(授权码): 0D6V7N1CIBWUT1CT
|
||||||
|
- appid: client_xxx_1.0.1(注意,必须写xxx,仿真不允许自定义)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## 订阅行情
|
## 订阅行情
|
||||||
|
Loading…
Reference in New Issue
Block a user