【大麦小米学量化】使用Python读写通达信自选股(含代码转换及完整源代码),想要通过通达信自选股实现量化自动关联交易的有福了

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言


提示:以下是本篇文章正文内容,下面案例可供参考

我们在量化选股的后,有时候需要将股票添加到通达信里使用各种指标再检验检验,但如果有许多代码需要添加,一个一个输入就太low了。这里给大家介绍一种方法,可以将选出的股票批量导入通达信自选股。导入完毕后,在通达信终端打开自选板块就可以直接查看。

这里我们以通达信版最新版本(通达信金融终端 V7.642)为例,不同版本自选股文件位置和名称可能不一致,我们可以在安装目录搜索*.blk即可。

一、通达信自选股文件所在位置

通达信自选股文件类型为通达信自定义的.blk。通过查找发现,这个版本的自选股文件在:D:\new_tdx\T0002\blocknew目录下,文件名称为ZXG.blk。我们用记事本就可以打开。
在这里插入图片描述

二、通达信自选股文件数据结构

用记事本打开ZXG.blk文件,仔细检查会发现,每个股票代码前面多了一个数字,总结后发现规律如下:深证为0,沪市为1,北交所为2。

三、使用Python读写通达信自选股文件(附完整源代码)

既然知道了自选股文件的位置和数据结构,那用Python按照csv文件的读写方法即可实现对自选股的操作。

这里简要介绍一下几个知识点,方便后续操作:

1. 切换目录路径

通过os.chdir(RootDir),将路径切换到通达信自选股文件所在目录,避免文件读写路径找不到的问题。

2. 将list写入csv

函数:list2csv(data,filename=‘output.csv’),可以将list写入csv文件,因为通达信不独占ZXG.blk,所以打开通达信也可以写入。

3. 将csv文件读取为list

函数:csv2list(filename),与前面相反,这个可以将csv文件内容读取为list。有些人习惯通过通达信选股,之后再通过其它客户端交易,这样就可以实现类似文件单的交易方法。不在股票池的新增持仓,在股票池的持仓,从股票池剔除的清仓。

4. 代码之间的转换

函数:code2id(code,kind),虽然股票代码只有6位,可是在不同的情境下,代码是不相同的。比如通达信自选股就需要添加一个数字来标识交易所。还有“代码.市场”这种比较常见的格式。为了方便大家,这里给出代码,可以轻松实现不同形式的转换,完成不同场景的应用。

下面就是完整的代码。示例通过问财选股,选完后再批量写入通达信自选股文件,但要在终端看到,需要重启下通达信终端才可以。

import csv
import os
RootDir = r'D:\new_tdx\T0002\blocknew' # 主目录路径
os.chdir(RootDir)  # 解决路径问题,就是切换工作路径到上面的路径
ZXG_file = 'ZXG.blk' # 自选股文件

def list2csv(data,filename='output.csv'):
    # 打开或创建CSV文件并指定写入模式, newline=''则不生成空行
    with open(filename, mode='w', newline='') as file:
        # 初始化CSV writer对象
        writer = csv.writer(file)
        # 遍历数据列表,逐行写入到CSV文件中
        for item in data:
            writer.writerow([item])
    print(f"已成功将数据写入{filename}文件!")

def csv2list(filename):
    ret_list = []
    # 打开CSV文件进行读取操作
    with open(filename) as f:
        f_reader = csv.reader(f)
        #循环文件中的每一行
        for row in f_reader:
            # print(row)
            ret_list.append(''.join(row)) 
        print(f"成功从{filename}文件中读取数据并转换为List")
    return ret_list

def code2id(code,kind):
    """ 转换代码函数 """
    # 深证为0,沪市为1,北交所为2
    code = ''.join(c for c in code if c.isdigit()) # 只取股票代码中数字代码部分
    # A股,股票代码转换,如:1601068,2300250
    if len(code) == 6 and kind == "ncode":
        if code[0] == "6" or code[0] == "9":  #上证股票
            return "1"+code
        if code[0] == "0" or code[0] == "3" or code[0] == "2":  #深证股票
            return "0"+code
        if code[0] == "4" or code[0] == "8":  #北证股票
            return "2"+code

    # A股,股票代码转化为ts_code,如300250.SZ
    if len(code) == 6 and kind == "ts_code":
        if code[0] == "6" or code[0] == "9":  #上证股票
            return code+".SH"
        if code[0] == "0" or code[0] == "3" or code[0] == "2":  #深证股票
            return code+".SZ"
        if code[0] == "4" or code[0] == "8":  #北证股票
            return code+".BJ"

if __name__ == "__main__": 

    if 1:
        # 读取通达信自选股文件
        ret = csv2list(filename=ZXG_file)
        print(ret)
    
    if 1:
        # 通过问财进行选股
        import pywencai
        query_str = '非停盘;非ST;连涨3天涨幅1%-4%;均线多头排列;无长上影线'# 根据需要自行修改,此处仅做演示,不做交易参考。
        df = pywencai.get(query=query_str, sort_key='股票代码', sort_order='asc', perpage=10 )
        code_list = df['股票代码'].values.tolist()
        print('code_list',code_list)
        
        # 将上面的代码转化为通达信自选股代码
        fav_list = [code2id(code,kind="ncode") for code in code_list]
        print('fav_list',fav_list)
        # 将转化为通达信代码的自选股写入自选股文件
        list2csv(fav_list,filename=ZXG_file)
        # 读取通达信自选股文件
        mystock = csv2list(filename=ZXG_file)
        # 将通达信自选股代码转化为普通代码
        fav_list = [code[1:7] for code in mystock]
        print('mystock',mystock)
        
        # 将自选股代码转化为ts_code,如300250.SZ
        code_list = [code2id(code,kind="ts_code") for code in fav_list]
        print('code_list',code_list)

成功从ZXG.blk文件中读取数据并转换为列表形式。
['0000651', '0002001', '0002128', '0002653', '0301004', '1600809', '1601229', '1603277', '1603883', '1688169']
code_list ['000651.SZ', '002001.SZ', '002128.SZ', '002653.SZ', '301004.SZ', '600809.SH', '601229.SH', '603277.SH', '603883.SH', '688169.SH']
fav_list ['0000651', '0002001', '0002128', '0002653', '0301004', '1600809', '1601229', '1603277', '1603883', '1688169']
已成功将数据写入ZXG.blk文件!
成功从ZXG.blk文件中读取数据并转换为列表形式。
mystock ['0000651', '0002001', '0002128', '0002653', '0301004', '1600809', '1601229', '1603277', '1603883', '1688169']
code_list ['000651.SZ', '002001.SZ', '002128.SZ', '002653.SZ', '301004.SZ', '600809.SH', '601229.SH', '603277.SH', '603883.SH', '688169.SH']
请按任意键继续. . .

添加完毕后,如图:
在这里插入图片描述


四、PC终端和APP自选股同步

通过上传即可实现将PC终端的自选股同步到云,云自然可以同步给APP。有人说,怎么不能自动同步呢?要想当然可以,不过要实现自动同步,是需要开通L2账号才可以实现的哦!
在这里插入图片描述

总结

最近,又折腾起了通达信,为方便自选股操作就写了以上代码。需要的小伙伴可以拿走使用。

写作不易,如有帮助到,不妨用发财的小手点个关注、点个赞再上机使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

IT里的交易员

分享是一种快乐,打赏是一种肯定

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

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

打赏作者

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

抵扣说明:

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

余额充值