tkinter表格treeview实时显示不同指数成交量占比-掘金量化数据源

#实时显示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()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值