返回列表 发布新帖

【done】请教:回测时get_market_data跟get_market_data_ex运行逻辑不一样吗

3241 6
发表于 2024-3-29 15:50:40 | 显示全部楼层 阅读模式
get_market_data跟get_market_data_ex返回数据的周期不一样吗?
get_market_data_ex没有按照设定的时间段一天一天的推送,get_market_data可以
大家也是这样情况吗?
        fields = ['index', 'open', 'high', 'low', 'close', 'volume', 'amount']        periods= 5          start_time = '20240219'          end_time = '20240315'        for idx, stock_code in enumerate(stock_codes):                  print(f"处理股票代码:{stock_code}")

                '''
                param_df = ContextInfo.get_market_data(
                        fields=fields[1:],
                        stock_code=[stock_code],
                        count=int(periods)+1,
                        dividend_type='front'
                        )
                print(param_df)
                '''
               
               
               
                param_df = ContextInfo.get_market_data_ex(  
                        fields=fields[1:],
                        stock_code=[stock_code],  
                        count=int(periods)+1,  
                        dividend_type='front'  # 前复权
                        )  
                print(param_df)
注释掉的get_market_data能在我设定的起始时间段内回测能一根一根K线的推数据。而get_market_data_ex都是推了今天最新的数据,而且全是一样的。
        param_df = ContextInfo.get_market_data_ex(  
                fields=fields[1:],  
                stock_code=['603660.SH'],  
                period='follow',
                start_time='',  
                end_time='',
                count=int(5)+1,  
                dividend_type='follow',
                fill_data=True,
                subscribe=True
                )  
        print(param_df)
这样,根据手册所有参数都写上,也不行啊,加测时都不是设定日期内的数据,而是全推今天最新的数据啊,怎么回事??

总的时间顺序如:第一周期20240213、20240214、20240215、20240216、20240219;第二周期20240214、20240215、20240216、20240219、20240220;……;最后一个周期20240311、20240312、20240313、20240314、20240315。在运行回测时get_market_data可以做到上而的效果,而get_market_data_ex全是一样的数据。

我昨晚弄了7个小时,没找到原因在哪…………

评论6

*******6310
发表于 2024-3-29 17:42:27 | 显示全部楼层
get_market_data_ex 需要手动指定end_time, 否则默认到最后, gmd不需要, 默认到历史k线位置. 两个接口都可以用.
*******5858楼主
发表于 2024-4-1 12:23:55 | 显示全部楼层
*******6310 发表于 2024-3-29 17:42
get_market_data_ex 需要手动指定end_time, 否则默认到最后, gmd不需要, 默认到历史k线位置. 两个接口都可 ...

多谢你的回复。
如果需要手动指定end_time,回测逻辑就不通了啊,因为回测时是从start_time到end_time一根一根K线推送的。get_market_data_ex还是不正常啊,迅投技术能解答一下吗?
*******5858楼主
发表于 2024-4-1 12:30:37 | 显示全部楼层
版主能解答一下这个问题吗?
本来get_market_data用得非常好,但因为我现在需要使用1分钟K线,而get_market_data没有1分钟数据的,不得不改用get_market_data_ex,但get_market_data_ex数据推送模式就不符合回测逻辑。请问如何解决?
*******6310
发表于 2024-4-1 18:19:26 | 显示全部楼层
*******5858 发表于 2024-4-1 12:23
多谢你的回复。
如果需要手动指定end_time,回测逻辑就不通了啊,因为回测时是从start_time到end_time一 ...
  1. def handlebar(C):
  2.         d = C.barpos
  3.         # 获取当前 K 线时间
  4.         bar_date = timetag_to_datetime(C.get_bar_timetag(C.barpos), "%Y%m%d")
  5.         data = C.get_market_data_ex(['close'], ['600000.SH'], end_time = bar_date, period ='1d', count = 10)
  6.         print(data)
复制代码

回测这么用就行。
*******5858楼主
发表于 2024-4-2 12:03:56 | 显示全部楼层
*******6310 发表于 2024-4-1 18:19
回测这么用就行。

非常的感谢!使用上面的代码问题已解决。:handshake
speedwind_q97Xp
发表于 昨天 18:41 | 显示全部楼层
*******6310 发表于 2024-4-1 18:19
回测这么用就行。

你好,我是按照你的sample写的,代码如下,本地数据都下载了,但是回测的前20次的打印日志获取数据还是重复的,21次也就是count次数满足以后,获取的历史数据才都正确,请问这个是什么原因(在init里面也下载了数据download_history_data("rb00.SF", ContextInfo.timeFrame,"",""))
代码部分:
backTestTime = timetag_to_datetime(ContextInfo.get_bar_timetag(ContextInfo.barpos),"%Y%m%d%H%M%S")
closes1 = ContextInfo.get_market_data_ex(
            fields=['close'],
            stock_code=['rb00.SF'],
            period='5m',
            count=21,  # 多取一个用于计算
            end_time = backTestTime
        )
        print(closes1)

打印日志:
第一次:
currentTime:2026-02-02 09:05:00
{'rb00.SF':                  close
stime                 
20260202005500  3134.0
20260202010000  3134.0
20260202010500  3134.0
20260202011000  3134.0
20260202011500  3134.0
20260202012000  3134.0
20260202012500  3134.0
20260202013000  3134.0
20260202013500  3134.0
20260202014000  3134.0
20260202014500  3134.0
20260202015000  3134.0
20260202015500  3134.0
20260202020000  3134.0
20260202020500  3134.0
20260202021000  3134.0
20260202021500  3134.0
20260202022000  3134.0
20260202022500  3134.0
20260202023000  3134.0
20260202090500  3127.0}

第二次:
【2026-02-08 18:36:24.809】  currentTime:2026-02-02 09:10:00
{'rb00.SF':                  close
stime                 
20260202010000  3134.0
20260202010500  3134.0
20260202011000  3134.0
20260202011500  3134.0
20260202012000  3134.0
20260202012500  3134.0
20260202013000  3134.0
20260202013500  3134.0
20260202014000  3134.0
20260202014500  3134.0
20260202015000  3134.0
20260202015500  3134.0
20260202020000  3134.0
20260202020500  3134.0
20260202021000  3134.0
20260202021500  3134.0
20260202022000  3134.0
20260202022500  3134.0
20260202023000  3134.0
20260202090500  3127.0
20260202091000  3126.0}

回复

您需要登录后才可以回帖 登录 | 立即注册

主题

6

回帖

5

积分

50

客服专线

400-080-8112

用思考的速度交易,用真诚的态度合作,我们是认真的!
  • 关注公众号
  • 添加微信客服
Copyright © 2001-2026 迅投QMT社区 版权所有 All Rights Reserved. 京ICP备2025122616号-3
关灯 快速发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表