qmt获取涨停封单额和计算封单强度

部署运行你感兴趣的模型镜像

代码

from xtquant import xtdata

# 下载股票tick数据
xtdata.download_history_data('002190.SZ', period='tick', start_time='20250508')
data = xtdata.get_local_data(stock_list=["002190.SZ"], period='tick', start_time='20250508', end_time= '20250508')
print(data)
print(data['002190.SZ'].columns)
data['002190.SZ'].to_csv("./002190SZ_20250508_tick数据.csv")
df = data['002190.SZ']
print("封单手数:",df['bidVol']['20250508150000'][0])#收盘买1:封单额
print("封单额:",df['bidVol']['20250508150000'][0]*100*df['lastPrice']['20250508150000'])#封单额*100*收盘价
print("封单强度:",df['bidVol']['20250508150000'][0]/df['volume']['20250508150000'])#封单额/成交额

输出

Qmt Tick数据字段解析

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think>我们使用QMT平台(包含MiniQMT)来验证涨停策略因子的有效性。根据用户需求,我们需要编写代码来实现以下验证步骤: 1. 历史回测:获取历史数据(分钟级),计算因子触发信号,并评估策略表现(如胜率、夏普比率、最大回撤等)。 2. 统计检验:包括计算IC值、分组回测等。 3. 样本外验证:使用时间切片法进行训练集测试集划分。 4. 实盘压力测试:考虑流动性冲击极端行情。 由于QMT平台支持Python编程,我们可以利用其数据获取回测功能。 步骤: 1. 数据准备:获取股票分钟级数据,包括开盘价、最高价、最低价、收盘价、成交量等,特别需要标识涨停的股票(涨停价=最高价,且涨幅达到10%或20%,注意科创板、创业板ST股的不同)。 2. 定义涨停策略因子:例如,可以定义一些技术指标(如量比、封单量、MACD等)作为因子,用于预测涨停。 3. 回测框架:在历史数据上模拟交易,计算每次信号发出后的次日收益率,并统计策略表现。 4. 性能评估:计算胜率、夏普比率、最大回撤等指标。 5. 统计检验:计算因子IC值,进行分组回测T检验。 6. 样本外验证:将数据分为训练集测试集,分别回测。 7. 压力测试:模拟大冲击成本(调整买入价)极端行情下的表现。 注意:由于涨停策略的特殊性,我们通常关注的是信号发生后次日(或之后一段时间)的收益情况,因为涨停当日很难买入。 代码结构: 我们将按照以下步骤编写程序: 1. 初始化:设置时间范围、股票池、因子参数等。 2. 数据获取:使用QMT的xtdata模块获取分钟级数据,并计算因子值。 3. 信号生成:根据因子阈值生成买入信号(例如,当因子值超过某个阈值时,认为可能涨停)。 4. 回测:在信号日的次日以开盘价买入,持有一定时间后卖出(例如持有一天),计算收益。 5. 绩效统计:计算胜率、夏普比率、最大回撤等。 6. 统计检验:计算IC值,进行分组回测。 7. 样本外验证:按时间划分数据集。 8. 压力测试:加入冲击成本等。 由于QMT的具体实现细节用户的具体因子定义可能不同,以下代码为示例框架,需要根据实际情况调整。 注意:在QMT中,获取涨停数据可以通过以下方式: - 判断当日是否涨停:当前收盘价等于涨停价(需要从行情数据中获取涨停价,或者通过前一日收盘价计算,注意复权)。 - 涨停计算公式:$ \text{涨停价} = \text{前一日收盘价} \times (1 + \text{涨停幅度}) $,A股一般股票为10%,ST为5%,创业板、科创板为20%(具体以实际规则为准)。 我们假设因子已经计算好,存储在DataFrame中。这里我们以简的量比因子为例。 以下代码示例: </think>以下是在QMT平台实现涨停策略因子有效性验证的编程方案,结合引用内容平台特性设计: ### QMT涨停因子验证程序框架 ```python # -*- coding: utf-8 -*- from xtquant import xtdata from xtquant.xttrader import XtQuantTrader import pandas as pd import numpy as np from scipy import stats # 1. 数据准备(分钟级行情) def fetch_limit_data(stock_list, start_date, end_date): """ 获取涨停相关数据 :param stock_list: 股票池列表 ['SH.600000', 'SZ.000001'...] :return: DataFrame(包含量比、封单量、涨停状态等字段) """ fields = ['open', 'high', 'low', 'close', 'volume', 'amount'] df = xtdata.get_market_data(fields, stock_list, period='1m', start_time=start_date, end_time=end_date) # 计算涨停标识(涨跌幅>=9.7%视为涨停) df['pct_chg'] = df['close'].pct_change() * 100 df['is_limit'] = np.where(df['pct_chg'] >= 9.7, 1, 0) return df # 2. 因子计算(示例:量比+封单强度因子) def calculate_factor(data): """ 计算涨停预测因子 :param data: 行情DataFrame :return: 因子值Series """ # 量比 = 当前成交量 / 过去5日平均成交量 data['vol_ma5'] = data['volume'].rolling(5).mean() data['vol_ratio'] = data['volume'] / data['vol_ma5'].replace(0, 1e-5) # 封单强度 = 涨停价剩余买 / 日均成交 data['order_strength'] = data['amount'] / data['amount'].rolling(20).mean() # 合成因子(可根据实际策略调整权重) data['factor'] = 0.6 * data['vol_ratio'] + 0.4 * data['order_strength'] return data['factor'] # 3. 回测验证核心函数 def backtest_limit_factor(factor_values, actual_limit, cost_rate=0.002): """ 涨停因子回测验证 :param factor_values: 因子值序列 :param actual_limit: 实际涨停标记序列 :param cost_rate: 交易成本率 :return: (胜率, 夏普比率, IC值) """ # 信号生成(取前30%因子值作为信号) threshold = factor_values.quantile(0.7) signals = factor_values > threshold # 计算次日收益率(买入信号后一日涨幅) returns = actual_limit.shift(-1)[signals].dropna() # 绩效计算 win_rate = len(returns[returns > 0]) / len(returns) sharpe = (returns.mean() - cost_rate) / returns.std() * np.sqrt(242) # IC值计算(因子值与次日涨跌幅秩相关) ic = factor_values.corr(actual_limit.shift(-1), method='spearman') return win_rate, sharpe, ic # 4. 蒙特卡洛检验 def monte_carlo_test(true_return, n_sim=1000): """ 随机因子有效性检验 :param true_return: 真实策略收益序列 :param n_sim: 模拟次数 """ random_wins = 0 for _ in range(n_sim): # 生成随机因子序列 random_factor = np.random.permutation(true_return.index) random_return = true_return.loc[random_factor].reset_index(drop=True) # 比较随机策略与真实策略 if random_return.mean() > true_return.mean(): random_wins += 1 p_value = 1 - random_wins / n_sim return p_value # 主执行流程 if __name__ == "__main__": # 初始化QMT连接 trader = XtQuantTrader('path/to/client', 0) # 获取数据(示例取沪深300成分股) stocks = xtdata.get_stock_list_in_sector('沪深300') data = fetch_limit_data(stocks, '20200101', '20231231') # 计算因子 factor_series = calculate_factor(data) # 回测验证 win_rate, sharpe, ic = backtest_limit_factor( factor_series, data['is_limit'] ) # 输出结果 print(f"策略胜率:{win_rate:.2%} 夏普比率:{sharpe:.2f} IC值:{ic:.4f}") # 蒙特卡洛检验 p_value = monte_carlo_test(data['is_limit'][factor_series > threshold]) print(f"蒙特卡洛检验p值:{p_value:.4f}(p<0.05表示显著)") ``` ### 关键功能说明 1. **数据获取优化** - 使用`xtdata`模块直接获取分钟级行情 - 自动识别涨停状态($ \text{涨停标识} = \begin{cases} 1 & \text{涨幅} \geq 9.7\% \\ 0 & \text{其他} \end{cases} $) - 支持自定义股票池(如引用[2]提到的白马股/短线股组合[^2]) 2. **因子中性化处理**(参考引用[3]) ```python # 示例:市值中性化 cap = xtdata.get_market_data('total_mv', stock_list) neutral_factor = factor_series - factor_series.groupby(cap).transform('mean') ``` 3. **注册制适配** ```python # 区分不同板块涨跌幅(科创/创业板20%) def get_limit_rate(stock_code): if stock_code.startswith('SH.688') or stock_code.startswith('SZ.30'): return 0.198 # 19.8%视为涨停 return 0.098 # 9.8%默认值 ``` ### 验证指标解读 1. **核心指标阈值** - 胜率 > 55%(考虑交易成本) - 夏普比率 > 1.2($ \text{Sharpe} = \frac{R_p - 0.02}{ \sigma_p } \times \sqrt{242} $) - IC值 > 0.03(信息系数) 2. **压力测试建议** ```python # 流动性冲击模拟 def liquidity_impact(order_size): """ 大冲击成本模型 :param order_size: 订(万元) :return: 实际成交溢价比例 """ return 0.001 * np.log(order_size/50 + 1) # 50万基准订 ``` > 通过MiniQMT本地化运行可最大化发挥计算性能[^1],建议使用3年以上数据验证,重点监控尾盘(14:30后)信号失效情况
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值