量化数据免费方案之QMT/XtQuant(1)

本文介绍了QMT,一个低门槛的量化实盘接口,提供本地部署平台和独立SDKXtQuant。XtQuant主要负责行情数据和交易,支持历史数据缓存和实时获取,同时讲解了如何通过这两个工具获取和处理股票数据的示例及注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

QMT 和 XtQuant 简介

QMT 是目前接入门槛最低的量化实盘接口之一。它提供了本地部署的量化平台(可以回测和实盘),也提供了可独立于该平台运行的 SDK,即 XtQuant。

XtQuant 仅提供行情数据和交易接口,不提供回测功能。目前通过 XtQuant 获取普通行情数据是免费的,但有流速限制,据测试,低于 1 秒获取一次是没有问题的。

XtQuant 获取行情数据

XtQuant 中,数据获取一般分两个阶段,首先是缓存阶段,然后是读取阶段。

缓存阶段的 API 一般以 download_开头。

因此,我们要获取历史行情数据,首先要进行缓存。使用的 API 是:

def download_history_data(stock_code: str='', 
                      period: str='', 
                      start_time: str='', 
                      end_time: str='', 
                      incrementally: Optional[bool]=None
                      )

如果我们要一次下载多支证券的行情数据,还可以使用download_history_data2这个 API。

如果在 start_time 到 end_time 区间的数据被缓存后,我们就可以调用get_market_data来获取行情数据。

def get_market_data(field_list = [], 
                    stock_list = [], 
                    period = '1d',
                    start_time = '', 
                    end_time = '', 
                    count = -1,
                    dividend_type = 'none', 
                    fill_data = True
)

该方法可以获取’1m’, ‘5m’, ‘15m’, ‘30m’, ‘1h’, '1d’和分笔 (tick) 数据。不同的周期下,返回的字段有所不同。除分笔外,能返回的数据包括时间,OHLC,volume(成交手)和 amount(成交金额)。

注意该方法不能返回复权因子。因此,如果我们不是为了直接使用返回的数据,而是要将其转存到其它数据库的话,我们还需要调用get_divid_factors来获得复权因子,与这里获得的未复权数据一起保存。直接转存任何已经复权的数据是没有意义的。即使是后复权,也存在出错的可能。

示例

from xtquant import xtdata

stocks = ['000001.SZ', '600000.SH']
xtdata.download_history_data(stocks[0], '1d')
xtdata.download_history_data(stocks[1], '1d')

# 或者
# XTDATA.DOWNLOAD_HISTORY_DATA2(STOCKS, '1D')

end = "20231220"
bars = xtdata.get_market_data(stock_list=stocks, 
                              period='1d', 
                              end_time=end, 
                              count=-1, 
                              dividend_type="front_ratio")

end = "20231220"
bars = xtdata.get_market_data(stock_list=stocks, period='1d', end_time=end, count=-1, dividend_type="front_ratio")

display(bars['close'].T.tail())

get_market_data的返回结果是一个dict。它的key是行情字段,比如time, open, close等。其值则是以证券代码为索引,以时间为列的各个字段值。在上述示例的输出中,我们将其进行了转置,这也是我们正常情况下,使用它们的方式。

最终输出如下:

注意 xtquant 使用的日期格式,如果周期为 1d,则是"YYYYMMDD"。如果周期为分钟级,则为"YYYYMMDDHHmmss"。如果我们使用的时间是 datatime.datetime 的话,可以用以下方式来格式化:

import datetime

now = datetime.datetime.now()
print(now.strftime("%Y%m%d%H%M%S"))

import arrow
arrow.get(now).format("YYYYMMDDHHmmss")

strftime的格式串不容易记忆, arrow 时间库在这点上进行了改进,周期由大到小,表示形式也实现了递进,比较容易记忆。在不涉及到性能的情况下,我们可以先将其转换为 Arrow 对象,再进行格式化。

本文由mdnice多平台发布

03-12
<think>好的,用户的问题是关于QMT(Quantitative Trading Platform)、quantmod和trader的。首先需要明确用户的具体需求。QMT是迅投公司开发的量化交易平台,主要用于A股市场。而quantmod是R语言中一个用于量化金融分析的包,常用于数据获取、可视化和技术分析。用户可能想知道如何将quantmod与QMT结合使用,或者如何在QMT中实现类似quantmod的功能。 需要确认QMT是否支持R语言的集成。查阅资料发现,QMT主要支持Python和VBA,而quantmod是R的包,因此直接集成可能有难度。可能需要通过其他方式在QMT中使用R代码,比如调用外部脚本或者使用中间件进行通信。 接下来,考虑用户提到的“trader”,可能是指实际的交易执行部分。用户可能希望了解如何在QMT中实现策略回测和自动化交易。需要查找QMTAPI文档,了解其交易函数和回测框架的结构。例如,QMT提供XtTrader和XtQuant等模块,用于连接交易接口和数据获取。 然后,整合信息。用户可能需要将quantmod的分析结果应用到QMT的交易策略中。可能的解决方案包括:使用R进行数据分析后导出结果,再用Python读取并执行交易;或者使用Python的类似库(如pandas、TA-Lib)替代quantmod,直接在QMT的策略中实现分析。 此外,需要检查QMTAPI是否支持实时数据获取和订单提交。例如,XtQuant提供历史数据获取函数get_market_data,而XtTrader处理订单。代码示例可能涉及初始化交易接口、订阅数据、计算指标、生成交易信号等步骤。 最后,确保回答符合格式要求:分步骤、无第一人称、代码和公式正确格式化,并在最后添加相关问题。相关问题应围绕QMT的功能扩展、quantmod替代方案以及策略部署问题展开。</think>QMT(迅投量化交易平台)与quantmod的结合应用涉及数据获取、策略开发和交易执行三个核心环节。以下是实现量化交易的关键方法: --- **数据对接与处理** 通过XtQuant模块获取实时行情数据,使用Python的pandas进行数据处理: ```python from xtquant import xtdata data = xtdata.get_market_data(['000001.SZ'], period='1d') df = data.to_dataframe().reset_index() ``` **技术指标计算** 替代quantmod的技术分析方法,使用TA-Lib实现MACD指标计算: ```python import talib df['macd'], df['signal'], _ = talib.MACD(df['close'], fastperiod=12, slowperiod=26, signalperiod=9) ``` **交易策略实现** 构建双均线策略并通过XtTrader执行: ```python from xtquant.xttrader import XtQuantTrader class Strategy: def on_tick(self): short_ma = df['close'].rolling(5).mean() long_ma = df['close'].rolling(20).mean() if short_ma.iloc[-1] > long_ma.iloc[-1]: XtQuantTrader.order_stock('000001.SZ', 'BUY', 1000) else: XtQuantTrader.order_stock('000001.SZ', 'SELL', 1000) ``` --- **回测验证** 使用QMT内置回测框架验证策略有效性,核心评价指标包括: - 年化收益率:$R_{annual} = (1 + R_{total})^{252/N} - 1$ - 夏普比率:$Sharpe = \frac{E[R_p - R_f]}{\sigma_p}$ - 最大回撤:$MDD = \max_{0≤i<j≤T}(P_i - P_j)/P_i$ ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

量化风云

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值