读者寄语: 不管是您想投资美股, 还是想投资港股, 保持好自己的心态是最重要的。特别在美股、港股市场拥有一套成熟的金融市场,市场鼓励长期持有,而不是短期的投机炒作。选择一个好的公司, 耐心的等待, 做时间的朋友。如果您想咨询美股开户、港股开户相关的问题, 或者您对美股、港股感兴趣可以添加微信交流: andyhu006
主要根据老虎量化API, 实现一些量化的实例以及一些运行代码的结果分析。利用回归测试, 根据历史的下单记录计算回测的收益曲线,以及风险收益指标, 从而验证自己的投资习惯; 如果你对量化交易感兴趣 可以加微信: xiaobei060537 一起交流
主要根据老虎量化API, 实现一些量化的实例以及一些运行代码的结果分析
导读
本系列量化教程是运行 老虎证券pc 端 量化交易环境, 运行前 可以点链接注册老虎证券 使用模拟账号 进行运行量化代码, 同时可以享受美股佣金8折永久优惠!11股小米股票(价值385港币)。
策略的构成
需要实现策略对象的两个方法:initialize 和 handle_data.
initialize 主要用于设置初始化回测的一些设置,如滑点、基准等。
handle_data 用于实现策略的逻辑。
策略初始化设置
以下为策略初始化设置的相关方法, 建议在 initialize 中调用
set_benchmark 设置策略的比较基准
set_benchmark(symbol('SPY'))
基准会被用于回测结果页的曲线绘制,以及 alpha, beta 的计算。
set_slippage 设置滑点
set_slippage(slippage=0.0)
使用固定的价差作为滑点, 不考虑成交量对滑点的影响。
获取数据
行情数据
data.current 获取最新行情数
data.current(assets, fields)
用于获取当前回测日期可以看到的最新数据
参数
- assets: 单个股票对象或股票对象列表
- fields: 要获取数据的字段名称, 支持的字段包括:
- open: 开盘价,非交易时段返回 Nan
- close: 收盘价,非交易时段返回 Nan
- high:最高价,非交易时段返回 Nan
- low: 最低价,非交易时段返回 Nan
- volume:成交量,非交易时段返回 Nan
返回
- 如果传入单个 asset 和 单个 fields, 则返回一个 float 对象
- 如果传入单个 asset 和多个 fields, 则返回一个pandas.Series 对象, index 是 fields
- 若参数传入多个 assets 单个 fields, 则返回 pandas Series, index是 assets
- 若参数传入多个 assets 多个 fields, 则返回 pandas DataFrame, index 是 assets, column 是 fields
示例
>>>current = data.current(symbol('jd'),
fields=['open','close','high','low','volume','last_traded','price'])
>>>print(current)
open 53.35
close 54.36
high 54.5
low 53.29
volume 117857
data.history 获取历史行情数据#
data.history(assets, fields, bar_count, frequency)
用于获取当前回测日期前 bar_count 个交易日的 k 线数据。
参数
- assets: 单个股票对象或股票对象列表
- fields: 要获取数据的字段名称, 支持的字段包括:
- open: 开盘价
- close: 收盘价
- high: 最高价
- low: 最低价
- volume: 成交量
- bar_count: 返回结果中 Bar 的数量。 一个Bar 就是一根K线
- frequency: 返回 Bar 的频率。 可以使用的值包括”1d”和”1m”, 分别表示日K 和分钟K。
返回
- 如果传入单个 asset 和 单个 field,则返回一个pandas.Series 对象, index 是日期索引,value 是 field 对应的值
- 如果传入单个asset 和多个 fields,则返回一个pandas.DataFrame 对象, index 是日期索引,column 是 fields 字段
- 若参数传入多个 assets 单个 field, 则返回 pandas.DataFrame, index 是日期索引, column 是 asset, value 是 field 对应的值
- 若参数传入多个 assets 多个 fields, 则返回 pandas.Panel
示例
#参数传入 单个 asset 单个 fields, 返回Series
>>>hist = data.history(assets=symbol('AAPL'),
fields='close',
bar_count=5,
frequency='1d')
>>>print(hist)
2017-12-04 00:00:00+00:00 37.45
2017-12-05 00:00:00+00:00 37.55
2017-12-06 00:00:00+00:00 36.30
2017-12-07 00:00:00+00:00 36.25
2017-12-08 00:00:00+00:00 35.70
# 参数传入 单个assets 多个fields,返回 DataFrame
>>>hist = data.history(assets=symbol('AAPL'),
fields=['close','volume'],
bar_count=5,
frequency='1d')
>>>print(hist)
close volume
2017-12-04 00:00:00+00:00 37.45 254633.0
2017-12-05 00:00:00+00:00 37.55 253858.0
2017-12-06 00:00:00+00:00 36.30 208441.0
2017-12-07 00:00:00+00:00 36.25 136271.0
2017-12-08 00:00:00+00:00 35.70 102565.0
# 参数传入 多个 assets 单个 fields,返回 DataFrame
>>>hist = data.history(assets=[symbol('AAPL'),symbol('JD')],
fields='volume',
bar_count=5,
frequency='1d')
>>>print(hist)
Equity(12 [AAPL]) Equity(3647 [JD])
2017-12-04 00:00:00+00:00 37.45 52.55
2017-12-05 00:00:00+00:00 37.55 52.98
2017-12-06 00:00:00+00:00 36.30 52.35
2017-12-07 00:00:00+00:00 36.25 53.44
2017-12-08 00:00:00+00:00 35.70 52.93
# 参数传入 多个 assets 多个 fields,返回 Panel
>>>hist = data.history(assets=assets,
fields=['close','volume'],
bar_count=5,
frequency='1d')
>>>print(hist)
<class 'pandas.core.panel.Panel'>
Dimensions: 2 (items) x 5 (major_axis) x 2 (minor_axis)
Items axis: close to volume
Major_axis axis: 2017-12-26 00:00:00+00:00 to 2018-01-02 00:00:00+00:00
Minor_axis axis: Equity(12 [AAPL]) to Equity(3647 [JD])
# panel 是一个三维的数据结构,可以从三维中的任意维度切片,返回结果是一个 DataFrame
# 获取所有 assets 的收盘价
>>>print(hist.xs('close',axis=0))
Equity(12 [AAPL]) Equity(3647 [JD])
2017-12-26 00:00:00+00:00 36.60 53.00
2017-12-27 00:00:00+00:00 36.50 52.72
2017-12-28 00:00:00+00:00 36.80 52.80
2017-12-29 00:00:00+00:00 36.70 53.00
2018-01-02 00:00:00+00:00 36.95 54.36
# 获取 2017-12-26 所有 assets 的所有 fields
>>>from datetime import datetime
>>>import pytz
>>>print(hist.xs(datetime(2017, 12, 26, tzinfo=pytz.utc), axis=1))
close volume
Equity(12 [AAPL]) 36.6 143262.0
Equity(3647 [JD]) 53.0 112277.0
# 获取 jd 的收盘价和成交量
>>>print(hist.xs(symbol('JD'), axis=2))
close volume
2017-12-26 00:00:00+00:00 53.00 112277.0
2017-12-27 00:00:00+00:00 52.72 140665.0
2017-12-28 00:00:00+00:00 52.80 94743.0
2017-12-29 00:00:00+00:00 53.00 126968.0
2018-01-02 00:00:00+00:00 54.36 117857.0
参考文档
如果您对美股 或者 港股也感兴趣, 或者想要了解如何开户, 可以加我wechat: andyhu006 , 同时也可以拉您进美股交流群哦。最后的最后 祝大家都有一个美好的投资生活哦。
