from pyecharts.charts import Bar, Line import pyecharts.options as opts from utils.stock_web_api import execute_stock_web_api_method, stock_web_api_money_flow from utils.comm import * class MoneyFlow: def __init__(self, trade_date): self.trade_date = trade_date.strftime('%Y%m%d') self.start_date = return_trading_day(trade_date, -6) self.end_date = self.trade_date print(self.start_date, "---", self.end_date) def hsgt_top10(self): """ 当日沪深股通十大成交股 :return: """ df = xcsc_pro.hsgt_top10(trade_date=self.end_date) print(df) def money_flow_chart(self): df = execute_stock_web_api_method( func=stock_web_api_money_flow, start_date=self.start_date, end_date=self.end_date) x_data = df['trade_date'].tolist() # 沪股通 y_axis_hgt = (round(df['hgt'] / 100, 2)).tolist() # 深股通 y_axis_sgt = (round(df['sgt'] / 100, 2)).tolist() # 北上资金 y_axis_north_money = (round(df['north_money'] / 100, 2)).tolist() bar = ( Bar(init_opts=opts.InitOpts(width="100%", height="400px")) .add_xaxis(xaxis_data=x_data) .add_yaxis( series_name="沪股通", y_axis=y_axis_hgt, label_opts=opts.LabelOpts(is_show=False), ) .add_yaxis( series_name="深股通", y_axis=y_axis_sgt, label_opts=opts.LabelOpts(is_show=False), ) .extend_axis( yaxis=opts.AxisOpts( name="金额", type_="value", interval=2000, axislabel_opts=opts.LabelOpts(formatter="{value} 亿元"), ) ) .set_global_opts( tooltip_opts=opts.TooltipOpts( is_show=True, trigger="axis", axis_pointer_type="cross" ), xaxis_opts=opts.AxisOpts( type_="category", axispointer_opts=opts.AxisPointerOpts(is_show=True, type_="shadow"), ), yaxis_opts=opts.AxisOpts( name="金额", type_="value", interval=3000, axislabel_opts=opts.LabelOpts(formatter="{value} 亿元"), axistick_opts=opts.AxisTickOpts(is_show=True), splitline_opts=opts.SplitLineOpts(is_show=True), ), ) ) line = ( Line() .add_xaxis(xaxis_data=x_data) .add_yaxis( series_name="北上资金", # yaxis_index 0:折线图使用柱状图的y轴 1:使用extend_axis中的Y轴 yaxis_index=0, y_axis=y_axis_north_money, label_opts=opts.LabelOpts(is_show=False), ) ) bar.overlap(line).render(f"html/{self.trade_date}/mixed_bar_and_line.html") if __name__ == '__main__': # money_flow = MoneyFlow(trade_date=datetime.now().strftime('%Y%m%d')) money_flow = MoneyFlow(trade_date=datetime.now()) money_flow.money_flow_chart()