《中文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=stockif self.stock=='':self.stock=hg.stockself.root = master #定义内部变量root self.button2=Noneself.r=1self.c=8self.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 htdxmk=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.stocknhg.stock=self.stocknself.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 htdxmk=htdx.get_market(self.stock)df=htdx.get_company_info_category(mk,self.stock)self.fr=tk.Frame(self.F10text)k=0for 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+=1lb6 = 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.stocktself.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()
程序运行如下:
后面我们也会介绍如何设计K线行情及指标显示界面的设计。
好了,欢迎继续关注我的博客。后面我们介绍更多的二次开发技术。
超越自己是我的每一步!我的进步就是你的进步!