#实时显示50,300,500,1000,创业板实时累积成交占比/全市场 和相对前一天的变化
import pandas as pd
import csv
from datetime import datetime
import time
import datetime
from gm.api import *
import tkinter as tk # 使用Tkinter前需要先导入
from tkinter import ttk
import threading
from time import sleep
import pytz
set_token('*******')
#打包之后报时区错误。。才设置时区。。
sh = pytz.timezone('Asia/Shanghai')
today = datetime.date.today()
#today='2023-02-21'
print(today)
df_date = history(symbol='SHSE.000016', frequency='1d', start_time='2023-01-01', end_time=today,
fields='bob,eob', df=True)
#print(df_date)
#yesterday = today - datetime.timedelta(days=1)
#上个交易日
yesterday=str(df_date.iloc[-1,1])[0:10]
print(yesterday)
#昨天各指数的分钟线,成交量和起止时间
df_y_50 = history(symbol='SHSE.000016', frequency='60s', start_time=yesterday, end_time=today,
fields='volume,bob,eob', df=True)
df_y_300=history(symbol='SHSE.000300', frequency='60s', start_time=yesterday, end_time=today,
fields='volume,bob,eob', df=True)
df_y_500=history(symbol='SHSE.000905', frequency='60s', start_time=yesterday, end_time=today,
fields='volume,bob,eob', df=True)
df_y_1000=history(symbol='SHSE.000852', frequency='60s', start_time=yesterday, end_time=today,
fields='volume,bob,eob', df=True)
df_y_006=history(symbol='SZSE.399006', frequency='60s', start_time=yesterday, end_time=today,
fields='volume,bob,eob', df=True)
df = pd.DataFrame(data=None, columns=["time", "50/全市场", "300/全市场", "500/全市场", "1000/全市场", "创业板/全市场", "50T/Y", "300T/Y",
"500T/Y", "1000T/Y", "创业板T/Y"])
#print(df_y_50)
#指标计算,返回列表
def gm(time):
# 上证A股成交量
sh_data = current(symbols='SHSE.000002')
# print(current_data)
# print("===============")
try:
sh_a_vol = list(sh_data[0].values())[5]
except Exception:
print(time)
print("上证A股成交量读取失败")
sh_a_vol=1
# print(list(current_data[0].values())[5])
# 深证A股成交量
sz_data = current(symbols='SZSE.399107')
# print(sz_data)
# print("===============")
try:
sz_a_vol = list(sz_data[0].values())[6]
except Exception:
print(time)
print("深证A股成交量读取失败")
sz_a_vol=1
# print(list(current_data[0].values())[6])
# 50成交量
df_50 = current(symbols='SHSE.000016')
# print(df_50)
try:
vol_50 = list(df_50[0].values())[5]
except Exception:
print(time)
print("50成交量读取失败")
vol_50=0
# print(vol_50)
# 300成交量
df_300 = current(symbols='SHSE.000300')
# print(df_300)
try:
vol_300 = list(df_300[0].values())[5]
except Exception:
print(time)
print("300成交量读取失败")
vol_300=0
# print(vol_300)
# 500成交量
df_500 = current(symbols='SHSE.000905')
# print(df_500)
try:
vol_500 = list(df_500[0].values())[5]
except Exception:
print(time)
print("500成交量读取失败")
vol_500=0
# print(vol_500)
# 1000成交量
df_1000 = current(symbols='SHSE.000852')
# print(df_1000)
try:
vol_1000 = list(df_1000[0].values())[5]
except Exception:
print(time)
print("1000成交量读取失败")
vol_1000=0
# print(vol_1000)
# 创业板成交量
df_006 = current(symbols='SZSE.399006')
# print(df_006)
try:
vol_006 = list(df_006[0].values())[6]
except Exception:
print(time)
print("创业板成交量读取失败")
vol_006=0
# print(vol_006)
#沪深A股总成交量,跟所有个股相加有差
total_a=sh_a_vol+sz_a_vol
if total_a==0:
n_lst = []
return n_lst
#各指数成交量占比
t50=vol_50/total_a
t300=vol_300/total_a
t500=vol_500/total_a
t1000=vol_1000/total_a
t006=vol_006/total_a
#测试用
#time=time- datetime.timedelta(hours=2)
#print(time)
#变成无时区
time= time.replace(tzinfo=None)
df_time=pd.read_csv("E:\\py\\stock\\50-1000\\current\\TS.csv")
#超过交易时间则返回空列表
if time<pd.to_datetime(str(today)+' 09:30:00') or time>pd.to_datetime(str(today)+' 15:00:00') or (time>pd.to_datetime(str(today)+' 11:30:00') and time<pd.to_datetime(str(today)+' 13:00:00')):
n_lst=[]
return n_lst
df_time['bob']=pd.to_datetime(df_time['bob'])
df_time['eob']=pd.to_datetime(df_time['eob'])
try:
#下午收盘前集合竞价没数据
e_index = df_time[(df_time['bob'] < time)&(df_time['eob'] >= time)]['e_index'].values[0]
except Exception as e:
print("Exception")
print(time)
n_lst = []
return n_lst
print("=======================")
print(time)
print(e_index)
# 前一天成交量
# df_y_50 = history(symbol='SHSE.000016', frequency='60s', start_time=yesterday, end_time=today,
# fields='volume,bob,eob', adjust=ADJUST_PREV,
# adjust_end_time=today, df=True)
# print(history_data)
# print(df_y_50)
# df_y_50.to_csv('y50.csv',index=False)
#前一天的累计到该时刻的成交量
y50=df_y_50[0:e_index+1]['volume'].sum()
print(y50)
y300 = df_y_300[0:e_index + 1]['volume'].sum()
y500 = df_y_500[0:e_index + 1]['volume'].sum()
y1000 = df_y_1000[0:e_index + 1]['volume'].sum()
y006 = df_y_006[0:e_index + 1]['volume'].sum()
# print("==========")
# print(y50)
#计算各指数成交量今天/昨天
ty50=vol_50/y50
ty300 = vol_300 / y300
ty500 = vol_500 / y500
ty1000 = vol_1000 / y1000
ty006 = vol_006 / y006
#百分数取两位小数
tx_lst=[str(time)[0:19],str('{:.2%}'.format(t50)),str('{:.2%}'.format(t300)),str('{:.2%}'.format(t500)),str('{:.2%}'.format(t1000)),str('{:.2%}'.format(t006)),str('{:.2%}'.format(ty50)),str('{:.2%}'.format(ty300)),str('{:.2%}'.format(ty500)),str('{:.2%}'.format(ty1000)),str('{:.2%}'.format(ty006))]
# tx=str(time)[0:19]+" "+str('{:.2%} '.format(t50))+" "+str('{:.2%} '.format(t300))+" "+\
# str('{:.2%} '.format(t500))+" "+str('{:.2%} '.format(t1000))+" "+str('{:.2%} '.format(t006))+ \
# str(' {:.2%} '.format(ty50)) + " "+str('{:.2%} '.format(ty300)) + " "+str('{:.2%} '.format(ty500)) + " "+str(' {:.2%} '.format(ty1000)) + " "+str('{:.2%}'.format(ty006))
return tx_lst
def monitor(tree):
while True:
time = datetime.datetime.now(sh)
# print(time)
# print(str(time)[17:19])
if str(time)[17:19] == '00':
#if str(time)[18:19] == '0':
tx_lst = gm(time)
if len(tx_lst)==0:
sleep(10)
continue
global df
df.loc[len(df)]=tx_lst
update(tree,tx_lst)
sleep(5)
return None
def update(tree,tx_lst):
#从第一行插入,如果从最后一行就把0换成‘END’
tree.insert('', 0, values=tx_lst)
# i = len(df) - 1
# while i >= 0:
# t_lst = df.loc[i, :].values.tolist()
# tree.insert('', 'end', values=t_lst)
# i = i - 1
return None
def main():
window = tk.Tk()
window.title('update_1379')
#窗口大小
window.geometry('1300x500') # 这里的乘是小x
#纵轴滚动条
ybar = ttk.Scrollbar(window, orient='vertical')
#表格列名列表
col_lst = ["time", "50/全市场", "300/全市场", "500/全市场", "1000/全市场", "创业板/全市场", "50T/Y", "300T/Y",
"500T/Y", "1000T/Y", "创业板T/Y"]
#插入表格
tree = ttk.Treeview(window, columns=col_lst, show='headings',yscrollcommand=ybar.set)
ybar['command'] = tree.yview
tree.grid()
#ybar.grid(row=0, column=1, sticky='ns')
tree.place(x=20, y=10)
#第一列
tree.column('time', width=200, anchor='center')
for col in col_lst:
if col == 'time':
continue
tree.column(col, width=90, anchor='center')
for col in col_lst:
tree.heading(col, text=col)
ybar.pack(side="right", fill="y")
#表格跟窗口一样大
tree.pack(side='left', fill="both", expand=True)
# ybar.config(command=tree.yview)
# ybar.grid(row=0, column=1, sticky='ns')
# ybar.pack(side='right', fill='y')
#t1=threading.Thread(target=update,args=(tree,))
#必须用多线程,要不然会一直在window的mainloop循环,无法实时更新
t2=threading.Thread(target=monitor,args=(tree,))
#t1.start()
t2.start()
#让窗口一直显示
window.mainloop()
return None
if __name__ == "__main__":
main()
tkinter表格treeview实时显示不同指数成交量占比-掘金量化数据源
于 2023-02-22 10:56:21 首次发布