| 63 | |
| 64 | # 股票K线图 |
| 65 | def kline(df, mas=5, mal=20, notebook=True,title="股票K线图"): |
| 66 | # 计算技术指标 |
| 67 | data = df.dropna().copy(deep=True) |
| 68 | data['mas'] = data.close.rolling(mas).mean() |
| 69 | data['mal'] = data.close.rolling(mal).mean() |
| 70 | data['macd'], data['macdsignal'], data['macdhist'] = MACD(data.close) |
| 71 | attr = list(data.index.strftime('%Y%m%d')) |
| 72 | try: |
| 73 | vol = data["volume"].tolist() |
| 74 | except: |
| 75 | vol = data['vol'].tolist() |
| 76 | kline = (Kline() # K线图 |
| 77 | .add_xaxis(xaxis_data=attr) |
| 78 | .add_yaxis(series_name="klines", |
| 79 | y_axis=data[["open", "close", "low", "high"]].values.tolist(), |
| 80 | itemstyle_opts=opts.ItemStyleOpts( |
| 81 | color="red", color0="green", # 设置K线两种颜色 |
| 82 | border_color="red", border_color0="green", ), |
| 83 | markpoint_opts=opts.MarkPointOpts(data=[ # 添加标记符 |
| 84 | opts.MarkPointItem(type_='max', name='最大值'), |
| 85 | opts.MarkPointItem(type_='min', name='最小值'), ]), |
| 86 | markline_opts=opts.MarkLineOpts( # 添加辅助线 |
| 87 | data=[opts.MarkLineItem(type_="average", value_dim="close")], )) |
| 88 | .set_global_opts( |
| 89 | legend_opts=opts.LegendOpts(is_show=True, pos_top=1, pos_left='center'), |
| 90 | datazoom_opts=[ # 控制三个组合图 |
| 91 | opts.DataZoomOpts(is_show=False, type_="inside", xaxis_index=[0, 0], range_end=100, ), |
| 92 | opts.DataZoomOpts(is_show=False, xaxis_index=[0, 1], range_end=100), |
| 93 | opts.DataZoomOpts(is_show=True, xaxis_index=[0, 2], pos_top="95%", range_end=100, ), ], |
| 94 | title_opts=opts.TitleOpts(title=title, pos_left="0"), |
| 95 | yaxis_opts=opts.AxisOpts(is_scale=True, |
| 96 | splitarea_opts=opts.SplitAreaOpts( # 分隔区域配置 |
| 97 | is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)), ))) |
| 98 | # 成交量柱状图 |
| 99 | bar = (Bar() |
| 100 | .add_xaxis(xaxis_data=attr) |
| 101 | .add_yaxis(series_name="volume", |
| 102 | y_axis=vol, |
| 103 | label_opts=opts.LabelOpts(is_show=False), |
| 104 | itemstyle_opts=opts.ItemStyleOpts(color=JsCode(""" |
| 105 | function(params) { |
| 106 | var colorList; |
| 107 | if (barData[params.dataIndex][1] > barData[params.dataIndex][0]) { |
| 108 | colorList = 'red';} else { |
| 109 | colorList = 'green';} |
| 110 | return colorList;}""")), ) |
| 111 | .set_global_opts( |
| 112 | legend_opts=opts.LegendOpts(is_show=False), )) |
| 113 | # 添加均线 |
| 114 | line = (Line() |
| 115 | .add_xaxis(xaxis_data=attr) |
| 116 | .add_yaxis(series_name=f"{mas}日均线", y_axis=data["mas"].tolist(), |
| 117 | label_opts=opts.LabelOpts(is_show=False), |
| 118 | is_symbol_show=False, |
| 119 | linestyle_opts=opts.LineStyleOpts(width=1.5), |
| 120 | itemstyle_opts=opts.ItemStyleOpts(color="black"), ) |
| 121 | |
| 122 | .add_yaxis(series_name=f"{mal}日均线", y_axis=data["mal"].tolist(), |