自己做量化交易软件(21)通达信自选股文件的读写程序

自己做量化交易软件(21)通达信自选股文件的读写程序

我以前做过各种股票软件的自选股文件和板块数据的转换程序,见下图。
在这里插入图片描述
我们本篇文章介绍用Python实现通达信软件的自选股文件的读取和写入操作。
我们在做量化程序时,可以结合通达信软件共同使用。
1、我们用量化程序盘后选取股票池,存放到通达信软件的自选股板块中进行监控。
2、我们用通达信软件选出自选股。用Python来实现盘中监控和自动下单。
通达信软件的自选股文件的目录为:C:\tdx目录\T0002\blocknew
自选股文件名为:‘ZXG.blk’。
在通达信软件中使用快捷命令数字‘06’加回车,出现自选股板块行情列表。自选股文件名为:‘ZXG.blk’。
在通达信软件中,股票代码格式为:(市场,代码)
例如:深圳指数(0, ‘399001’),上海大盘 (1, ‘999999’)。
数据在’ZXG.blk’中以8个字节来存放。
深圳指数(0, ‘399001’),存放格式为chr(10)+‘0399001’。
上海大盘 (1, ‘999999’),存放格式为chr(10)+‘1999999’。
因此我们可以很容易写出python代码。
下图是通达信自选股列表。
在这里插入图片描述
下面给出程序代码:

#自选股数据转通达信股票列表
def getzxg(z):
    z2=z.split(chr(10))
    l=[]
    for i in range(1,len(z2)):
        z3=z2[i]
        l.append((int(z3[0:1]),z3[1:9]))
    return l

def getzxgfile(file='ZXG.blk'):
    f = open(file,'r')
    z=f.read()
    f.close()
    return getzxg(z)

#通达信股票列表转自选股数据转
def putzxg(l):
    s=''
    for i in range(len(l)):
        l2,l3=l[i]
        s=s+chr(10)+str(l2)+l3
    return s

def putzxgfile(l,file='ZXG2.blk'):
    f = open(file,'w')
    s=putzxg(l)
    f.write(s)
    f.close()
    return s


#测试
if __name__ == '__main__':
    zxg=getzxgfile('ZXG.blk')
    print(zxg)
    putzxgfile(zxg,'ZXG2.blk')
    zxg3=getzxgfile('ZXG2.blk')
    print(zxg3)

程序运行结果:

[(1, '600519'), (0, '399001'), (1, '999999'), (1, '600030'), (0, '000776')]
[(1, '600519'), (0, '399001'), (1, '999999'), (1, '600030'), (0, '000776')]

#独狼荷蒲qq:2775205
#通通小白python量化群:524949939
#电话微信:18578755056
#微信公众号:独狼股票分析

### 使用 Python 实现通达信自选股的读取和写入 #### 一、准备工作 为了能够通过 Python通达信自选股进行读取和写入操作,需要了解通达信自选股文件的存储路径以及其格式。 通常情况下,通达信自选股保存在一个特定目录下的 `.blk` 文件中。这些文件位于用户的个人资料夹内,具体位置可能因操作系统和个人设置而异[^2]。 对于 Windows 用户而言,默认路径可能是类似于 `C:\Users\用户名\.tdx\blocknew\` 或者其他由安装过程指定的位置。Linux 和 macOS 的用户则需查找相应环境中的配置说明来定位该文件所在之处。 #### 二、读取通达信自选股列表 要读取通达信自选股的数据,可以采用如下方法: ```python def read_tdx_stock_list(file_path): stock_codes = [] try: with open(file_path, 'r', encoding='gbk') as file: lines = file.readlines() for line in lines: code = line.strip().split('|')[1].strip()[:6] if not (code.startswith('0') or code.startswith('3')): continue stock_codes.append(code) return stock_codes except Exception as e: print(f'Error reading TDX block file: {e}') return [] file_path = r'C:\path_to_your_file.blk' stock_list = read_tdx_stock_list(file_path) print(stock_list) ``` 此函数会打开给定路径处的一个 .blk 文件,并解析其中每一行的内容以提取股票代码。这里假设每条记录是以竖杠分隔开来的字符串形式存在的;实际应用时应根据实际情况调整正则表达式的匹配逻辑。 #### 三、向通达信添加新的自选股项 当想要往现有的自选股集合里增加新成员时,则可以通过追加的方式修改对应的 .blk 文件: ```python import os def add_stocks_to_block(block_name, stocks, tdx_dir=r"C:\Users\YourName\.tdx"): blk_filename = f"{block_name}.blk" full_blk_path = os.path.join(tdx_dir, "blocknew", blk_filename) existing_lines = set() if os.path.exists(full_blk_path): with open(full_blk_path, 'rb') as fp: content = fp.read().decode('GBK') existing_lines.update(content.split('\n')) new_entries = [ f"1|{s}|{''.join([' ']*8)}|0\n".encode('GBK') for s in stocks if all([ isinstance(s, str), len(s) >= 6, any([c.isdigit() for c in s]), f"1|{s}" not in ''.join(existing_lines) ]) ] if new_entries: mode = 'ab+' if os.path.isfile(full_blk_path) else 'wb' with open(full_blk_path, mode) as fp: fp.writelines(new_entries) add_stocks_to_block("我的自选", ["000001"]) ``` 上述脚本定义了一个名为 `add_stocks_to_block()` 的功能,它接受三个参数:板块名称 (`block_name`)、待加入的新股列表(`stocks`)通达信根目录(`tdx_dir`) 。如果目标区块已经存在同名项目,则仅新增那些尚未存在于当前区块内的证券编号。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荷蒲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值