文章声明:本内容为个人的业余研究,和任何单位,机构没有关系,文章出现的股票代码,全部只是测试例子,不做投资参考,投资有风险,代码学习使用,不做商业用途
最近在建立量化网页的内容,还没有写工具的策略使用使用教程,虽然我全部上线了
http://14.103.193.242:9999/xms_quants.html


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

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

ptrade的

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

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

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

点击编辑进入输入账户

输入通达信板块路径

设置自定义交易板块

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

设置交易通知

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

点击运行就可以

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

板块自己手动建立

立马触发交易买入

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

立马买入

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


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

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


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

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

部分代码参考,完整的网页下载,知识星球下载就可以
#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