• hhhh


    from pyecharts import options as opts  # 全局、系列配置
    from pyecharts.charts import Bar, Grid, Line  # 柱形图
    from pyecharts.globals import ThemeType  # 主题风格
    from pyecharts.charts import Kline, Line, Bar, Gauge, Pie, Scatter, TreeMap  # K线图、线形图、柱状图、仪表盘、饼图、散点图、矩形树图
    from pyecharts.charts import Grid, Tab  # 组合组件、分页组件
    from pyecharts.components import Table  # 表格组件
    import time  # 时间模块
    import pandas as pd  # Pandas模块
    import numpy as np  # Numpy模块
    from sqlalchemy import create_engine  # 数据引擎模块
    
    conn = create_engine('mysql+pymysql://root:test@127.0.0.1:3306/quant_db?charset=utf8')  # 创建引擎
    
    ##########################################################################################################################################################
    # 统计数据
    
    # 上证指数
    sql01 = '''
                SELECT
                    trade_date,     -- 交易日期
                    `open`,            -- 开盘价
                    high,           -- 最高价
                    low,            -- 最低价
                    `close`,        -- 收盘价
                    pct_chg         -- 涨跌幅
                FROM
                    stock_daily 
                WHERE
                    ts_code = '000001.SH'
    '''
    
    # 深证指数
    sql02 = '''
                SELECT
                    trade_date,     -- 交易日期
                    `open`,            -- 开盘价
                    high,           -- 最高价
                    low,            -- 最低价
                    `close`,        -- 收盘价
                    pct_chg         -- 涨跌幅
                FROM
                    stock_daily
                WHERE
                    ts_code = '399001.SZ'
    '''
    
    # 创业板指
    sql03 = '''
                SELECT
                    trade_date,     -- 交易日期
                    `open`,            -- 开盘价
                    high,           -- 最高价
                    low,            -- 最低价
                    `close`,        -- 收盘价
                    pct_chg         -- 涨跌幅
                FROM
                    stock_daily
                WHERE
                    ts_code = '399006.SZ'
    '''
    
    # shibor
    sql04 = '''
                SELECT
                    date,           -- 交易日期
                    `on`            -- shibor利率
                FROM
                    shibor
    '''
    
    # 全市场成交额
    sql05 = '''
                SELECT
                    trade_date,                             -- 交易日期
                    SUM(amount)/100000000 AS 'amount'       -- 成交总额,亿
                FROM
                    stock_daily
                WHERE 
                    ts_code NOT IN ('000001.SH','399001.SZ','399006.SZ')
                GROUP BY
                    trade_date
    '''
    
    # 全市场竞价总额
    sql06 = '''
                SELECT
                    date,                             -- 交易日期
                    sum(money)/100000000 AS money     -- 竞价总额,亿
                FROM
                    call_auction
                GROUP BY
                    date
    '''
    
    # 北向资金
    sql07 = '''
                SELECT
                    trade_date,         -- 交易日期
                    hgt/100,            -- 沪股通,亿
                    sgt/100,            -- 深股通,亿
                    north_money/100     -- 北向资金,亿
                FROM
                    hsgt_moneyflow
    '''
    
    # 大单流向
    sql08 = '''
                SELECT
                    trade_date,                                                -- 交易日期
                    SUM(buy_md_amount-sell_md_amount)/1000 AS 'md_amount',     -- 中单净额/亿
                    SUM(buy_lg_amount-sell_lg_amount)/1000 AS 'lg_amount',     -- 大单净额/亿
                    SUM(buy_elg_amount-sell_elg_amount)/1000 AS 'elg_amount',  -- 超大单净额/亿
                    SUM(net_mf_amount)/1000 AS 'net_mf_amount'                 -- 资金净额/亿
                FROM
                    stock_moneyflow 
                GROUP BY
                    trade_date
    '''
    
    # 游资资金流向
    sql09 = '''
                SELECT 
                    date,                                                                                                      -- 交易日期
                    SUM(CASE WHEN (youziicon=1 AND direction='buy') THEN buy ELSE 0 END)/100000000 AS 'yxb',                   -- 一线游资买入,亿
                    SUM(CASE WHEN (youziicon=2 AND direction='buy') THEN buy ELSE 0 END)/100000000 AS 'djb',                   -- 顶级游资买入,亿
                    SUM(CASE WHEN (youziicon=1 AND direction='buy') THEN buy ELSE 0 END)/100000000 AS 'zmb',                   -- 知名游资买入,亿
                    SUM(CASE WHEN (dname='机构专用' AND direction='buy') THEN buy ELSE 0 END)/100000000 AS 'jgb',               -- 机构买入,亿
                    SUM(CASE WHEN (dname LIKE '%股通专用' AND direction='buy') THEN buy ELSE 0 END)/100000000 AS 'wzb',           -- 外资买入,亿
                    SUM(CASE WHEN (youziicon=1 AND direction='sell') THEN sell ELSE 0 END)/100000000 AS 'yxs',                 -- 一线游资卖出,亿
                    SUM(CASE WHEN (youziicon=2 AND direction='sell') THEN sell ELSE 0 END)/100000000 AS 'djs',                 -- 顶级游资卖出,亿
                    SUM(CASE WHEN (youziicon=1 AND direction='sell') THEN sell ELSE 0 END)/100000000 AS 'zms',                 -- 知名游资卖出,亿
                    SUM(CASE WHEN (dname='机构专用' AND direction='sell') THEN sell ELSE 0 END)/100000000 AS 'jgs',             -- 机构卖出,亿
                    SUM(CASE WHEN (dname LIKE '%股通专用' AND direction='sell') THEN sell ELSE 0 END)/100000000 AS 'wzs'        -- 外资卖出,亿
                FROM 
                    lhb_list
                GROUP BY 
                    date
    '''
    
    # 市场情绪
    sql10 = '''
                SELECT
                    t1.trade_date,                    -- 交易日期
                    t1.zt_fd_amount/100000000,        -- 涨停封单/亿
                    t2.dt_fd_amount/100000000,        -- 跌停封单/亿
                    t3.1b,                            -- 1板
                    t3.2b,                            -- 2板
                    t3.3b,                            -- 3板
                    t3.4b,                            -- 4板
                    t3.gdb,                            -- 高度板
                    t4.dr,                            -- 大肉股
                    t4.dm,                            -- 大面股
                    t5.szd5,                        -- 涨幅大于5%
                    t5.xdd5,                        -- 跌幅大于5%
                    t6.zrzt,                        -- 自然涨停
                    t6.ztzb,                        -- 自然跌停
                    t6.szjs,                        -- 上涨家数
                    t6.xdjs,                        -- 下跌家数
                    t6.zt,                            -- 涨停家数
                    t6.dt,                            -- 跌停家数
                    t6.zbl,                            -- 炸板率
                    t6.cgl,                            -- 昨日打板成功率
                    t6.yll                            -- 昨日打板盈利率
                FROM
                    -- 涨停封单金额
                    (SELECT trade_date,sum(fd_amount) AS 'zt_fd_amount' FROM limit_stock_list WHERE `limit` = 'U' GROUP BY trade_date) t1
                    
                    LEFT JOIN
                            -- 跌停封单金额
                            (SELECT trade_date,sum(fd_amount) AS 'dt_fd_amount' FROM limit_stock_list WHERE `limit` = 'D' GROUP BY trade_date) t2 ON t1.trade_date=t2.trade_date
                    
                    LEFT JOIN
                            -- 一字板,2板,3板以上,高度板
                            (SELECT date,COUNT(DISTINCT CASE WHEN lbc = 1 THEN `code` ELSE 0 END ) AS '1b',COUNT(DISTINCT CASE WHEN lbc = 2 THEN `code` ELSE 0 END ) AS '2b',COUNT(DISTINCT CASE WHEN lbc = 3 THEN `code` ELSE 0 END ) AS '3b',COUNT(DISTINCT CASE WHEN lbc = 4 THEN `code` ELSE 0 END ) AS '4b',COUNT(DISTINCT CASE WHEN lbc > 4 THEN `code` ELSE 0 END ) AS 'gdb' FROM limit_stock_lbc GROUP BY date) t3 ON t1.trade_date=t3.date
                    
                    LEFT JOIN
                            -- 大肉股,大面股
                            (SELECT trade_date,COUNT(DISTINCT CASE WHEN ((`close`-`open`)/`open`)>=0.12 THEN ts_code ELSE 0 END) AS 'dr',COUNT(DISTINCT CASE WHEN ((`close`-`open`)/`open`)<-0.12 THEN ts_code ELSE 0 END) AS 'dm' FROM stock_daily GROUP BY trade_date) t4 ON t1.trade_date=t4.trade_date
                
                    LEFT JOIN
                            -- 涨幅5%以上,跌幅5%以上
                            (SELECT trade_date,COUNT(DISTINCT CASE WHEN pct_chg >= 5 THEN ts_code ELSE 0 END) AS 'szd5',COUNT(DISTINCT CASE WHEN pct_chg <=- 5 THEN ts_code ELSE 0 END) AS 'xdd5' FROM stock_daily GROUP BY trade_date) t5 ON t1.trade_date=t5.trade_date
                    
                    LEFT JOIN
                            -- 自然涨停,涨停炸板,上涨家数,下跌家数,涨停家数,跌停家数,炸板率,昨日打板成功率,昨日打板盈利率
                            (SELECT `day`,zrzt, ztzb, szjs, xdjs, zt, dt, zbl, cgl, yll FROM scqx) t6 ON t1.trade_date=t6.`day`
                ORDER BY t1.trade_date DESC
    '''
    
    # 异动统计
    sql11 = '''
                SELECT
                    t1.`code`,                                                                                                                                                  -- 股票代码
                    t1.`name`,                                                                                                                                                  -- 股票名称
                    COUNT(CASE WHEN (chg_type IN ('8201', '8202', '8193', '4', '32', '64', '8207', '8209', '8211', '8213', '8215')) THEN t1.`code` ELSE 0 END) AS 'now_df',     -- 当天多方异动统计
                    COUNT(CASE WHEN (chg_type IN ('8204', '8203', '8194', '8', '16', '128', '8208', '8210', '8212', '8214', '8216')) THEN t1.`code` ELSE 0 END) AS 'now_kf',    -- 当天空方异动统计
                    t2.thrity_df,                                                                                                                                               -- 近30日多方异动统计
                    t2.thrity_kf                                                                                                                                                -- 近30日空方异动统计
                FROM
                    stock_change t1
                    LEFT JOIN (
                    SELECT
                        `code`,
                        -- 近30日多方异动统计
                        COUNT(CASE WHEN (chg_type IN ('8201', '8202', '8193', '4', '32', '64', '8207', '8209', '8211', '8213', '8215')) THEN `code` ELSE 0 END)AS 'thrity_df',
                        -- 近30日空方异动统计
                        COUNT(CASE WHEN (chg_type IN ('8204', '8203', '8194', '8', '16', '128', '8208', '8210', '8212', '8214', '8216')) THEN `code` ELSE 0 END)AS 'thrity_kf'
                    FROM
                        stock_change 
                    WHERE
                        date(chg_time) BETWEEN date_SUB(date(NOW()), INTERVAL 30 DAY ) AND date(NOW()) 
                    GROUP BY
                        `code` 
                ) t2 ON t1.`code` = t2.`code` 
                WHERE
                    date(chg_time) = date(now()) 
                GROUP BY
                    `code`
    '''
    ##########################################################################################################################################################
    # 公共数据
    
    # 所属板块
    sql13 = '''
                SELECT
                    ts_code,            -- 股票代码
                    industry            -- 所属行业
                FROM
                    stock_basic
    '''
    
    # 所属概念
    sql14 = '''
                SELECT
                    ts_code,                                                -- 股票代码
                    GROUP_CONCAT(concept_name) AS 'concept_name'            -- 所属概念
                FROM
                    concept_detail 
                GROUP BY
                    ts_code
    '''
    
    ##########################################################################################################################################################
    # 明细数据
    
    # 主力净额
    sql15 = '''
                SELECT
                    t1.trade_date,                                  -- 交易日期
                    t1.ts_code,                                     -- 股票代码
                    t3.stk_name,                                    -- 股票名称
                    t1.`close`,                                     -- 股票价格
                    t1.pct_chg,                                     -- 涨跌幅
                    t1.amount/100000 AS 'amount',                   -- 成交额,亿
                    t2.net_mf_amount/10000 AS 'net_mf_amount'       -- 主力金额,亿
                FROM
                    stock_daily t1
                    LEFT JOIN stock_moneyflow t2 ON t1.ts_code = t2.ts_code AND t1.trade_date = t2.trade_date
                WHERE
                    t1.ts_code NOT IN ('000001.SH', '399001.SZ', '399006.SZ') AND t1.trade_date = date(NOW()) 
                ORDER BY 
                    net_mf_amount DESC
    '''
    
    # 持股低于5%所有流通股市值
    sql16 = '''
                SELECT
                    t1.trade_date,                                                             -- 交易日期
                    t1.ts_code,                                                                -- 股票代码
                    t2.stk_name,                                                               -- 股票名称
                    (t1.float_share * 10000- t2.cir_num)/100000000 AS 'flow_share'             -- 持股低于5%自有流通股市值,亿
                FROM
                    stock_daily_basic t1
                    LEFT JOIN flow_holder t2 ON t1.ts_code = t2.stk_code 
                WHERE
                    t1.trade_date = date(now())
    '''
    
    
    # 北向资金排行榜明细
    sql17 = '''
                SELECT
                    t1.date,                                                            -- 交易日期
                    t1.`code`,                                                          -- 股票代码
                    t1.sharesz / 100000000 AS sharesz,                                  -- 今日持股市值,亿
                    t1.sharesz_chg_one / 100000000 AS sharesz_chg_one,                  -- 今日增持市值,亿
                    t2.thrity_sharesz_chg_one / 100000000 AS thrity_sharesz_chg_one     -- 近30日增持市值,亿
                FROM
                    hsgt_detail t1
                    LEFT JOIN (
                    SELECT
                        `code`,
                        SUM( sharesz_chg_one ) AS thrity_sharesz_chg_one 
                    FROM
                        hsgt_detail 
                    WHERE
                        date BETWEEN date_SUB(date(NOW()), INTERVAL 30 DAY ) AND date(NOW()) 
                    GROUP BY
                        `code` 
                    ) t2 ON t1.`code` = t2.`code` 
                WHERE
                    date = ( SELECT DISTINCT date FROM hsgt_detail ORDER BY date DESC LIMIT 1, 1 )
    '''
    
    
    # 异动明细
    sql18 = '''
                SELECT
                    (case when time(chg_time) between '09:00:00' and '10:00:00' then '09:00-10:00'
                         when time(chg_time) between '10:00:00' and '10:30:00' then '10:00-10:30'
                         when time(chg_time) between '10:30:00' and '11:00:00' then '10:30-11:00'
                         when time(chg_time) between '11:00:00' and '11:30:00' then '11:00-11:30'
                         
                         when time(chg_time) between '13:00:00' and '13:30:00' then '13:00-13:30'
                         when time(chg_time) between '13:30:00' and '14:00:00' then '13:30-14:00'
                         when time(chg_time) between '14:00:00' and '14:30:00' then '14:00-14:30'
                         when time(chg_time) between '14:30:00' and '15:00:00' then '14:30-15:00'
                         else 0 end) as 'chg_time',                                                                                                                             -- 时间区间
                    t1.`code`,                                                                                                                                                  -- 股票代码
                    t1.`name`,                                                                                                                                                  -- 股票名称
                    COUNT(CASE WHEN (t1.chg_type IN ('8201', '8202', '8193', '4', '32', '64', '8207', '8209', '8211', '8213', '8215')) THEN t1.`code` ELSE 0 END) AS 'now_df',  -- 当天多方异动统计
                    COUNT(CASE WHEN (t1.chg_type IN ('8204', '8203', '8194', '8', '16', '128', '8208', '8210', '8212', '8214', '8216')) THEN t1.`code` ELSE 0 END) AS 'now_kf'  -- 当天空方异动统计
                FROM
                    stock_change t1
                    LEFT JOIN change_type t2 ON t1.chg_type = t2.chg_type
                WHERE
                    date(chg_time)='20200706'
                GROUP BY
                    chg_time,`code`
    '''
    
    # 涨停板明细
    sql19 = '''
                SELECT
                    t1.ts_code,                   -- 股票代码
                    t1.`close`,                   -- 股票价格
                    t1.pct_chg,                   -- 涨跌幅
                    t1.fd_amount/10000,           -- 封单金额,万
                    t1.last_time,                 -- 最后一次涨停时间
                    t1.open_times,                -- 封单次数
                    t2.lbc                        -- 连板数
                FROM
                    limit_stock_list t1
                    LEFT JOIN limit_stock_lbc t2 ON t1.trade_date = t2.date AND t1.ts_code = t2.CODE 
                WHERE
                    t1.trade_date = NOW() AND t1.`limit` = 'U'
    
    '''
    
    
    # 龙虎榜明细
    sql19 = '''
                SELECT
                    t1.`code`,                                                                            -- 股票代码
                    t2.`name`,                                                                            -- 股票名称
                    (CASE
                            WHEN youziicon = 1 THEN '一线游资' 
                            WHEN youziicon = 2 THEN '顶级游资' 
                            WHEN youziicon = 1 THEN '知名游资' 
                            WHEN youziicon = 0 AND ( dname = '机构专用' ) THEN '机构' 
                            WHEN youziicon = 0 AND ( dname LIKE '%股通专用' ) THEN '外资' 
                            ELSE '其他' END) AS 'fund_type',                                               -- 资金类型
                        groupicon,                                                                        -- 资金标签
                        buy/10000 AS 'buy',                                                             -- 买入金额,万
                        sell/10000 AS 'sell'                                                            -- 卖出金额,万
                FROM
                        lhb_list t1
                LEFT JOIN hot_concept t2 ON t1.date=t2.date AND t1.`code`=t2.`code`
                WHERE
                        t1.date = date(now()) AND buy>=50000000            
                GROUP BY
                    t1.`code`
    
    '''
    
    # 竞价明细
    sql20 = '''
                SELECT
                    `code`,                         -- 股票代码
                    money/10000 AS money          -- 竞价总额,万
                FROM
                    `call_auction` 
                WHERE
                    date = date(now())
    '''
    
    
    ##########################################################################################################################################################
    # 图形绘制
    
    
    #1、近90日上证指数走势图
    data01 = pd.read_sql(sql01,conn)
    
    date = list(data01['trade_date'])
    list = []
    for index,row in data01.iterrows():
        list.append([row['open'],row['close'],row['low'],row['high'])
    
    kline01 = (
        Kline()
        .add_xaxis(date)
        .add_yaxis("上证指数", list)
        .set_global_opts(
            xaxis_opts=opts.AxisOpts(is_scale=True),
            yaxis_opts=opts.AxisOpts(
                is_scale=True,
                splitarea_opts=opts.SplitAreaOpts(
                    is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)
                ),
            ),
            title_opts=opts.TitleOpts(title="近90日上证指数走势图"),
        )
        .render("kline_split_area.html")
    )
    
    
    
    
    
    
    # 2、近90日shibor利率趋势图
    data02 = pd.read_sql(sql04,conn)
    
    line02 = (
        Line(init_opts=opts.InitOpts(theme=ThemeType.DARK))
            .add_xaxis(list(data03['date']))
            .add_yaxis("shibor利率", list(data01['on']))
            .set_global_opts(
                            title_opts=opts.TitleOpts(title="shibor利率")
            )
            .render("gauge.html")
    )
    
    
    # 3、近90日全天量能、竞价量能
    data03 = pd.merge(pd.read_sql(sql05,conn),pd.read_sql(sql06,conn),how='left',left_on='trade_date',right_on='date')
    
    line03 = (
        Line()
        .add_xaxis(list(data03['trade_date']))
        .add_yaxis("全天量能", list(data03['amount']))
        .add_yaxis("竞价量能", list(data03['money']))
        .set_global_opts(title_opts=opts.TitleOpts(title="近90日量能趋势"))
        .render("line_base.html")
    )
    
    # 4、近90日北向资金趋势
    data04 = pd.read_sql(sql07,conn)
    line04 = (
        Line()
        .add_xaxis(list(data04['trade_date']))
        .add_yaxis("沪股通", list(data04['hgt']))
        .add_yaxis("深股通", list(data04['sgt']))
        .add_yaxis("净流入", list(data04['north_money']))
        .set_global_opts(title_opts=opts.TitleOpts(title="近90日北向资金趋势"))
        .render("line_base.html")
    )
    
    # 5、近90日大单资金趋势
    data05 = pd.read_sql(sql08,conn)
    line04 = (
        Line()
        .add_xaxis(list(data04['trade_date']))
        .add_yaxis("超大单净额", list(data04['elg_amount']))
        .add_yaxis("大单净额", list(data04['lg_amount']))
        .add_yaxis("中单净额", list(data04['md_amount']))
        .add_yaxis("净流入", list(data04['net_mf_amount']))
        .set_global_opts(title_opts=opts.TitleOpts(title="近90日大单资金趋势"))
        .render("line_base.html")
    )
    
    # 大单流向
    sql08 = '''
                SELECT
                    trade_date,                                                -- 交易日期
                    SUM(buy_md_amount-sell_md_amount)/1000 AS 'md_amount',     -- 中单净额/亿
                    SUM(buy_lg_amount-sell_lg_amount)/1000 AS 'lg_amount',     -- 大单净额/亿
                    SUM(buy_elg_amount-sell_elg_amount)/1000 AS 'elg_amount',  -- 超大单净额/亿
                    SUM(net_mf_amount)/1000 AS 'net_mf_amount'                 -- 资金净额/亿
                FROM
                    stock_moneyflow 
                GROUP BY
                    trade_date
    '''
                    
                    
    grid = (
        Grid()
            .add(bar, grid_opts=opts.GridOpts(pos_bottom="60%", pos_right='50%'))
            .add(line, grid_opts=opts.GridOpts(pos_top="60%"))
        # .render("grid_vertical.html")
    )
    
    grid1 = (
        Grid()
            .add(bar, grid_opts=opts.GridOpts(pos_bottom="60%", pos_right='50%'))
            .add(line, grid_opts=opts.GridOpts(pos_top="60%"))
        # .render("grid_vertical.html")
    )
    
    tab = Tab()
    tab.add(grid, "bar-example")
    # tab.add(line_markpoint(), "line-example")
    # tab.add(pie_rosetype(), "pie-example")
    # tab.add(grid_mutil_yaxis(), "grid-example")
    tab.render("tab_base.html")
    
    
    
    from pyecharts import options as opts
    from pyecharts.charts import Bar
    from pyecharts.faker import Faker
    
    
    x = Faker.dogs + Faker.animal
    xlen = len(x)
    y = []
    for idx, item in enumerate(x):
        if idx <= xlen / 2:
            y.append(
                opts.BarItem(
                    name=item,
                    value=(idx + 1) * 10,
                    itemstyle_opts=opts.ItemStyleOpts(color="#749f83"),
                )
            )
        else:
            y.append(
                opts.BarItem(
                    name=item,
                    value=(xlen + 1 - idx) * 10,
                    itemstyle_opts=opts.ItemStyleOpts(color="#d48265"),
                )
            )
    
    c = (
        Bar()
        .add_xaxis(x)
        .add_yaxis("series0", y, category_gap=0, color=Faker.rand_color())
        .set_global_opts(title_opts=opts.TitleOpts(title="Bar-直方图(颜色区分)"))
        .render("bar_histogram_color.html")
    )
  • 相关阅读:
    LeetCode 146
    Codeforces Round #644 (Div. 3) 题解
    AtCoder Grand Contest 044
    约数个数求解+约数求和(唯一分解定理)(遍历map的写法!)
    [蓝桥杯][2013年第四届真题]危险系数(DFS)
    Codeforces Round #674 (Div. 3)(A->D(前缀和出现次数))
    Codeforces Round #673 (Div. 2)B. Two Arrays(贪心)
    Codeforces Round #672 (Div. 2)(A->C2)(B位运算,C贪心,DP)
    质数笔记
    2020 CCPC
  • 原文地址:https://www.cnblogs.com/Iceredtea/p/13303384.html
Copyright © 2020-2023  润新知