量化交易入门

量化交易 · 2019年03月02日 · 608 次阅读

主要根据老虎量化API, 实现一些量化的实例以及一些运行代码的结果分析。利用回归测试, 根据历史的下单记录计算回测的收益曲线,以及风险收益指标, 从而验证自己的投资习惯; 如果你对量化交易感兴趣 可以加微信: xiaobei060537 一起交流

美股量化交易入门

导读

本系列量化教程是运行 老虎证券pc 端 量化交易环境, 运行前 可以点链接注册老虎证券 使用模拟账号 进行运行量化代码, 同时可以享受美股佣金8折永久优惠!港股手续费0佣金。

策略的构成

需要实现策略对象的两个方法: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: xiaobei006006, 同时也可以拉您进美股交流群哦。
最后的最后 祝大家都有一个美好的投资生活哦。

大家也可以关注【美股指南】公众号, 即可获得《小白投资美股指南(雪球「岛」系列)》电子书

写在最后

友情提示 转载请注明出处: https://investguider.com/topics/1550
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册