【历史文档】策略回测-数据查询相关(data)
由bigquant创建,最终由small_q 被浏览 996 用户
更新
本文内容对应旧版平台与旧版资源,其内容不再适合最新版平台,请查看新版平台的使用说明
新版量化开发IDE(AIStudio):
https://bigquant.com/wiki/doc/aistudio-aiide-NzAjgKapzW
新版模版策略:
https://bigquant.com/wiki/doc/demos-ecdRvuM1TU
新版数据平台:
https://bigquant.com/data/home
https://bigquant.com/wiki/doc/dai-PLSbc1SbZX
新版表达式算子:
https://bigquant.com/wiki/doc/dai-sql-Rceb2JQBdS
新版因子平台:
https://bigquant.com/wiki/doc/bigalpha-EOVmVtJMS5
\
定义
class BarData
标的数据
数据对象
数据对象为您的算法提供了获取各种数据的方法。 数据对象提供许多功能:
- 获取标的的开盘价、最高价、最低价、收盘价、成交量信息(OHLCV)
- 获取历史时间窗口的OHLCV数据
- 检查该资产在当前bar是否可成交(以成交量为判断)
current_dt
定义
current_dt
获取最新日期, 为datetime格式
示例代码
date = data.current_dt
print('目前日期为:{}'.format(date))
current
定义
current(assets, fields)
获取当天股票数据,通过data(BarData).current进行调用,在handle_data中调用
参数
assets – 股票列表,类型为Equity
fields – 历史数据项或集合,数据项可以为'close', 'open', 'high', 'low', 'price',如果指定为'price',效果等价于'close',即最新价用收盘价代替
示例代码
获取平安银行当天的最低市价-的一种情况
#获取平安银行当天的最低市价-的一种情况
curr = data.current(context.symbol('000001.SZA'), 'low')# 获取平安银行当天的最低市价-第二种情况
curr = data.current(context.symbol('000001.SZA'), ['low', 'high', 'price'])
curr['low']
#获取平安银行当天的最低市价-第三种情况
curr = data.current(context.symbols('000001.SZA', '600000.SHA'), 'low')
curr[symbol('000001.SZA')]
#获取平安银行、浦发银行当天的最低、最高及市价(用收盘价代替)
curr = data.current(context.symbols('000001.SZA', '600000.SHA'), ['low', 'high', 'price'])
#获取平安银行当天的最低市价-第四种情况
curr[context.symbol('000001.SZA')]['low']
history
定义
history(assets, fields, bar_count, frequency)
获取一定时间窗口的历史数据,通过data(BarData).history进行调用,在handle_data中调用
参数
assets - 股票列表,类型为Equity
fields - 历史数据项或集合,数据项可以为'close'、'open'、'high'、'low'、'volume'、'price',如果指定为'price',效果等价于'close',即最新价用收盘价代替
返回:
如果assets是单一资产,字段是单个字段,返回pandas模块下的日期作为索引的Series格式
如果assets是多个资产,字段是单个字段,返回pandas模块下的日期作为索引的DataFrame格式,列名为资产名
如果assets是单一资产,字段是多个字段,返回pandas模块下的日期作为索引的Series格式,列名为字段名
如果assets是多个资产,字段是多个字段,返回pandas模块下的字段作为索引的Panel格式,主索引为日期,次索引为资产名
'price'是向前填充的,'open'、'high'、'low'、'close'不会进行向前填充。
示例代码
#获取平安银行最近二十个交易日的收盘价数据
price_history = data.history(context.symbol('000001.SZA'), fields="price", bar_count=20, frequency="1d")
#获取平安银行最近二十个交易日的开盘价数据
open_history = data.history(context.symbol('000001.SZA'), fields="open", bar_count=20, frequency="1d")
#获取平安银行最近五个交易日的成交量数据
volume_history = data.history(context.symbol('000001.SZA'), fields="volume", bar_count=5, frequency="1d")
#获取当天数据和前一天数据
sec = [context.symbol('000002.SZA'), context.symbol('600000.SHA'), context.symbol('000333.SZA')]
price_history = data.history(sec, fields="price", bar_count=2, frequency="1d")
for s in sec:
prev_bar = price_history[s][-2] # 前一天数据
curr_bar = price_history[s][-1] # 当前数据
if curr_bar > prev_bar:
context.order(s, 20)
#计算一段时间区间的股票的收益率
sec = [context.symbol('600000.SHA'), context.symbol('000333.SZA')]
prices = data.history(sec, fields="price", bar_count=10, frequency="1d")
pct_change = (prices.ix[-1] - prices.ix[0]) / prices.ix[0]
print(pct_change)
#通过pandas提供的滚动运算方法计算mavg\stddev\vwap
#计算平安银行的移动平滑价格
price_history = data.history(context.symbol('000002.SZA'), fields="price", bar_count=5, frequency="1d")
print(price_history.mean())
#计算平安银行价格标准差
price_history = data.history(context.symbol('000002.SZA'), fields="price", bar_count=5, frequency="1d")
print(price_history.std())
#计算成交量加权平均价(VWAP)
def initialize(context):
context.securities = [context.symbol('000002.SZA'), context.symbol('000333.SZA')]
def vwap(prices, volumes):
return (prices * volumes).sum() / volumes.sum()
def handle_data(context, data):
hist = data.history(context.securities, fields=["price", "volume"], bar_count=30, frequency="1d")
vwap_15 = vwap(hist["price"][-15:], hist["volume"][-15:])
vwap_30 = vwap(hist["price"], hist["volume"])
for s in context.securities:
if vwap_15[s] > vwap_30[s]:
context.order(s, 50)
can_trade
定义
can_trade(asset)
返回该标的是否可以交易,该标的在当前的时间下如果有行情价格数据,那么返回True,否则返回False,如果为False,在该标的下单会报错。
参数
assets - 标的,类型为Equity
返回:
bool - 布尔型变量
示例代码
def handle_data(context, data):
sid = symbol('000002.SZA')
if data.can_trade(sid) == True:
context.order(sid, 100)
\