QMT如何编写策略获取沪深指数数据?(附开通QMT全攻略)

获取指数代码列表

提示

为了获取指数合约列表,首先需要使用函数get_sector_list来获取需要查询的指数索引。具体的索引信息可以通过键入您感兴趣的索引名(例如:"沪深指数"或"上证指数")等获得。接下来,通过调用函数get_stock_list_in_sector并输入指定的索引名称,你就可以返回相应的指数合约列表。这部分合约列表包含了所有与特定指数相关的现有合约,这对于投资者在进行投资策略分析和决策时具有重要参考价值。

调用方法

# coding=utf-8
from xtquant import xtdata
# 获取板块列表
xtdata.get_sector_list()
# 根据板块列表找查询指数索引名称
xtdata.get_stock_list_in_sector(sector_name)

参数

字段类型说明
sector_namestring板块名称

返回

  • 列表,包含指定板块成分代码。
# coding=utf-8
from xtquant import xtdata
# 获取板块列表
ret_sector_list = xtdata.get_sector_list()
print(f'获取板块目录: {ret_sector_list}')
# 根据板块列表找查询指数索引名称
ret_sector_data = xtdata.get_stock_list_in_sector('沪深指数')
print(f'获取板块合约: {ret_sector_data}')

获取指数成份股权重

如果你的本地环境中缺少合约权重数据,那么可以先通过函数download_index_weight进行数据下载。下载后,再使用get_index_weight函数来取得相关指数下各个合约的权重信息。这两步操作能帮助你获得详尽而全面的权重数据,进一步增强你对投资环境的理解和掌握,帮助做出更明智的投资决策。

调用方法

# coding=utf-8
from xtquant import xtdata
# 下载权重相关信息
xtdata.download_index_weight()
# 获取权重相关信息
xtdata.get_index_weight(index_code)

参数

字段类型说明
index_codestring指数代码
  • index_code:字符串格式,指数代码,例如 000300.SH

返回

  • 字典, key为成分代码, value为权重
# coding=utf-8
from xtquant import xtdata
# 下载权重相关信息
xtdata.download_index_weight()
# 获取权重相关信息
ret_weight_data = xtdata.get_index_weight('000300.SH')
print(ret_weight_data)

获取指数行情数据

获取行情数据,最新行情需要数据订阅subscribe_quote。如果您需要获取历史数据,可以使用download_history_data函数下载相关数据,然后使用get_market_data_ex函数提取所需的信息。这样,使用者就能获得最新和详细的合约最新数据,有助于做出更精准的投资决策。

调用方法

# coding=utf-8
from xtquant import xtdata
# 订阅指定合约最新行情
xtdata.subscribe_quote(stock_code, period='', start_time='', end_time='', count=0, callback=None)
# 下载指定合约历史行情
xtdata.download_history_data(stock_code, period, start_time='', end_time='')
# 获取指定合约历史行情
xtdata.get_market_data_ex(field_list = [], stock_list = [], period = '', start_time = '', end_time = '', count = -1, dividend_type = 'none', fill_data = True)

参数

  • xtdata.subscribe_quote
字段类型说明
stock_codestr股票代码
start_timestr开始时间格式YYYYMMDD/YYYYMMDDhhmmss
end_timestr结束时间
countint数量 -1全部/n: 从结束时间向前数n个
periodstr周期 分笔"tick" 分钟线"1m"/"5m" 日线"1d"
  • xtdata.get_market_data_ex
参数名称类型描述
field_listlist表示所有字段。不同的数据周期,取值范围有所不同。
stock_listlist合约代码列表
periodstr数据周期,默认是当前主图周期。可选值如下: 'tick' (分笔线), '1d' (日线), '1m' (1分钟线), '5m' (5分钟线), '15m' (15分钟线), 'l2quote' (Level2行情快照), 'l2quoteaux' (Level2行情快照补充), 'l2order' (Level2逐笔委托), 'l2transaction' (Level2逐笔成交),'l2transactioncount' (Level2大单统计), 'l2orderqueue' (Level2委买委卖队列)
start_timestr开始时间。为空时默认为最早时间。时间格式为'20201231'或'20201231093000'
end_timestr结束时间。为空时默认为最新时间。时间格式为'20201231'或'20201231235959'
countint数据最大个数。-1表示不做个数限制
dividend_typestr复权方式,默认是当前主图复权方式。可选值包括: 'none' (不复权), 'front'(前复权), 'back' (后复权), 'front_ratio' (等比前复权), 'back_ratio' (等比后复权)
fill_databool停牌填充方式

返回值

  • period为1m 5m 1dK线周期时
    • 返回dict { field1 : value1, field2 : value2, ... }
    • value1, value2, ... :pd.DataFrame 数据集,index为stock_list,columns为time_list
    • 各字段对应的DataFrame维度相同、索引相同
  • period为tick分笔周期时
    • 返回dict { stock1 : value1, stock2 : value2, ... }
    • stock1, stock2, ... :合约代码
    • value1, value2, ... :np.ndarray 数据集,按数据时间戳time增序排列
# coding=utf-8
from xtquant import xtdata
# 获取迅投板块指数代码列表
xt_sector_index_list = xtdata.get_stock_list_in_sector("迅投一级行业板块加权指数")
# 获取迅投板块指数合约信息
xt_sector_index_info = xtdata.get_instrument_detail(xt_sector_index_list[0])
xt_sector_index = xt_sector_index_list[0]
print(xt_sector_index_info)
# 订阅合约数据
xtdata.subscribe_quote(xt_sector_index, period='1d', start_time='', end_time='20231026', count=1, callback=None)
# 下载指定合约历史行情
xtdata.download_history_data(xt_sector_index, '1d', '20231020', '20231026')
# 获取指定合约历史行情
day_data = xtdata.get_market_data_ex(field_list=[], stock_list=[xt_sector_index], period='1d', start_time='',end_time='20231026',  count=5, dividend_type='none', fill_data=True)
print(day_data)

获取指数tick数据

获取全推tick数据的函数是用户主动调用的工具。所谓"全推tick数据",指的是以tick(最小报价单位)为单位的实时市场数据,包括每一笔交易的信息,如成交金额、成交量、收盘价等。通过主动调用这个函数,用户能实时获得最新的市场动态,从而做出及时和准确的投资决策。

调用方法

# coding=utf-8
from xtquant import xtdata
xtdata.get_full_tick(code_list)

参数

字段类型说明
code_listlist合约列表
  • code_list:字符串格式, 例如 ['000001.SH', '000300.SH']

返回值

  • dict 数据集 { stock1 : tick1, stock2 : tick2, ... }, tick字段如下
字段类型说明
timetagstr时间
lastPricefloat最新价
openfloat开盘价
lowfloat最低价
amountfloat成交额
volumeint成交总量
pvolumeint原始成交总量
openIntint持仓量
stockStatusstr证券状态
lastClosefloat前收盘价
lastSettlementPricefloat前结算价
settlementPricefloat今结算价
askPricelist多档委卖价
bidPricelist多档委买价
askVollist多档委卖量
bidVollist多档委买量
# coding=utf-8
from xtquant import xtdata

# 获取迅投板块指数代码列表
xt_sector_index_list = xtdata.get_stock_list_in_sector("迅投一级行业板块加权指数")
# 获取迅投板块指数信息
xt_sector_index_info = xtdata.get_instrument_detail(xt_sector_index_list[0])
# 获取迅投板块指数tick数据
ret_full_tick = xtdata.get_full_tick([xt_sector_index])
print(ret_full_tick)

 

 

了解QMT

QMT主要以智能策略编写功能为主,集行情显示、策略研究、交易执行和风控管理于一体的策略交易终端。技术(有一定编程经验)门槛较高。同时专业版中还具有智能算法、ETF套利等专业交易功能。 

QMT量化交易系统具有显著的特点,如高速行情,系统提供实时、准确的行情数据,支持多种市场、多个品种的交易;策略回测,投资者可以在系统中编写量化策略,并利用历史数据进行回测,评估策略的有效性和稳定性;自动化交易,系统支持策略自动执行,投资者只需设定好策略参数,系统即可根据市场情况自动进行买卖操作;以及个性化定制,QMT量化交易系统提供丰富的API接口和自定义功能,投资者可以根据自己的需求进行个性化定制。

QMT基本功能介绍

  1. 快速交易终端:全内存交易,单笔延时小于1ms,

  2. 满足极速交易快速行情支持:①全面超越订阅式行情的超高压缩实时全推行情 ②支持历史TICK数据展示、盘口回放 

  3. 专业交易方式:①支持普通交易、组合交易、ETF交易等多种专业交易工具 ②内置标准算法交易、随机量交易,有效承接大额交易,隐藏交易行为

  4. 策略交易:①支持VBA和Python双语言开发策略编写、回测、模拟交易、自动化实盘交易 ②提供量化选股、择时、指数增强等多种策略模板研究,内置网格交易等成熟策略专

  5. 业风险控制:① 全内存多层次并行风控,大幅降低交易延迟、提高风控执行效率 ②支持交易合规、交易量价、资产比例等风控,严控投资风险

 

开通券商版QMT

首先,迅投的QMT软件,与大部分券商都存在深度合作。也就是说,券商可以免费提供其券商版QMT软件给用户使用,当然,前提是需要先在对应的券商开户,并达到券商要求的入金门槛。

券商版QMT由于不收取费用,可以免费使用,所以性价比最高,并可提供模拟盘版QMT试用。

 

5/23午评:大幅回调,家电抗跌

今日市场明显回调,家电板块表现活跃,地产板块表现落后。截止11点30分,上证指数跌1%,深成指跌1.19%,创业板指跌0.98%,北证50指数涨3.47%。地面兵装、Mlops概念等涨幅居前,调味品、非金属材料等跌幅居前。
        
异动板块点评:

1、地面兵装:板块涨幅2.65%,长城军工涨停。
消息面上,5月22日,在第五届中国机场发展大会暨创新成果展上,《电动垂直起降航空器(eVTOL)起降场技术要求》团体标准正式发布。这是我国首部针对电动垂直起降航空器(eVTOL)起降场的技术规范。

2、Mlops概念:板块涨幅0.59%,传音控股涨超1%。
当地时间5月22日美股盘后,芯片巨头英伟达发布截至今年4月的2025财年第一财季业绩。报告期内,英伟达实现收入260亿美元,高于市场预期的246.9亿美元,其中,数据中心收入226亿美元,也高于市场预期的211.3亿美元。英伟达当季的毛利润率为78.9%,高于预期的77%。英伟达预计,第二财季收入为280亿美元,将好于市场预期的268亿美元。

QMT 是一个基于Python量化交易框架,可以用它来编写自己的交易策略。下面是一个基于MACD的策略示例: ``` from qmt import Strategy, DataHandler import talib class MACDStrategy(Strategy): def __init__(self): self.buy_price = None self.sell_price = None self.macd = None self.signal = None def on_data(self, data: DataHandler): if len(data.close) < 26: return self.macd, self.signal, _ = talib.MACD(data.close) current_price = data.close[-1] if self.macd[-1] > self.signal[-1] and self.macd[-2] < self.signal[-2]: self.buy(current_price) elif self.macd[-1] < self.signal[-1] and self.macd[-2] > self.signal[-2]: self.sell(current_price) def buy(self, price): self.buy_price = price self.buy_order(price) def sell(self, price): self.sell_price = price self.sell_order(price) def on_order_filled(self, filled_order): if filled_order.order_type == 'buy': self.buy_price = filled_order.price elif filled_order.order_type == 'sell': self.sell_price = filled_order.price def on_trade_closed(self, trade): profit = (trade.sell_price - trade.buy_price) / trade.buy_price * 100 print(f"Trade closed: buy @ {trade.buy_price}, sell @ {trade.sell_price}, profit: {profit:.2f}%") ``` 该策略使用 talib 库来计算 MACD 指标,并通过比较 MACD 和信号线的交叉点来判断买入和卖出时机。当 MACD 线上穿信号线时,发出买入指令;当 MACD 线下穿信号线时,发出卖出指令。在 `on_order_filled` 和 `on_trade_closed` 方法中,我们可以记录买入和卖出的价格,并在交易结束时计算盈利。 需要注意的是,这只是一个简单的示例,并没有考虑市场的实际情况。在实际应用中,我们需要结合更多的指标和数据,以及制定更合理的买卖规则。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值