df为dataframe数据,包含'open','high','low','close','volume‘列,索引为时间格式 t:Tenkan-sen:转折线计算周期,默认9个交易日 k:Kijun-sen:基准线计算周期,默认26 l:Chikou Span:滞后跨度或延迟线计算周期,默认30天 s:Senkou Span B:计算前导跨度B或先行上线B,默认52个交易日
(df, t=9, k=26, l=30, s=52)
| 293 | |
| 294 | # ichimoku云图 |
| 295 | def plot_ichimoku(df, t=9, k=26, l=30, s=52): |
| 296 | '''df为dataframe数据,包含'open','high','low','close','volume‘列,索引为时间格式 |
| 297 | t:Tenkan-sen:转折线计算周期,默认9个交易日 |
| 298 | k:Kijun-sen:基准线计算周期,默认26 |
| 299 | l:Chikou Span:滞后跨度或延迟线计算周期,默认30天 |
| 300 | s:Senkou Span B:计算前导跨度B或先行上线B,默认52个交易日 |
| 301 | ''' |
| 302 | data = df.copy() |
| 303 | |
| 304 | # 计算转换线 |
| 305 | high_1 = data['high'].rolling(t).max() |
| 306 | low_1 = data['low'].rolling(t).min() |
| 307 | # Tenkan-sen:转换线 |
| 308 | data['conversion_line'] = (high_1 + low_1) / 2 |
| 309 | # 计算基准线 |
| 310 | high_2 = data['high'].rolling(k).max() |
| 311 | low_2 = data['low'].rolling(k).min() |
| 312 | data['base_line'] = (high_2 + low_2) / 2 |
| 313 | # 计算前导跨度A |
| 314 | data['lead_span_A'] = ((data.conversion_line + data.base_line) / 2).shift(l) |
| 315 | # 计算前导跨度A |
| 316 | high_3 = data['high'].rolling(s).max() |
| 317 | low_3 = data['high'].rolling(s).min() |
| 318 | data['lead_span_B'] = ((high_3 + low_3) / 2).shift(s) |
| 319 | # 滞后跨度 |
| 320 | data['lagging_span'] = data['close'].shift(-l) |
| 321 | # 删除缺失值 |
| 322 | data.dropna(inplace=True) |
| 323 | fig, ax = plt.subplots(1, 1, sharex=True, figsize=(15, 7)) |
| 324 | ax.plot(data.index, data['close'], linewidth=2, label='收盘价') |
| 325 | ax.plot(data.index, data['lead_span_A'], label='前导跨度A', color='k') |
| 326 | ax.plot(data.index, data['lead_span_B'], label='前导跨度B', color='y') |
| 327 | ax.fill_between(data.index, data['lead_span_A'], data['lead_span_B'], |
| 328 | where=data['lead_span_A'] >= data['lead_span_B'], color='lightcoral') |
| 329 | ax.fill_between(data.index, data['lead_span_A'], data['lead_span_B'], |
| 330 | where=data['lead_span_A'] < data['lead_span_B'], color='lightgreen') |
| 331 | plt.legend(loc=0) |
| 332 | plt.grid() |
| 333 | plt.show() |