当前位置: 首页 > news >正文

QMT实盘代码案例教学:etf全球配置策略

以大QMT为例,etf全球大类资产资产配置策略介绍:

通过QMT平台周期分析etf数据,并执行自动交易操作。

通过选择全世界各地的etf比如纳斯达克etf,标普etf,黄金etf,德经etf,印度etf,日本etf,国债etf等,这些etf在历史上长期属于熊短牛长,具有很高的胜率以及安全边际。

自动交易执行

通过QMT平台的xtquant库连接券商交易接口,实现毫秒级的交易响应4

支持多种委托类型:限价单、最优五档、对手方最优价、本方最优价等4

灵活的策略配置

用户可通过图形界面(GUI)设置交易参数,包括账户信息、交易品种、资金分配、风险控制等4

支持多种交易策略的快速切换和组合

全面的风险管理

内置多重风险控制机制,包括单笔金额限制、总金额限制、价格波动幅度限制等4

自动止损止盈功能,保护投资者资金安全

实时监控与日志记录

提供直观的交易监控界面,实时显示交易状态和账户情况4

完整的操作日志记录,便于事后分析和策略优化

系统架构与技术实现  etf全球大类资产资产交易系统采用模块化设计,主要由以下几个核心组件构成:

预警监控模块

负责实时读取ETF选股池行情

采用高效的文件变化检测算法,确保预警信号的及时捕获

配置流程

设置ETF选股池

配置QMT交易账户和接口参数

设定交易策略参数和风险控制规则

运行模式

支持模拟交易和实盘交易两种模式

安装教程

直接导入大QMT即可

使用说明

一、打开大QMT

打开qmt,不选择独立交易,直接进入大QMT

二、导入策略

点击右键,选择导入策略

三、策略账户设置

点击qmt的文件编辑

修改为自己的股票账号

修改etf交易池

设置参数

设置动量参数:

设置购买股票数量:

四、模型测试

点击运行,编译成功后,点击运行

回测效果:

五、实盘设置

点击模型交易模型挂实盘

六、策略代码

源代码,部分。

import numpy as np
import pandas as pd
import math

class A():
	pass
a=A()
#初始化函数 
def init(C):
	C.acct = '55003243'
	C.acct_type = 'STOCK'

	C.etf_pool = [
        '518880.SH', #黄金ETF(大宗商品)
        '513100.SH', #纳指100(海外资产)
        '159915.SZ', #创业板100(成长股,科技股,中小盘)
        '510180.SH', #上证180(价值股,蓝筹股,中大盘)
    ]
	C.etf_pool = ['513100.SH', 
	'518880.SH', #黄金ETF(大宗商品)
    '513100.SH', #纳指100(海外资产)
    '159915.SZ', #创业板100(成长股,科技股,中小盘)
    '510180.SH', #上证180(价值股,蓝筹股,中大盘)
	'159632.SZ', 
	'159941.SZ', 
	'159502.SZ', 
	'159509.SZ', 
	'159655.SZ',
	'513500.SH',
	'513300.SH',
	'513400.SH', 
	'513850.SH', 
	'159659.SZ',
	'159660.SZ',
	'164824.SZ',
	'159866.SZ', 
	'513030.SH', 
	'513080.SH', 
	'513730.SH',
	'159687.SZ', 
	'159937.SZ', 
	'159980.SZ',
	'159985.SZ',
	'159981.SZ']
	"""
	C.etf_pool = [
        '600309.SH', #黄金ETF(大宗商品)
        '600231.SH', #纳指100(海外资产)
        '000151.SZ', #创业板100(成长股,科技股,中小盘)
        '600000.SH', #上证180(价值股,蓝筹股,中大盘)
    ]
	"""
	#C.etf_pool = C.get_stock_list_in_sector('沪深300')
	print(C.etf_pool)
	for i in C.etf_pool:
		download_history_data(i,'1d','','')
		download_history_data(i,'1m','','')
	C.m_days = 60 #动量参考天数
	C.Num = 5  #购买股票数量
	#C.run_time('trade','1nDay',"2024-07-25 14:57:00")
	
def handlebar(C):
	#pass
	trade(C) #每天运行确保即时捕捉动量变化
    #trade(C) #每天运行确保即时捕捉动量变化

def get_rank(C,etf_pool):
	score_list = []
	start_time = timetag_to_datetime(C.get_bar_timetag(C.barpos-C.m_days),'%Y%m%d')
	end_time = timetag_to_datetime(C.get_bar_timetag(C.barpos),'%Y%m%d')
	for etf in etf_pool:
		data = C.get_market_data_ex(fields=["close"],stock_code=[etf], period = "1d", start_time = start_time, end_time = end_time,count=C.m_days)
		df = data[etf]
		y = df['log'] = np.log(df.close)
		x = df['num'] = np.arange(df.log.size)
		slope, intercept = np.polyfit(x, y, 1)
		annualized_returns = math.pow(math.exp(slope), 250) - 1
		r_squared = 1 - (sum((y - (slope * x + intercept))**2) / ((len(y) - 1) * np.var(y, ddof=1)))
		score = annualized_returns * r_squared
		score_list.append(score)
	df = pd.DataFrame(index=etf_pool, data={'score':score_list})
	df = df.sort_values(by='score', ascending=False)
	rank_list = list(df.index)  
	return rank_list


# 交易
def trade(C):
	# 获取动量最高的一只ETF
	target_num = C.Num  
	target_list = get_rank(C,C.etf_pool)[:target_num]
    #获取持仓信息
	holdings = get_trade_detail_data(C.acct, C.acct_type, 'position')
    #获取股票的代码和持仓数量的字典
	holdings = {i.m_strInstrumentID + '.' + i.m_strExchangeID : i.m_nCanUseVolume for i in holdings}
    # 卖出  
	hold_list = holdings
	for etf in hold_list:
		if etf not in target_list:
			passorder(24, 1101, C.acct, etf, 10, 0, holdings.get(etf,0), '', 1 , '', C)
			print(timetag_to_datetime(C.get_bar_timetag(C.barpos),'%Y%m%d'), '卖出' + str(etf))
		else:
			print( timetag_to_datetime(C.get_bar_timetag(C.barpos),'%Y%m%d'),'继续持有' + str(etf))

欢迎点赞关注

有任何疑问也欢迎留言交流心得。

相关文章:

  • 深入理解Java性能调优与JVM底层机制
  • 柯尼卡美能达CA-410-CA-VP427 P427
  • 从 “单打独斗” 到 “生态共赢” 跨境货源池的协同增长逻辑
  • 摄像头模块对焦方式的类型
  • Java基础 4.7
  • 基于Python的二手房数据挖掘与可视化深度分析
  • STM32单片机入门学习——第22节: [7-2] AD单通道AD多通道
  • AutoAgent: 香港大学开源的AI智能体框架
  • ARM-IIC
  • #简易线程池...实现原理
  • 从零开始的图论讲解(1)——图的概念,图的存储,图的遍历与图的拓扑排序
  • ubuntu 20.04 编译和运行A-LOAM
  • std::async 和 std::thread 的主要区别
  • 使用Vue、Nodejs以及websocket搭建一个简易聊天室
  • 项目难点亮点
  • 国密算法(SM2/SM3/SM4)与国际算法(AES/RSA/SHA-256)
  • 数据集的训练-测试拆分在机器学习中的重要性
  • Mac下Homebrew的安装与使用
  • SLAAC 与 DHCPv6 笔记250405
  • adb devices报错 ADB server didn‘t ACK
  • 建设自己的网站首页/怎么把广告发到各大平台
  • 水果门户网站建设/佛山网站建设十年乐云seo
  • 重庆活动轨迹公布/石家庄关键词优化软件
  • 服务器搭建网站能ping t/西安百度网站排名优化
  • 西安网站设计制作一般多少钱/网站推广内容
  • 电影网站源码怎么做的/八八网