提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、通达信自选股文件所在位置
- 二、通达信自选股文件数据结构
- 三、使用Python读写通达信自选股文件(附完整源代码)
- 1. 切换目录路径
- 2. 将list写入csv
- 3. 将csv文件读取为list
- 4. 代码之间的转换
- 四、PC终端和APP自选股同步
- 总结
前言
提示:以下是本篇文章正文内容,下面案例可供参考
我们在量化选股的后,有时候需要将股票添加到通达信里使用各种指标再检验检验,但如果有许多代码需要添加,一个一个输入就太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账号才可以实现的哦!
总结
最近,又折腾起了通达信,为方便自选股操作就写了以上代码。需要的小伙伴可以拿走使用。
写作不易,如有帮助到,不妨用发财的小手点个关注、点个赞再上机使用。