《中文Python穿云箭量化平台二次开发技术04》获取股票行情模块HP_tdx的说明、股票代码格式转换及应用示例【股票基本信息资料查询工具】

110 篇文章 121 订阅
108 篇文章 107 订阅

《中文Python穿云箭量化平台》是纯Python开发的量化平台,因此其中很多Python模块,我们可以自己设计新的量化工具,例如自己新的行情软件、新的量化平台、以及各种量化研究工具。
穿云箭自带指标公式源码运行模块,可以为其他量化平台提供量化功能扩展或量化功能增强效果。
HP_tdx模块是对pytdx的二次封装,同时简化的一些接口,方便用户获取行情。这个模块主要用穿云箭量化平台中,获取实时股票数据。 包括实时行情、历史行情、分笔数据、五档盘口数据、财务数据、除权数据、股票基本信息数据等。
目录中data中存放的HP_tdx所需的数据文件,例如板块文件,股票代码表等等数据。
HP_tdx中的股票代码:默认以元组方式构成股票名称“(市场,代码)”,其中市场0表示深圳市场股票,市场1表上海市场股票。例如,广发证券股票代码表示“(0,’000776’)”,中信证券股票代码表示“(1,’600030’)”。
一、相关接口的说明。
1、引入模块
首先安装pytdx模块, 在cmd窗口中,执行下面安装命令。
pip install pytdx

在程序开始,引入模块。
import HP_tdx as htdx #量化扩展行情模块

2、连接扩展行情服务器
tdxapi=htdx.TdxInit(ip=‘180.153.18.171’)
其中ip是行情服务器ip。port是端口。

3、断开服务器连接
htdx.disconnect()

4、获取股票代码的市场编码
htdx. get_market(code)
返回股票代码的市场编码。

5、获取股票代码表
htdx. GetSecurityList(nMarket = 0)

6、获取深圳股票代码表
htdx. getSZ()

7、获取上海股票代码表
htdx. getSH()

8、获取除权除息数据
htdx. get_xdxr_info(nMarket = 0,code=‘000001’)

9、获取财务数据
htdx. readbase(nMarket =-1,code=‘000776’)

10、查询股票K线数据
htdx. get_security_bars(nCategory=4,nMarket = -1,code=‘000776’,
nStart=0, nCount=240)

#(nCategory, nMarket, sStockCode, nStart, nCount)
#获取市场内指定范围的证券K 线,
#指定开始位置和指定K 线数量,指定数量最大值为800。
#参数:
#nCategory -> K 线种类
#0 5 分钟K 线
#1 15 分钟K 线
#2 30 分钟K 线
#3 1 小时K 线
#4 日K 线
#5 周K 线
#6 月K 线
#7 1 分钟
#8 1 分钟K 线
#9 日K 线
#10 季K 线
#11 年K 线
#nMarket -> 市场代码0:深圳,1:上海
#sStockCode -> 证券代码;
#nStart -> 指定的范围开始位置;
#nCount -> 用户要请求的K 线数目,最大值为800。

12、查询指数k线数据
htdx. get_index_bars(nCategory=4,nMarket = 1,code=‘000001’,
nStart=0, nCount=240)
#参数: K线周期, 市场ID, 证券代码,起始位置, 数量
#参数:
#nCategory -> K 线种类
#0 5 分钟K 线
#1 15 分钟K 线
#2 30 分钟K 线
#3 1 小时K 线
#4 日K 线
#5 周K 线
#6 月K 线
#7 1 分钟
#8 1 分钟K 线
#9 日K 线
#10 季K 线
#11 年K 线
#nMarket -> 市场代码0:深圳,1:上海
#sStockCode -> 证券代码;
#nStart -> 指定的范围开始位置;
#nCount -> 用户要请求的K 线数目,最大值为800。

13、查询分时行情
get_minute_time_data(nMarket = 0,code=‘000776’)

14、查询历史分时行情
get_history_minute_time_data(nMarket = 0,code=‘000776’,date=20190829)

15、查询分笔数据
get_transaction_data(nMarket = 0,code=‘000776’, nStart=0, nCount=5000)

16、查询历史分笔成交
get_history_transaction_data(nMarket = 0,code=‘000776’, nStart=0, nCount=5000,date=20170209)
17、查询公司信息目录
get_company_info_category(nMarket = 0,code=‘000776’)

18、查询F10公司信息目录
get_F10(code=‘000776’,item=‘股东研究’)

19、读取公司信息-最新提示
get_company_info_content(nMarket = 0,code=‘000776’,filename=‘000776.txt’,
start=0, length=13477)

20、读取财务信息
get_finance_info(nMarket = 0,code=‘000776’)

21、获取1个证券的盘口五档报价数据
get_security_quotes2(market=0,code=‘000776’)

22、获取多个证券的盘口五档报价数据
get_security_quotes3(codes=[(0, “000002”), (1, “600300”)])

23、返回板块中的股票
getblockx(bk=‘’)

24、返回股票所属板块
getblock3(code=‘’)

25、返回通达信板块代码格式
tdxcodes(codes)

26、获取自选股板块文件中股票
getzxgfile(file=‘zxg.blk’)

27、保存为自选股板块文件中股票
putzxgfile(l,file=‘ZXG2.blk’)

28、获取前复权K线
get_bars(nCategory=4,nMarket = -1,code=‘000776’,start=‘1991-01-01’,end=‘2021-10-22’,
index=False,autype=‘qfq’)

二、股票代码格式转换函数。
1、获取通达信股票市场编码
m=htdx.get_market(code) #获取通达信市场信息

2、qmt代码与通达信代码转换
#QMT代码转tdx代码
m,c=htdx.mtot(cc):

#tdx代码转QMT代码
cc= htdx.ttom(m,c)

3、同花顺代码转通达信代码
m,c=thstotdx©

4、数字股票代码转换字符串股票代码000001.SZ,600001.SH
cc= htdx. stockname(n)

5、数字股票代码转换字符串股票代码SZ000001,SH600001
cc= htdx. Stockname2(n)

6、数字股票代码转换字符串股票代码000001.SZ,600001.SS
cc= htdx. Stockname3(n)

7、数字股票代码转换聚宽字符串股票代码’000001.XSHE’, ‘600000.XSHG’
cc= htdx. Stockname4(n)

8、提取股票代码
‘000001.SZ’[0:6]
‘SZ000001’[2:8]

9、提取聚宽股票代码’000001.XSHE’, '600000.XSHG
‘000001.XSHE’[0:6]

10、字符数字转数字数字
n=int( c)

三、股票池相关
二、股票池
1、获取通达信板块股票池
htdx.getblock2a(‘近期强势’) #返回股票格式(1,’600030’)
htdx.getblock2(‘近期强势’) #返回股票格式’600030’

2、获取通达信或大智慧软件自选板块股票池
getzxgfile(file=‘C:\new_tdx\T0002\blocknew\zxg.blk’) #返回股票格式(1,’600030’)

3、获取问财股票池
import wencai
#querys = “今日热度前250” # 问句
querys = “例如最近人气排名前100名+资金流入前100名+最近热点前100名,涨幅在-2%到10%之间” # 问句
codes=[]
data = wencai.get_wc(query=querys)
cc=data.股票代码.to_list()
for c in cc:
m,c2=thstotdx( c)
codes.append((m,c2))

《中文Python穿云箭量化平台》提供了丰富的行情接口,也可以使用用户获取的任何行情接口。
我们可以很容易设计一个股票基本信息查询工具,相关代码如下。

# -*- coding: utf-8 -*-
# 编程_F10窗口
import time
import tkinter as tk
import  tkinter.ttk  as  ttk   #导入Tkinter.ttk
from tkinter import scrolledtext  #装载scrolledtext模块
import  HP_tka  as  htk   #导入htk
import HP_global as hg 
import HP_tdx as htdx #通达信行情模块
import HP_tdxgs as hgs  #小白通达信公式库
from HP_formula import * #导入小白公式模块

root=tk.Tk()
root.title('股票基本信息资料查询工具')
width=1000  #把窗口宽度(单位:像素)300赋值给变量width
height=600 #把窗口高度(单位:像素)300赋值给变量height
x,y=50,50  #给屏幕坐标(x,y)赋值(100,200)
root.geometry('{}x{}+{}+{}'.format(width,height, x, y))  #改变窗口位置和大小
  
##获取窗口信息
hg.screenwidth = root.winfo_screenwidth()  #获取屏幕宽度(单位:像素)
hg.screenheight = root.winfo_screenheight()  #获取屏幕高度(单位:像素)
hg.winW= root.winfo_width()   #获取窗口宽度(单位:像素)
hg.winH = root.winfo_height()  #获取窗口高度(单位:像素)    
hg.tabControl=root
hg.tab7=root

#小白框架控件回测
hg.UserFrame=None
hg.UserFig=None
hg.UserPlot=None
hg.UserCanvas=None
hg.date_tickers=None    
hg.stype=2  #股票数据类型
hg.gtype=3  #指标线数量
hg.stock='000001' #股票代码 

hg.gmarket=0
hg.df=None #默认df
hg.sday='2018-10-01'
hg.eday=time.strftime('%Y-%m-%d',time.localtime(time.time()))
hg.index=False
hg.formula='PXCPX'
hg.MA1=5
hg.MA2=10
hg.MA3=20
hg.MA4=60
hg.MA5=120
hg.MA6=240
hg.MAV1=5
hg.MAV2=10
hg.money=1000000.00
hg.stamp_duty=0.001   #印花税 0.1%
hg.trading_Commission=0.0005    #交易佣金0.05%
hg.stop_loss_on=True #允许止损
hg.stop_loss_max=50 #止损3,就停止交易
hg.stop_loss_range=0.05   #止损幅度
hg.hcstock='000001'
hg.mstock='600030'
hg.mds='2019-07-10 09:30:00'
hg.mde=time.strftime('%Y-%m-%d',time.localtime(time.time()))+' 15:30:00'
hg.hctitle=''
hg.vstock=hg.stock
hg.vtitle=''
##黑底色
hg.ubg='#07000d'
hg.ufg='w'
hg.utg='w'
hg.uvg='#FFD700'
#    #白底色
#    hg.ubg='w'
#    hg.ufg='b'
#    hg.utg='b'
#    hg.uvg='#1E90FF'
tdxapi=htdx.TdxInit(ip='40.73.76.10',port=7709)
###############################################################
开发者信息
#独狼荷蒲qq:2775205
#中文Python学习群:983815766
#电话微信:18578755056
#抖音号:xb202305
#技术博客: https://blog.csdn.net/hepu8
# 其他QQ群:
# PythonTkinterGUI : 517029284
# Python学习交流: 934165481
# 小白量化MT5群:  556894446
#小白量化彩票软件开发: 712300766 
class UserF10(tk.Frame): # 继承Frame类  
    def __init__(self, master=None,stock=''):  
        tk.Frame.__init__(self, master)  
        self.stock=stock
        if self.stock=='':
            self.stock=hg.stock
        self.root = master #定义内部变量root  
        self.button2=None
        self.r=1
        self.c=8
        self.b=[]
        self.stockt = tk.StringVar()
        self.stockt.set(hg.stock)           
        self.F10text=scrolledtext.ScrolledText(self,undo=True,bg='#FFF8DC')
        self.F10text.pack(side=tk.TOP, fill=tk.BOTH, expand=1,ipady=1,pady=1,ipadx=1,padx=1)
        self.init()
        self.pack(fill=tk.BOTH, expand=1,)
    
    def bt(self,n=0):
        import HP_tdx as htdx
        mk=htdx.get_market(self.stock)
        df=htdx.get_company_info_category(mk,self.stock)
        self.F10text.delete(2.0,tk.END)
        self.F10text.insert(tk.INSERT,'\n\n')        
        t=htdx.get_F10(self.stock,df.name[n])
        self.F10text.insert(tk.INSERT,t)
    
    def bt2(self,e=None):
        self.stockn=self.stockt.get()
        self.stockn=self.stockn.strip()
        self.stockn=self.stockn.zfill(6)
        #print(self.stockn)
        self.stock=self.stockn
        hg.stock=self.stockn
        self.fr.pack_forget()
        self.init()
        #self.pack(fill=tk.BOTH, expand=1,)
        #g.status.text(2,'查看'+self.stock+'  F10信息!')
        self.bt(n=0)
        self.update()
    
    def init(self):
        import HP_tdx as htdx
        mk=htdx.get_market(self.stock)
        df=htdx.get_company_info_category(mk,self.stock)
        self.fr=tk.Frame(self.F10text)
        k=0
        for i in range(self.r):
            for j in range(self.c):
                def kk(self=self, k=k):
                    self.bt(k)
    
                self.button = tk.Button(self.fr,text=df.name[k],command=kk,cursor='hand2')
                self.b.append(self.button)
                self.button.grid(row=i, column=j, padx=1, pady=1, sticky=tk.E)
                k+=1
        lb6 = tk.Label(self.fr ,width=10, text='股票代码:',bg='#1E488F',\
                       fg='white')
        lb6.grid(row=0, column=self.c+1)
        #输入框 (Entry)
     
        self.entrystock = tk.Entry(self.fr,width=10, textvariable=self.stockt)
        self.entrystock.grid(row=0, column=self.c+2)        
        hg.stock_i=self.stockt
        
        self.button2 = tk.Button(self.fr,text='切换股票',command=self.bt2,cursor='hand2')  
        self.button2.grid(row=0, column=self.c+3, padx=1, pady=1, sticky=tk.E)
        self.entrystock.bind('<Key-Return>', self.bt2)   
        self.fr.pack(side=tk.TOP)
        self.F10text.window_create(tk.INSERT,window=self.fr)
        self.F10text.insert(tk.INSERT,'\n\n')
        t=htdx.get_F10(self.stock,df.name[0])
        self.F10text.insert(tk.INSERT,t)

f10f=UserF10(hg.tab7)
root.mainloop()

程序运行如下:
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/b8f81f4eadbd4a49b37e6150caed87ec.png

后面我们也会介绍如何设计K线行情及指标显示界面的设计。

好了,欢迎继续关注我的博客。后面我们介绍更多的二次开发技术。

超越自己是我的每一步!我的进步就是你的进步!

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

荷蒲

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

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

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

打赏作者

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

抵扣说明:

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

余额充值