量化投研之如何获取所需的数据?

数据是决策和分析的基础,数据的速度、完整性非常重要。

掘金量化提供两大类数据获取方式:订阅数据获取实时数据、接口直通获取历史数据。

下面是两个方式各自的步骤介绍。

获取数据

1. 通过订阅获取高频行情数据

步骤

1、设置初始化函数: init, 使用 subscribe 函数进行数据订阅;

2、实现一个函数: on_bar, 来根据数据推送进行逻辑处理;

3、执行策略。

描述

预先订阅所需数据,在使用时,用对应的事件函数接收数据,数据发生更新时返回,并能够返回指定格式的时间序列滑窗数据。如:

# 第一步:订阅函数(参数规格)
subscribe(标的列表,数据频率,数据序列长度);

# 第二步:接收函数标识(全局变量,指定数据返回)
On_event (全局变量,指定数据集);
    print (指定数据集)
    print (全局变量)

示例

# coding=utf-8
from __future__ import print_function, absolute_import
from gm.api import *


# 订阅平安银行10个长度1分钟的bar数据,然后求收盘价均值
# 设置初始化函数, 通过订阅将需要的数据申明
def init(context):
    # 进行数据订阅
    subscribe(symbols='SZSE.000001', frequency='60s', count=10)


# 通过on_bar函数接收bar数据事件,并在该函数中求均值
def on_bar(context,bar):
    # 打印当前获取的bar信息
    print(bars)

    # context.data提取缓存的数据滑窗, 可用于计算指标
    # 注意:context.data里的count要小于或等于subscribe里的count
    data = context.data(symbols='SZSE.000001', frequency='60s', count=10, fields='close'))
    print(data)

if __name__ == '__main__':
    '''
    strategy_id策略ID,由系统生成
    filename文件名,请与本文件名保持一致
    mode实时模式:MODE_LIVE回测模式:MODE_BACKTEST
    token绑定计算机的ID,可在系统设置-密钥管理中生成
    backtest_start_time回测开始时间
    backtest_end_time回测结束时间
    backtest_adjust股票复权方式不复权:ADJUST_NONE前复权:ADJUST_PREV后复权:ADJUST_POST
    backtest_initial_cash回测初始资金
    backtest_commission_ratio回测佣金比例
    backtest_slippage_ratio回测滑点比例
    '''
    run(strategy_id='strategy_id',
        filename='main.py',
        mode=MODE_BACKTEST,
        token='token_id',
        backtest_start_time='2020-04-01 09:00:00',
        backtest_end_time='2020-05-31 15:00:00',
        backtest_adjust=ADJUST_NONE,
        backtest_initial_cash=10000000,
        backtest_commission_ratio=0.0001,
        backtest_slippage_ratio=0.0001)

结果保存

订阅后的数据滑窗储存在 context.data 中,提取数据需要调用 context.data()接口,可以在自定义函数 algo()中调取或是在 on_xxx()事件驱动函数中调取,调取格式为:

data = context.data(标的,频率,滑窗大小,字段)


2. 通过接口获取数据

步骤

1、set_token 设置用户 token, 如果 token 不正确, 函数调用会抛出异常;

2、调用数据查询函数, 直接进行数据查询。

描述

通过接口返回值获取数据,数据仅返回一次,如:

# 数据返回=请求函数(参数规格)

# 查询历史行情数据:获取指定时间段内的历史数据
history(标的,频率,开始时间,结束时间,是否复权)

# 查询基本面数据类:获取指定时间段内的历史数据
get_fundamentals(表名,字段名,标的,开始日期,结束日期)

# 查询成分股:获取指数成分股
get_constituents(指数代码)

# 查询业务数据:获取交易日期列表
get_trading_dates(交易所,开始时间,结束时间)

示例

# coding=utf-8
from __future__ import print_function, absolute_import
from gm.api import *


# 掘金终端需要打开,接口取数是通过网络请求的方式
# 设置token,可在用户-密钥管理里查看获取已有token ID
set_token('your token_id')


# 查询行情快照
current_data = current(symbols='SZSE.000001')


# 查询历史行情数据,并以结构方式返回
history_data = history(symbol='SHSE.000300', frequency='1d', start_time='2010-07-28', end_time='2017-07-30', df=True)


# 查询财务数据,在股票交易衍生表中查询几个字段的值
get_fundamentals(table='trading_derivative_indicator', symbols='SHSE.600000, SZSE.000001', start_date='2017-01-01', end_date='2017-01-01', fields='TCLOSE,PETTMNPAAEI')

补充:使用 Jupyter Notebook 提取数据做研究

说明

jupyter notebook 是 Anaconda 集成的工具包,安装了 anaconda 后,打开 jupyter notebook 获取数据。

开始前需要先确认以下三点:

  • 掘金终端需要打开

  • jupyter notebook 的 Python 解析器已安装 gm 包(前面文档有介绍怎么下载 SDK)

  • 已设置 token ID

步骤

1、初始化设置,获取数据的必要代码

from __future__ import print_function, absolute_import, unicode_literals
from gm.api import *
# 终端开启 设置token
set_token('your token')

2、设置完成,提取数据 。

猜你喜欢

转载自blog.csdn.net/weixin_42219751/article/details/132214682