

数据是个宝,研究少烦恼
挖的深,看的远,找规律
做笔记,练盘感,多总结

★★★★★博文原创不易,源码使用过程中,如有疑问的地方,欢迎大家指正留言交流。喜欢的老铁可以点赞+收藏分享+置顶,小红牛在此表示感谢。★★★★★
股票热点数据分类统计系统3.0(padans+matplotlib+sqlite3)
量化教程: 教你快速上车,通达信量化平台(TdxQuant太强了,真香啊)
Python处理复盘系统中,sqlite3数据库中的json热点和行业字段
模拟炒股K线训练系统2.0(threading+mplfinance)
通达信指标公式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 Noneif 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(): # 前缀格式,如 sh600519return s[-6:] # 取右边6个字符elif s[-1].isalpha(): # 后缀格式,如 600519.shreturn 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 datetimedef 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 -> 202605062026年05月06日 -> 20260506
value = 123456789 # 单位:元# 转换为万元value_wan = value / 10000 # 12345.6789# 四舍五入保留 2 位小数result = round(value_wan, 2) # 12345.68print(result) # 输出 12345.68
f"{float(value) / 10000:.2f}"自定义序列数据:标识符+‘|’+股代码+‘|’+日期+‘|’+数值+换行符,如下,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")
温馨提示:股市有风险,投资需谨慎。本文所写内容仅供粉丝们参考使用,仅为个人研究观点表述,股友们须自己思考与分析股市。
-!! 完毕 ,感谢您的收看!!-
-------★★历史博文集合★★------
