QMT自带函数说明,可以查看一些函数的使用方法。
而且有示例代码,可以拿来直接测试。
一、获取股票历史信息
import pandas as pd import numpy as np import talib def init(ContextInfo): ContextInfo.set_universe(['600300.SH','000004.SZ']) def handlebar(ContextInfo): #获取股票池中所有股票的最近两日的收盘价 hisdict = ContextInfo.get_history_data(10,'1d','close') print(hisdict) for k, v in hisdict.items(): if len(v)>1: print( k,':',v[1]-v[0])#今日涨幅
比如上面的代码,就是取到了股票近10天的收盘价。
二、获取股票的1分钟数据
# encoding: utf-8 import pandas as pd import numpy as np import talib def init(ContextInfo): pass def handlebar(ContextInfo): #获取股票池中股票的最近1日的4价 hisdict =ContextInfo.get_market_data_ex( ['open', 'high', 'low', 'close'], ['688062.SH'], period='1m' , start_time='', end_time='', count=-1 , dividend_type='follow', fill_data=True , subscribe = True ) print(hisdict)
经核对没有任何问题。
如果要获得成交果,只需要在列表中加入即可。即: ['open', 'high', 'low', 'close','volume']
经查看函数使用说明,count:数据最大个数,-1视为不做个数限制,不过将这个数改成480,也没有用,返回的还是240,也就是说它只能获取1天的1m数据。
三、计算指标
# encoding: gbk import pandas as pd import datetime def init(ContextInfo): """ 初始化函数,设定每天 15:05 触发策略。 """ ContextInfo.run_time(["15:05"]) # ✅ 正确方式:设定每天 15:05 运行一次 def handlebar(ContextInfo): """ 在 15:05 自动执行的主逻辑。 """ analyze_day_volume(ContextInfo) def analyze_day_volume(ContextInfo): """ 分析尾盘成交量比值并保存为 CSV。 """ stock_list = ['688062.SH', '600519.SH', '000001.SZ'] # ✅ 替换为你的股票池 results = {} # 获取当日所有股票的 1 分钟数据 hisdict = ContextInfo.get_market_data_ex( ['open', 'high', 'low', 'close', 'volume'], stock_list, period='1m', start_time='', end_time='', count=-1, dividend_type='follow', fill_data=True, subscribe=False ) for symbol, df in hisdict.items(): try: ratio = calculate_tail_volume_ratio(df) results[symbol] = ratio except Exception as e: print(f"{symbol} 分析失败: {e}") results[symbol] = None # 保存结果为 CSV 文件 date_str = datetime.datetime.now().strftime("%Y%m%d") df_result = pd.DataFrame.from_dict(results, orient='index', columns=['prev_tail_vol_ratio']) df_result.index.name = 'symbol' filename = f"prev_tail_vol_ratio_{date_str}.csv" df_result.to_csv(filename, encoding='utf-8-sig') print(f"[{date_str}] 分析完成,已保存至:{filename}") def calculate_tail_volume_ratio(df: pd.DataFrame) -> float: """ 计算尾盘成交量比值: (14:30-15:00 成交量) / (10:00-10:30 成交量) """ df = df.copy() df.index = pd.to_datetime(df.index, format="%Y%m%d%H%M%S") morning = df.between_time("10:00", "10:29") afternoon = df.between_time("14:30", "14:59") morning_volume = morning["volume"].sum() afternoon_volume = afternoon["volume"].sum() if morning_volume == 0: return float("inf") return afternoon_volume / morning_volume