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

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

文章目录

  • 前言
  • 一、通达信自选股文件所在位置
  • 二、通达信自选股文件数据结构
  • 三、使用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账号才可以实现的哦!
在这里插入图片描述

总结

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/594338.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

4月30日重庆某厂酸碱管道整改工作汇报-智渍洁

时间:2024.4.30 地点:******老厂酸碱管道整改 施工人员:王成、汪勇、郭建华 事项:老厂酸碱管道更换 完成进度100%酸碱管道支架以添加完成!碱管道保温已完成! 1吨桶未完成2主水管漏水未处理,3酸 水泵需更换全新4室内少许添加活未完成。 4月30日…

精析React与Vue架构异同及React核心技术——涵盖JSX、组件、Props、State、生命周期与16.8版后Hooks深化解析

React,Facebook开源的JavaScript库,用于构建高性能用户界面。通过组件化开发,它使UI的构建、维护变得简单高效。利用虚拟DOM实现快速渲染更新,适用于单页应用、移动应用(React Native)。React极大推动了现代…

2-qt之信号与槽-简单实例讲解

前言、因实践课程讲解需求,简单介绍下qt的信号与槽。 一、了解信号与槽 怎样使用信号与槽? 概览 还记得 X-Window 上老旧的回调函数系统吗?通常它不是类型安全的并且很复杂。(使用)它(会)有很多…

Redis-分片机制

概述 业务需要:由于单台redis内存容量是有限的,无法实现海量的数据实现缓存存储 概念:由多个redis节点协助工作的机制就是redis的分片机制 作用:为了实现redis扩容 特点:分片机制把该机制中包含的多台redis缓存服务…

RK3568 学习笔记 : u-boot 下通过设置 env ethact 设置当前工作的以太网设备

前言 正点原子 :RK3568 开发板 atompi-ca1 默认有两个网口,通过 u-boot mii 命令,可以查看 网口信息 > mii device MII devices: ethernetfe010000 ethernetfe2a0000 Current device: ethernetfe010000u-boot 下的以太网,不同…

如何为 Nestjs 编写单元测试和 E2E 测试

前言 最近在给一个 nestjs 项目写单元测试(Unit Testing)和 e2e 测试(End-to-End Testing,端到端测试,简称 e2e 测试),这是我第一次给后端项目写测试,发现和之前给前端项目写测试还…

UDP 的报文结构

一.UDP的报文结构 1.UDP的简单介绍 UDP是传输层协议,它是无连接,不可靠传输,面向数据报,全双工 1.无连接:UDP是一种无连接的传输协议,通信双方不需要在发送数据之前建立连接。相比之下,TCP是面向连接的协议,在传输数…

【除了协程还有哪些方式可以实现异步编程】

在Unity中,除了使用协程实现异步编程外,还有以下几种方法: 异步加载资源: 使用UnityWebRequest类进行异步加载资源,这在加载网络资源或动态加载资源时非常有用。 using UnityEngine; using UnityEngine.Networking;…

【Linux】进程控制 之 进程创建 进程终止 进程等待 进程替换

👦个人主页:Weraphael ✍🏻作者简介:目前正在学习c和算法 ✈️专栏:Linux 🐋 希望大家多多支持,咱一起进步!😁 如果文章有啥瑕疵,希望大佬指点一二 如果文章对…

每日一博 - 闲聊架构设计中的多级缓存设计

文章目录 方法论概述客户端缓存应用层缓存服务层缓存缓存设计的注意事项总结 思维导图戳这里 方法论概述 从客户端到服务层,缓存的应用广泛而重要。通过合理的缓存设计,能够有效地提高系统的性能并降低延迟。 客户端缓存 在客户端层面,浏览…

LLM2Vec介绍和将Llama 3转换为嵌入模型代码示例

嵌入模型是大型语言模型检索增强生成(RAG)的关键组成部分。它们对知识库和用户编写的查询进行编码。 使用与LLM相同领域的训练或微调的嵌入模型可以显著改进RAG系统。然而,寻找或训练这样的嵌入模型往往是一项困难的任务,因为领域内的数据通常是稀缺的。…

基于AT89C51单片机的温度上下限自动控制检报警设计

点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/89247694?spm=1001.2014.3001.5501 C 源码+仿真图+毕业设计+实物制作步骤+06 题 目 基于单片机的温度检测调节系统设计 姓 名 学 号 专业班级 指导教师 年 月 日 任务书 …

Nginx 从入门到实践(2)——Rewrite重写

Nginx Rewrite Rewrite重写 Nginx Rewriteurl组成说明Rewrite基本概述Rewrite使⽤场景rewrite优点 Rewrite配置语法location匹配概述 if指令if 判断指令语法nginx以及if 判断可使用的全局变量 set命令return指令 url组成说明 https://cn.bing.com/search?qNginxRewrite&P…

udp/tcp回显网络编程

udp DatagramSocket 用于接收和发送udp数据报 构造方法: DatagramSocket():创建一个UDP数据报套接字的Socket,绑定到本地上 一个随机可用端口上,一般用于客户端DatagramSocket(int port):创建一个UDP数据报套接字的Socket,绑定到…

Proxmox VE 8 用SDN隔离用户网络

作者:田逸(formyz) 最新发布的Proxmox VE(以下简称PVE) 8在Web管理后台集成了易于操作的SDN(软件定义网络)功能插件,其实质是对不同的PVE用户指定不同的网络,进行逻辑隔离…

将要上市的自动驾驶新书《自动驾驶系统开发》中摘录各章片段 4

第十三章 车联网 数字化设备正变得越来越普遍并且相互联系。这些设备向数字生态系统智能部分的演进创造了迄今为止尚未解决安全问题的新颖应用。一个特定的例子是车辆,随着车辆从简单的交通方式发展到具有新的感知和通讯功能的智能实体,就成为智能城市的…

屏蔽罩材质和厚度对屏蔽效能的影响

​ 一.屏蔽效能的影响因素 屏蔽效能的影响因素主要有两个方面:屏蔽材料的特性和厚度;如下图所示,电磁波经过不同媒介时,会在分界面形成反射,穿过界面的电磁波一部分被反射回去,这部分能量损失…

偶然发现了Python的一个BUG。。。

一般情况下,dict(id1, **{id: 1})这句代码应该报TypeError。但如果在捕获了其他异常的情况下,再来执行这句代码,却是会报KeyError,如下图: Python3.10和Python3.9也能复现该情况,正当我摩拳踩掌&#xff0c…

百度下拉框负面信息如何删除?

百度头条360等搜索引擎,作为人们获取信息的主要途径之一。然而,一些知名的企业或个人可能会面临在搜索的下拉框中出现负面信息的问题,这可能对其声誉和形象造成不良影响。小马识途营销顾问根据自身从业经验,针对这类情况提出以下建…

【精品毕设推荐】基于JSP物流信息网的设计与实现

点击免费下载原文及代码、PPT 摘要 本文讲述了基于JSP物流信息网的设计与实现。该系统使用java语言开发,使系统具有更好的平台性和可扩展性。 该系统实现了用户登录、注册、查询快递信息、快递公司注册成为合作伙伴以及系统管理员对信息进行管理等功能。系统的主…