lllrc 2024-02-12 16:51 采纳率: 0%
浏览 16

QMT使用中每次运行都会调用所有的k线,然后循环打印几千次,如何设定和解决这个问题?

问题遇到的现象和发生背景

QMT使用中每次运行都会调用所有的k线,然后循环打印几千次,如何设定和解决这个问题?

遇到的现象和发生背景,请写出第一个错误信息
import pandas as pd
import numpy as np


# 必须定义init不然会报错
def init(ContextInfo):
    # ==================== 初始设置 ====================
    # 设定股票池
    stocklist = ['113527.SH']
    ContextInfo.set_universe(stocklist)
    print("init")

def handlebar(ContextInfo):
    # d = ContextInfo.barpos
    # t = ContextInfo.get_bar_timetag(d)
    # date = timetag_to_datetime(t, "%Y%m%d")
    
    data=ContextInfo.get_market_data_ex(['close'],ContextInfo.get_universe(),period='1d',start_time='20240201',end_time='20240210'
    ,count=-1,dividend_type='follow',fill_data=True,subscribe=True)
    print(data['113527.SH'])

用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%

img

运行结果及详细报错内容
我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%
我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”
  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-02-12 16:53
    关注

    引自免费微信小程序:皆我百晓生

    在QMT(Quantitative Market Trading)环境中,你提到的问题是每次运行handlebar函数时都会获取并打印指定时间段内的所有K线数据,导致输出过多。要解决这个问题,你需要根据实际需求来控制打印的频率和范围。

    从你的代码来看,get_market_data_ex函数会获取指定股票池在特定时间范围内的市场数据。若只需要最新的K线数据,或者以一定间隔获取和处理数据,你可以修改handlebar函数,加入条件判断或定时逻辑:

    import pandas as pd
    import numpy as np
    
    def init(ContextInfo):
        # 初始化设置
        stocklist = ['113527.SH']
        ContextInfo.set_universe(stocklist)
        print("init")
    
    # 定义一个变量用于存储上一次获取数据的时间
    last_print_time = pd.Timestamp('20240201')
    
    def handlebar(ContextInfo):
        current_time = ContextInfo.get_current_timetag()
        current_date = timetag_to_datetime(current_time, "%Y%m%d")
        
        if current_date > last_print_time:
            # 只在新的交易日或达到指定间隔时获取并打印数据
            data = ContextInfo.get_market_data_ex(['close'], 
                                                 ContextInfo.get_universe(), 
                                                 period='1d', 
                                                 start_time=last_print_time.strftime('%Y%m%d'), 
                                                 end_time=current_date.strftime('%Y%m%d'),
                                                 count=-1, 
                                                 dividend_type='follow', 
                                                 fill_data=True, 
                                                 subscribe=True)
    
            print(f"Data for {current_date}: {data['113527.SH']}")
            
            # 更新最后打印数据的时间点
            last_print_time = current_date
    
    

    请注意,上述代码中我假设了一个全局变量last_print_time来记录上次打印数据的时间戳,并在每个handlebar循环里检查当前日期是否大于这个时间戳。如果是,则执行获取与打印操作,并更新last_print_time为当前日期。

    但具体的实现细节还要取决于QMT平台的API限制和设计,以上代码仅作为示例提供一种思路。请根据QMT平台的实际功能进行调整。如果你希望按照固定周期(如每N个交易日)获取并打印数据,请使用适当的计数器或时间判断逻辑替代上述的日期比较部分。

    评论

报告相同问题?

问题事件

  • 创建了问题 2月12日

悬赏问题

  • ¥15 hive on spark
  • ¥15 星穹铁道中的ai自动战斗逻辑
  • ¥15 SimpleHook 一下android fake模块的VIP日期
  • ¥15 如何在VBA中利用word的错词提示功能识别word文本中的错别字并标注
  • ¥15 c#调用c++函数 传参数问题
  • ¥15 jupyter notebook无法识别的空格,如何解决?(语言-python)
  • ¥15 自动回复评论的小插件
  • ¥20 用c++完成两道大题,要求提供.h和.cpp,以及用来测试的main.cpp
  • ¥15 2024电赛H题指导
  • ¥15 第三方如何控制E8a进行烧录