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

前言


提示:以下是本篇文章正文内容,下面案例及代码仅作演示,不作为交易推荐。

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

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

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

通达信自选股文件类型为通达信自定义的.blk。通过查找发现,这个版本的自选股文件在:D:
ew_tdxT0002locknew目录下,文件名称为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:
ew_tdxT0002locknew  # 主目录路径

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账号才可以实现的哦!

总结

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

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

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容