迅投QMT社区 门户 查看主题

量化研究---全新一代索普大QMT通达信多板块交易系统

发布者: *******7387_x00JA | 发布时间: 2025-11-6 11:02| 查看数: 24| 评论数: 1|帖子模式

文章声明:本内容为个人的业余研究,和任何单位,机构没有关系,文章出现的股票代码,全部只是测试例子,不做投资参考,投资有风险,代码学习使用,不做商业用途

最近在建立量化网页的内容,还没有写工具的策略使用使用教程,虽然我全部上线了

http://14.103.193.242:9999/xms_quants.html

c7d1cbc474b8d07618f6c63cf4b6704f.png

be028d158e123abf93a16ba18c202a23.png

通达信多板块的策略原理介绍

索普通达信多板块交易系统源代码版, 系统概述 索普通达信多板块交易系统是一款专为A股市场设计的、高度灵活的自动化交易辅助系统。它的核心设计理念是 “以板块为纲,精准出击” ,通过智能化读取和处理通达信软件的板块信息,帮助交易者系统性地把握市场热点,并执行精细化的多板块协同交易策略。 核心功能亮点 通达信预警板块无缝对接 系统能够实时或定时读取通达信软件生成的“板块预警”结果。 自动获取当日市场强势启动或符合特定条件的板块成分股列表,无需手动导出和导入,确保交易信号的及时性和准确性。 将这些动态变化的强势板块直接转化为系统的核心监控和交易池。 自定义板块股票池管理 除了依赖通达信的动态预警,系统还支持完全自定义的静态股票池。 用户可以根据自身的研究(如行业研报、技术分析、基本面选股等)创建并维护多个自定义板块,例如:“核心长线池”、“技术突破备选池”、“事件驱动池”等。 系统可将自定义板块与通达信预警板块进行有机结合,为复杂策略提供基础。 强大的多板块协同处理与交易 这是本系统的核心优势。 系统支持同时监控和读取多个板块(包括预警板块和自定义板块)。 智能标的筛选:系统可以处理股票在不同板块间的重叠关系。例如,可以制定如下策略: 交集策略:只交易“同时出现在锂电池预警板块和新能源汽车自定义板块”的股票,提高信号的精准度。 并集策略:交易“出现在人工智能预警板块 或 信创自定义板块”的股票,扩大机会覆盖面。 优先级策略:为不同板块分配不同的优先级和资金权重。 统一交易执行:基于最终筛选出的股票列表,系统可以根据预设的量化规则(如价格、成交量、技术指标等)自动生成交易指令,并执行下单操作,实现一键管理多板块投资组合。

baef088c5f2642be5c952f7de4a300cd.png

视频上线了网页可以直接看,参考使用学习

b63082e9effc6c1a3ae7908b3d43b486.png

ptrade的

fe4648195b1d3bd3462a40382a918cad.png

qmt还有工具的策略我在录上线

d96c9511c6359c915a4a679d34a83ada.png

具体写一下qmt通达信多板块使用教程,网页有详细的教程https://gitee.com/quants/big_tdx_bk_trader

https://gitee.com/quants/big_tdx_bk_trader

非常详细

a3f004b40b45015c6ff36e8923871d12.png

比如买入板块A的股票,A股票会同步到A股票的持股板块,A持股的板块会被A板块的卖出函数监测实时分析卖出,利用这个原理我们测试一下,导入qmt源代码版本,模拟盘qmt上不去,我直接使用实盘演示,简单的演示,截图内容看网页详细的教程

8ae5d17c36accca7ce1ea422e0dd345f.png

点击编辑进入输入账户

96eb0586a11bf3887b2b317662c458e8.png

输入通达信板块路径

8b4c20e816aa54f6f88cf36be1fb4d41.png

设置自定义交易板块

50598045f006f6d5ae691b9212997efd.png

设置每一个标的的交易金额

ce15875c12d5ebfd0e1d609fdd2acb85.png

设置交易通知

98dbc1b5c940ddf65c486f64085eaf3e.png

没有问题挂实盘交易就可以

6870a91e7aeb3a86f5e7b3983ee4a260.png

点击运行就可以

fbe8e2f417bb3f8093dd186273388af7.png

打开通达信安原理测试一下,添加标的,一般是利用公式选股,比如把这个标的手动添加到BUY1板块

39014573447a4a7ade0669a2a0744ced.png

板块自己手动建立

61e150adcac1182874834a3666ab6c39.png

立马触发交易买入

b72cb8cdad50540acc62c57bda1a461a.png

比如把这个标的加入到BUY3板块,实现多板块交易功能

8343f68961e8b30bccb97c51e1cabcef.png

立马买入

2b2d23ac1a154b37bb3318aab2f8b0e4.png

比如把这个标的添加到SELL1板块卖出

0842722133f43ad30485d0014dac0992.png

7dba4159528b485b7a806fc7c59cdc39.png

立马触发测试没有问题挂着交易就可以,通达信预警了会马上交易

7dba4159528b485b7a806fc7c59cdc39.png

源代码我全部上传了直接下载参考教程使用就可以

61b34fda5c1aec3059950eebca2f1194.jpg

6f2917e26fadb8ec0e577c780204a333.png

不懂的问我就可以,加我备注入群可以加入量化群

69bc723d3ab3d72eb7b508b8be979a0c.jpg

需要开户的可以找我,技术支持,免费使用

4390e0a038fe31aa9bc18d09ab77b7af.png

部分代码参考,完整的网页下载,知识星球下载就可以

#encoding:gbk
'''
索普通达信多板块交易系统源代码版
教程https://gitee.com/li-xingguo11111/big_tdx_bk_trader
作者:索普量化
微信:xms_quants1
时间:20251006
价格类型参数
-1  无效(只对于algo_passorder起作用)
0   卖5价
1   卖4价
2   卖3价
3   卖2价
4   卖1价
5   最新价
6   买1价
7   买2价(组合不支持)
8   买3价(组合不支持)
9   买4价(组合不支持)
10  买5价(组合不支持)
'''
import pandas as pd
import numpy as np
import talib
import os
import time 
from datetime import datetime
import math
import time
import requests
import json
import random
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
def init(c):
    c.text={
        "标记":"作者:索普量化微信:xms_quants1",
        "授权码":"0xc8b4f09d7e509d80052d2b9447cccd5a2a23e1624e3ad2b014899529c59bb0bd41e61a7df98554e70df2576471bc393004f8a0c256a16abfd7e4d14f2fc1e9520e80f1a5acc92c3e68e08972d01eb5b64532abb41ee8cdf3435878c4d26697b79f78274d0ee962c5583a8f02d0e8730c4c55c85f04d545073eecb8e34fcaa987f7c5",
        "是否测试说明":"测试的时候改成是,实盘改成是否",
        "是否测试":"否",
        "账户":"",
        "策略名称":"索普通达信多板块交易系统源代码版",
        "账户类型":"STOCK",
        "买入价格编码":4,
        "卖出价格编码":6,
        "不成交撤单下单时间":600,
        "持股限制":10,
        "是否开启账户个股止盈止损":"否",
        "账户个股止盈":20,
        "账户个股止损":-8,
        "是否开启当日止盈止损":"否",
        "当日止盈":15,
        "当日止损":-5,
        "交易品种":'stock,fund,bond',
        "买入通达信路径":"C:/new_tdx/T0002/blocknew",
        "买入自选股板块":"BUY1,BUY3",
        "买入后是否剔除板块成分股":"是",
        "持股同步通达路径":"C:/new_tdx/T0002/blocknew",
        "持股同步通达信板块":"QMTCG1,QMTCG3",
        "通达信卖出路径":"C:/new_tdx/T0002/blocknew",
        "卖出预警板块":"SELL1,SELL3",
        "卖出后是否剔除板块成分股":"是",
        "剔除预警标开头":'688,300',
        "交易模式":"金额",
        "固定交易金额":300,
        "固定交易数量":100,
        "特殊交易标的":'600031,600111',
        "特殊交易标的固定交易金额":15000,
        "特殊交易标的固定交易数量":100,
        "时间设置":"时间设置********",
        "交易时间段":8,
        "交易开始时间":9,
        "交易结束时间":24,
        "是否参加集合竞价":"是",
        "开始交易分钟":0,
        "通知发送方式说明":"QQ/企业微信/钉钉",
        "通知发送方式":"QQ",
        "发送QQ":"1029762153@qq.com",
        "接收QQ":"1029762153@qq.com",
        "QQ掩码":"jjfgdhklgguebdje",
        "企业微信token":"1,1",
        "钉钉token":"1,1"
    }
    #账户
    c.account=c.text['账户']
    #账户类型
    c.account_type=c.text['账户类型']
    if c.account_type=='stock' or c.account_type=='STOCK':
        c.buy_code=23
        c.sell_code=24
    else:
        #融资融券
        c.buy_code=33
        c.sell_code=34
    c.buy_price_code=c.text['买入价格编码']
    c.sell_price_code=c.text['卖出价格编码']
    test=c.text['是否测试']
    if test=='是':
        print('开启测试模型,实盘记得关闭')
    else:
        del_all_tdx_buy_stock(c)
        del_all_tdx_sell_stock(c)
    c.st_name=c.text['策略名称']
    print(get_account(c,c.account,c.account_type))
    print(get_position(c,c.account,c.account_type))
    #循环模式3秒
    #买入模块
    c.run_time("run_all_buy_func","2nSecond","2024-07-25 13:20:00")
    #卖出函数
    c.run_time("run_all_sell_func","3nSecond","2024-07-25 13:20:00")
    #5分钟不成交撤单了在下
    cacal_time=c.text['不成交撤单下单时间']
    c.run_time("run_order_trader_func","{}nSecond".format(cacal_time),"2024-07-25 13:20:00")
    #账户止盈止损
    c.run_time("get_account_stock_stop_trader","3nSecond","2024-07-25 13:20:00")
    #当日止盈止损
    c.run_time("get_daily_stock_stop_trader","3nSecond","2024-07-25 13:20:00")
    #清空板块内容
    c.run_time("del_all_tdx_buy_stock","1nDay","2024-07-25 09:10:00")
    c.run_time("del_all_tdx_sell_stock","1nDay","2024-07-25 09:11:00")
    c.run_time("del_all_tdx_buy_stock","1nDay","2024-07-25 15:01:00")
    c.run_time("del_all_tdx_sell_stock","1nDay","2024-07-25 15:02:00")
def handlebar(c):
    pass
def del_all_tdx_buy_stock(c):
    '''
    清空全部的买入板块
    '''
    tdx_path=c.text['买入通达信路径']
    name_list=c.text['买入自选股板块'].split(',')
    tdx=xg_tdx(tdx_path)
    for name in name_list:
        tdx.del_all_tdx_stock(name=name)
        print('买入板块{} 清空完成'.format(name))
def del_all_tdx_sell_stock(c):
    '''
    清空通达信卖出板块数据
    '''
    tdx_path=c.text['通达信卖出路径']
    name_list=c.text['卖出预警板块'].split(',')
    tdx=xg_tdx(tdx_path)
    for name in name_list:
        tdx.del_all_tdx_stock(name=name)
        print('卖出板块{}清空完成'.format(name))
def get_price(c,stock):
    '''
    获取最新价格
    '''
    tick=c.get_full_tick(stock_code=[stock])
    tick=tick[stock]
    price=tick['lastPrice']
    return price
def select_data_type(stock='600031'):
    '''
    选择数据类型
    '''
    stock=str(stock)
    if stock[:2] in ['11','12'] or stock[:3] in ['123','110','113','123','127','128','118','132','120']:
        return 'bond'
    elif stock[:2] in ['51','15','50','16','18','52']:
        return 'fund'
    else:
        return 'stock'
def adjust_stock(stock='600031.SH'):
    '''
    调整代码
    '''
    if stock[-2:]=='SH' or stock[-2:]=='SZ' or stock[-2:]=='sh' or stock[-2:]=='sz':
        stock=stock.upper()
    else:
        if stock[:3] in ['600','601','603','605','688','689',
            ] or stock[:2] in ['11','51','58']:
            stock=stock+'.SH'
        else:
            stock=stock+'.SZ'
    return stock
def get_zdf(c,stock):
    '''
    获取涨跌幅数据
    '''
    tick=c.get_full_tick(stock_code=[stock])
    tick=tick[stock]
    price=tick['lastPrice']
    lastClose=tick['lastClose']
    zdf=((price-lastClose)/lastClose)*100
    return zdf
def get_buy_tdx_stock(c,path=r'C:/new_tdx/T0002/blocknew',name='BUY1'):
    '''
    读取买入板块
    '''
    #读取通达信自选股
    name=name
    tdx_path=path
    tdx=xg_tdx(tdx_path)
    try:
        df=tdx.read_tdx_stock_1(name=name)
        df['名称']=c.st_name
        df['板块']=name
        df['交易类型']='buy'
        df['投资备注']=df['名称']+','+df['板块']+','+df['证券代码']+','+df['交易类型']
    except Exception as e:
        print(e,name,'买入板块路径有问题')
    return df
def check_not_trader_data(c):
    '''
    检测买入没有成交的数据
    主要检测买入的包含了废单
    '''
    trader_log=get_order(c,c.account,c.account_type)
    now_dat=str(datetime.now())[:10]
    if trader_log.shape[0]>0:
        trader_log['策略']=trader_log['投资备注'].apply(lambda x: str(x).split(',')[0])
        trader_log=trader_log[trader_log['策略']==c.st_name]
        if trader_log.shape[0]>0:
            maker_list=trader_log['投资备注'].tolist()
        else:
            maker_list=[]
    else:
        maker_list=[]
    return maker_list
def get_buy_stock(c,path=r'C:/new_tdx/T0002/blocknew',name='BUY1'):
    '''
    获取买入股票池数据
    '''
    tarder_type=c.text['交易品种'].split(',')
    del_list=c.text['剔除预警标开头'].split(',')
    hold_limit=c.text['持股限制']
    #读取持股
    hold_stock=get_position(c,c.account,c.account_type)
    if hold_stock.shape[0]>0:
        hold_stock=hold_stock[hold_stock['持仓量']>=10]
        if hold_stock.shape[0]>0:
            hold_stock['品种']=hold_stock['证券代码'].apply(lambda x:select_data_type(x))
            hold_stock['选择']=hold_stock['品种'].apply(lambda x:'是' if x in tarder_type else '不是')
            hold_stock=hold_stock[hold_stock['选择']=='是']
            if hold_stock.shape[0]>0:
                hold_stock_list=hold_stock['证券代码'].tolist()
                hold_stock_amount=len(hold_stock_list)
            else:
                hold_stock_list=[]
                hold_stock_amount=0
        else:
            hold_stock_list=[]
            hold_stock_amount=0
    else:
        hold_stock_list=[]
        hold_stock_amount=0
    #读取通达信自选股
    df=get_buy_tdx_stock(c,path=path,name=name)
    if df.shape[0]>0:
        df['证券代码']=df['证券代码'].apply(lambda x: str(x))
        df['品种']=df['证券代码'].apply(lambda x:select_data_type(x))
        df['选择']=df['品种'].apply(lambda x:'是' if x in tarder_type else '不是')
        df['剔除']=df['证券代码'].apply(lambda x: '是' if x in del_list  else '不是')
        df=df[df['选择']=='是']
        df=df[df['剔除']=='不是']
        if df.shape[0]>0:
            maker_list=check_not_trader_data(c)
            not_trader_amount=len(maker_list)
            df['持股']=df['证券代码'].apply(lambda x: '是' if x in hold_stock_list else '不是')
            df['已经委托']=df['投资备注'].apply(lambda x: '是' if x in maker_list else '不是')
            df=df[df['持股']=='不是']
            df=df[df['已经委托']=='不是']
            if df.shape[0]>0:
                buy_df=df
                buy_amount=hold_limit-hold_stock_amount-not_trader_amount
                if buy_amount>0:
                    buy_amount=buy_amount
                    buy_df=buy_df[:buy_amount]
                else:
                    print('超过持股限制{}不买入'.format(hold_limit))
                    buy_df=pd.DataFrame()
            else:
                buy_df=pd.DataFrame()
        else:
            buy_df=pd.DataFrame()
    else:
        buy_df=pd.DataFrame()
    return buy_df
def check_is_buy(c,accountid,datatype,stock='513100.SH',amount=100,price=1.3):
    '''
    检查是否可以买入
    '''
    account=get_account(c,accountid,datatype)
    #可以使用的现金
    av_cash=account['可用金额']
    value=amount*price
    if av_cash>=value:
        return True
    else:
        print('{} 买入不了{} 可用资金小于买入资金{}'.format(stock,av_cash,value))
        return False

最新评论

*******7387_x00JA发表于  4 小时前
作者微信:xms_quants1
客服专线

400-080-8112

用思考的速度交易,用真诚的态度合作,我们是认真的!
  • 关注公众号
  • 添加微信客服
Copyright © 2001-2025 迅投QMT社区 版权所有 All Rights Reserved. 京ICP备2025122616号-3
关灯 快速发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表