问题描述
老师,我开通了一创实盘交易账户。通过get_money_flow(security_list, start_date=None, end_date=None, fields=None, count=None)可以获取股票的涨跌幅,在一创聚宽平台,实盘交易中想要获取当前时刻的交易数据,end_date参数应该输入什么?
解决方案
您好!关于在实盘/模拟盘中获取当日数据,有以下几点需要注意:
1. 关于 get_money_flow 获取当日数据
在 JoinQuant 平台中,get_money_flow 提供的是日线级别的资金流向数据。根据官方 API 文档的特别说明:
“在回测/模拟中,为避免未来函数,无法获取当前逻辑时间的那一条数据。”
这意味着,即使您将 end_date 设置为 context.current_dt(当前时间)或 datetime.date.today()(今天),您最多也只能获取到昨天(上一个交易日)的数据。因为当日的资金流向数据需要等收盘后交易所结算才能生成,盘中是无法获取的。
2. 如何获取当前时刻的交易数据(如涨跌幅)?
如果您在盘中(实盘/模拟盘)的目的是获取当前时刻的最新价、开盘价或计算当天的实时涨跌幅,您不应该使用 get_money_flow,而应该使用专门获取实时数据的 API:get_current_data()。
get_current_data() 可以获取当前时刻的最新价(last_price)、当日开盘价(day_open)等信息。结合前一天的收盘价,您就可以轻松计算出当前的实时涨跌幅。
代码示例:获取当前最新价并计算实时涨跌幅
def handle_data(context, data):
security = '000001.XSHE'
# 1. 获取当前时刻的实时数据
current_data = get_current_data()
# 获取最新价
last_price = current_data[security].last_price
# 2. 获取昨天的收盘价 (用于计算涨跌幅)
# 使用 attribute_history 获取过去1天的收盘价
history_data = attribute_history(security, 1, '1d', ['close'])
pre_close = history_data['close'][0]
# 3. 计算实时涨跌幅 (%)
if pre_close > 0:
change_pct = (last_price - pre_close) / pre_close * 100
log.info(f"{security} 当前最新价: {last_price}, 昨收: {pre_close}, 实时涨跌幅: {change_pct:.2f}%")
总结
- 查资金流向:用
get_money_flow,但盘中只能拿到昨天的数据。end_date传context.current_dt即可。 - 查实时涨跌幅/最新价:用
get_current_data()获取last_price,配合attribute_history获取昨收价自行计算,这是实盘和高频策略中最标准、最无延迟的做法。