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")
)
原文地址:https://www.cnblogs.com/Iceredtea/p/13303384.html