2

我正在使用 mplfinance 绘图函数来绘制符号的 OHLC 烛台图。OHLC 数据的时间范围为 2 分钟。另外,我在同一张图表上绘制了 sma 20 周期和 sma 200 周期。由于 sma200,图表上显示的蜡烛数量非常庞大(几乎两天的 2 分钟蜡烛)

由于移动平均线是由绘图函数在内部计算的,所以我必须将两天的 2 分钟蜡烛传递给绘图函数,以便我可以获得一些 sma200 的数据点。烛台图保存为 png 文件。现在由于图表上显示了大约 300 根蜡烛(sma20 和 sma200 线也显示),蜡烛显示得不是很清楚。

有没有办法限制图表上显示的蜡烛数量。如果我将数据框切成 30 根蜡烛,那么由于蜡烛数量不足,在这种情况下将不会计算 sma200。我需要的是具有完整数据集的 sma200,但仅显示固定数量的蜡烛或固定持续时间的图表,例如仅显示最后一小时的蜡烛数据。

 mpf.plot(df, type='candle', style='charles',
         title=title,
         ylabel='Price',
         ylabel_lower='Shares \nTraded',
         mav=(20,200),
         savefig=file)
4

2 回答 2

2

我建议您计算自己的移动平均线,并使用mpf.make_addplot(). 这将允许您根据一分钟或两分钟的蜡烛图计算移动平均线,同时绘制五分钟或十分钟的蜡烛图。例如:

# calculate mav values
mav20  = twominute_df['Close'].rolling( 20).mean()
mav200 = twominute_df['Close'].rolling(200).mean()

# resample:
resample_ohlcmap = {'Open'  :'first',
                    'High'  :'max',
                    'Low'   :'min',
                    'Close' :'last',
                    'Volume':'sum'
                   }

tenminute_df = twominute_df.resample('10T').agg(resample_ohlcmap)

# plot ten-minute candles with two-minute mavs:

apmavs = [ mpf.make_addplot(mav20),
           mpf.make_addplot(mav200) ]

mpf.plot(tenminute_df, type='candle', style='charles',
         title=title, ylabel='Price', ylabel_lower='Shares \nTraded',
         addplot=apmavs, savefig=file)

参考:

于 2021-07-21T19:22:31.177 回答
1

感谢丹尼尔的帮助。我现在可以为 60 支 sma 20 和 200 的蜡烛绘制图表。

好吧,我不需要重新采样,因为我的图表时间框架和移动平均时间框架都是相同的。

请找到我的代码片段。

# get list of close prices from symbol_docs. symbol_docs contain 2 min OHLC.
close_list = list(map(lambda a: a['close'], symbol_docs))

# sma20 and 200 calculated using ta-lib 
sma20 = sma(close_list, 20)
sma200 = sma(close_list, 200)  

# call to plot_chart function
plot_chart('TCS', symbol_docs, sma20, sma200)  

def plot_chart(symbol, docs, sma20, sma200):
  df = pd.DataFrame(docs)
  df = df.set_index(['time'])
  df.rename(columns={'open': 'Open', 'close': 'Close', 'high': 'High', 'low': 'Low'},
          inplace=True)
  title = symbol.upper() + ' - 2min'
  file = saved_chart_image_abs_path + symbol + '.png'

  df['sma20'] = sma20
  df['sma200'] = sma200

  df_sliced = df[-60:]
  apmavs = [mpf.make_addplot(df_sliced['sma20']), mpf.make_addplot(df_sliced['sma200'])]

  mpf.plot(df_sliced, type='candle', style='charles',
         title=title,
         ylabel='Price',
         ylabel_lower='Shares \nTraded',
         addplot=apmavs,
         savefig=file)
  telegram_message_sender.send_document(file)
  os.remove(file)

下面的图表作为我的电报组的文件发送:)

TCS - 2分钟

于 2021-07-23T14:47:24.337 回答