Py学习  »  Python

做通达信自定义数据时,必用的6种Python代码

一场孤独的自我修行 • 2 周前 • 62 次点击  


数据是个宝,研究少烦恼

挖的深,看的远,找规律

做笔记,练盘感,多总结

★★★★博文原创不易,源码使用过程中,如有疑问的地方,欢迎大家指正留言交流。喜欢的老铁可以点赞+收藏分享+置顶,小红牛在此表示感谢。★★

Python股票热点方向+龙头标的复盘系统6.66

股票热点数据分类统计系统3.0(padans+matplotlib+sqlite3)

股票精简节点记事本2.0优化版(tkinter+json)

量化教程: 教你快速上车,通达信量化平台(TdxQuant太强了,真香啊)

对复盘系统sqlites数据库中的,数据按时间截取数据

Python处理复盘系统中,sqlite3数据库中的json热点和行业字段

模拟炒股K线训练系统2.0(threading+mplfinance)

股票自选股公告系统1.0

Python提取通达信,自定义板块中成分股代码

教你用Python下载东财业绩报,做tdx自定义数据。

Python指数月线回测系统,回测逻辑3种新写法

(简易版)Ex写通达信自定义序列+外部数据1.0

使用Excel制作通达信自定义外部数据,安排!!!

通达信自定义数据的制作+导入+显示+选股

Tdx#自定义数据常用的指标编写与注释

通达信实现股票联动,消息号优化探测的方法1.2

200条复盘核心及细分点(仅供参考)

200条关于热点和龙头股的理解(仅供参考)

龙头股Vs跟风股(杂毛)200条(仅供参考)

通达信指标公式34:避雷参考,选股前,必须优先排除有垃圾属性的股。

通达信指标公式33:严重异动提醒,计算10/30日的涨跌幅偏离值

1.对股票属于的市场类型做标识符梳理:当股票代码为60,68开头='1|'+时间+'|',30,00开头='0|' ,92开头'2|'。

    def get_stock_type(code):        if code.startswith(('60''68')):            return '1'        elif code.startswith(('30''00')):            return '0'        elif code.startswith('92'):            return '2'        else:            return '3' # 3为其他的,不一定真存在先着

2.对股票代码处理(删除前缀和后缀)

添加前缀:比如用于网页字段或tq量化平台中需要添加前缀等,才能解析到正确的地址。如sh600519,或者sh.600519字母大小写开头等,自己根据当时的需求处理。

    def add_prefix(code):        code = code.strip()        if not code.isdigit():


    
            return None        if code.startswith(('60''68')):            return f"sh{code}"        elif code.startswith(('30''00')):            return f"sz{code}"        elif code.startswith('92'):            return f"bj{code}"        else:            return None

去掉文本或字母开头类型的前缀或后缀:适用于自定义数据,比如把前后缀,sh600519或者600519.sh转化成600519,只取股代码。

def extract_code(s):    """从 'sh600519' 或 '600519.sh' 中提取6位数字代码"""    if s[0].isalpha():          # 前缀格式,如 sh600519        return s[-6:]           # 取右边6个字符    elif s[-1].isalpha():       # 后缀格式,如 600519.sh        return s[:6]            # 取左边6个字符    else:        return s                # 已经是纯数字
# 测试codes = ["sh600519""600519.sh"]for c in codes:    print(f"{c} -> {extract_code(c)}")  # 输出600519

自定义板块中的前缀数据格式为1600519,对于数值类型的的前后缀我们这样处理,取右边 6 个字符:使用 s[-6:],取左边 6 个字符:使用 s[:6]。

3.日期处理:对于序列数据通达信格式有要求,必须为YYYYMMDD 格式(如 20260506),以下可以将不同格式的日期字符串统一转换。通过 strptime 解析原始格式,再用 strftime 输出目标格式。

# -*- coding: utf-8 -*-# @Author : 小红牛# 微信公众号:gxzfp888from datetime import datetime
def format_to_yyyymmdd(date_str, original_format):    """    将指定格式的日期字符串转换为 YYYYMMDD 格式。
    参数:        date_str: 日期字符串,如 '2026-05-06'        original_format: 原字符串的格式,如 '%Y-%m-%d'
    返回:        YYYYMMDD 格式的字符串,如 '20260506'    """    dt = datetime.strptime(date_str, original_format)    return dt.strftime('%Y%m%d')
# 示例:不同格式的日期转换examples = [    ("2026-5-6""%Y-%m-%d"),          # 连字符分隔    ("2026/05/06""%Y/%m/%d"),          # 斜线分隔    ("06 May 2026""%d %b %Y"),         # 英文缩写月份    ("06 May 2026""%d %B %Y"),         # 英文完整月份(这里May是缩写,实际用%h或%b)    ("20260506""%Y%m%d"),              # 已经是目标格式    ("06-05-2026"" %d-%m-%Y"),          # 日-月-年    ("2026年05月06日""%Y%m%d日"),   # 中文格式]
for date_str, fmt in examples:    try:        result = format_to_yyyymmdd(date_str, fmt)        print(f"{date_str:20} -> {result}")    except ValueError as e:        print(f"{date_str:20} 解析失败:{e}")

输出内容:

2026-5-6           -> 202605062026/05/06           -> 2026050606 May 2026          -> 2026050606 May 2026          -> 2026050620260506             -> 2026050606-05-2026           -> 2026050620260506日        -> 20260506
4.数值处理:主要是四舍五入和除以1w(数据值比较大时,让显示精简)
value = 123456789  # 单位:元
# 转换为万元value_wan = value / 10000  # 12345.6789
# 四舍五入保留 2 位小数result = round(value_wan, 2)  # 12345.68
print(result)  # 输出 12345.68
这样写也可以
 f"{float(value) / 10000:.2f}"
5.拼接字段:把处理好的股代码+日期等字符串用f"{}"格式化操作,拼接成通达信能够识别的标准格式。

自定义序列数据:标识符+‘|’+股代码+‘|’+日期+‘|’+数值+换行符,如下,amout数值保留两位小数处理。

f"{stock_type}|{code}|{date_compact}|{amount:.2f}\n")

自定义外部数据:股代码+‘|’+文本或数值内容+‘|’+换行符+|0.000

line1 = f"{market}|{code}|{qoq} 净利润:{profit + '万' if profit else ''} 营业收入{revenue + 


    
'万' if revenue else ''} {yoy} {date}"line1 = ' '.join(line1.split())  # 合并多余空格f"{line1}\n|0.000"

6.数据保存:把拼接好的数据用open函数写入,保存数据即可,可以参考以下部分代码写法,具体的以实际需求为主。

with open(sell_filename, 'w', encoding='utf-8'as f_sell:    for code, dt, amount in sell_results:        stock_type = self.get_stock_type(code)        f_sell.write(f"{stock_type}|{code}|{date_compact}|{amount:.0f}\n")

温馨提示:股市有风险,投资需谨慎。本文所写内容仅供粉丝们参考使用,仅为个人研究观点表述,股友们须自己思考与分析股市。


-!! 完毕 ,感谢您的收看!!-


-------★历史博文集合★ ------

股软件  龙虎榜小红牛分析系统  资金大单系统 

通达信主附图指标改选股器   通达信自定义数据系统

自定义数据 其他股软  Ex系统 每日收盘数据

 通达信小技巧   tdx指标编写教程  Tdx指标公式

龙虎榜教程  游资盈亏数据  产业链上下游  股学堂

量化教程   指标回测  Python  我的股票笔记

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/195956