我计划从比特币数据中获取烛台图。这是我的代码,用于在加载 csv 文件后选择我想要的数据框。
df['Date'] = pd.to_datetime(df['Date'])
start_date = '2016-02-27'
end_date = '2021-02-27'
mask = (df['Date'] >= start_date) & (df['Date'] <= end_date)
df = df.loc[mask]
df
Run Code Online (Sandbox Code Playgroud)
然后,我输入了制作烛台图的代码,如下所示:
import matplotlib.pyplot as plt
! pip install --upgrade mplfinance
import mplfinance as mpf
import matplotlib.dates as mpl_dates
mpf.plot(df, type = 'candle', style = 'charles',
title = 'Bitcoin Price',
ylabel = 'Price (USD$)',
volume = True,
ylabel_lower = 'Shares \nTraded',
mav = (3,6,9),
savefig = 'chart-mplfinance.png')
Run Code Online (Sandbox Code Playgroud)
它说“TypeError:期望 data.index 作为 DatetimeIndex”。所以我在谷歌上查找了这个问题的解决方案,并尝试了这个:
df = dict()
df['Date'] = …Run Code Online (Sandbox Code Playgroud) 我已经制作了一个 python 脚本来使用 mpl_finance 在像这样的烛台中转换 csv 文件,这是脚本:
import matplotlib.pyplot as plt
from mpl_finance import candlestick_ohlc
import pandas as pd
import matplotlib.dates as mpl_dates
plt.style.use('ggplot')
# Extracting Data for plotting
data = pd.read_csv('CSV.csv')
ohlc = data.loc[:, ['Date', 'Open', 'High', 'Low', 'Close']]
ohlc['Date'] = pd.to_datetime(ohlc['Date'])
ohlc['Date'] = ohlc['Date'].apply(mpl_dates.date2num)
ohlc = ohlc.astype(float)
# Creating Subplots
fig, ax = plt.subplots()
plt.axis('off')
fig.patch.set_facecolor('black')
candlestick_ohlc(ax, ohlc.values, width=0.6, colorup='green', colordown='red', alpha=0.8)
plt.show()
Run Code Online (Sandbox Code Playgroud)
现在我需要做同样的事情,但使用 mplfinance 而不是 mpl_finance ,我试过这样的:
import mplfinance as mpf
# Load data file.
df = …Run Code Online (Sandbox Code Playgroud) 所以我已经能够使用 pip 成功安装 mplfinance 并且当我单独导入它时我没有收到任何错误。虽然当我这样做时:from mplfinance import candlestick_ohlc我ImportError: cannot import name 'candlestick_ohlc' from 'mplfinance'再次检查命令提示符时出现错误,它说它已成功安装mplfinance。为什么我会收到此错误?
python installation importerror candlestick-chart mplfinance
我想将我的面板分开,因为标题重叠了。ADX 标题位于 RSI 面板中。我尝试过tight_layout=True但还是一样。
我的代码:
ap0 = [
mpf.make_addplot(df['sma_200'],color='#FF0000', panel=2),
mpf.make_addplot(df['sma_50'],color='#ffa500', panel=2),
mpf.make_addplot(df['sma_20'],color='#00FF00', panel=2),
mpf.make_addplot(df['rsi'],color='#ffa500', panel=0, title="RSI"),
mpf.make_addplot(df['hline_30'], panel=0),
mpf.make_addplot(df['hline_70'], panel=0),
mpf.make_addplot(df['adx'],color='#0000FF', panel=1, secondary_y=False, title="ADX"),
mpf.make_addplot(df['-di'],color='#FF0000', panel=1, secondary_y=False),
mpf.make_addplot(df['+di'],color='#32cd32', panel=1, secondary_y=False),
mpf.make_addplot(df['hline_25'], panel=1, secondary_y=False)
]
fig, axlist = mpf.plot(
df,
panel_ratios=(.05, .05, .2, .05),
type="hollow_candle",
yscale='log',
volume=True,
title="{} - {}".format(ticker, interval),
style=mpf_style,
figsize=(12.8, 10),
returnfig=True,
closefig=True,
addplot=ap0,
main_panel=2,
volume_panel=3,
num_panels=4,
)
Run Code Online (Sandbox Code Playgroud)
如何将mpl_finance软件包安装到 Anaconda 上的环境路径中?
我试过了,pip install mpl_finance但是我在Anaconda上还是找不到这个包,它去哪里了?我对 Python 非常熟悉。
我正在尝试为 CNN 制作大量(约 170 万张)图像(带体积的烛台图)。但是,我目前拥有的脚本在每次迭代后不断增加其内存使用量,据我所知,每次迭代大约 2-5mb。无论我正在运行多少个脚本实例,这都会增加直到我的内存完全填满。(其中脚本最终使用 11-12 GB 的 16GB)。
目标是同时运行脚本的多个实例。我尝试了并行处理,结果不是很好。因此,我只是使用多个内核。我尝试了很多方法来减少内存使用,但似乎没有任何效果。
我在 VS 代码中使用 Jupyter 笔记本(Python 3.8.5)(anaconda),具有 64 位 Windows 系统。16GB 内存和英特尔 i7 第 8 代。
第一个单元调用包,加载数据并设置参数。
# import required packages
import matplotlib.dates as mpdates
import matplotlib.pyplot as plt
import mplfinance as mpf
import matplotlib as mpl
from PIL import Image
import pandas as pd
import math as math
import numpy as np
import io as io
import gc as gc
import os as os
#set run instance number
run=1 …Run Code Online (Sandbox Code Playgroud) 我正在做的项目需要代码使用 mplfinance 库以多个数字绘制 300 多个烛台图。我知道这只能使用外轴方法来完成,因为它提供了更多的灵活性并且理论上可以绘制无限的图表。
我当前使用的代码如下,绘制的图表如下:
import mplfinance as mpf
s = mpf.make_mpf_style(base_mpf_style='yahoo', rc={'font.size': 6})
fig = mpf.figure(figsize=(34, 13.2), style=s, tight_layout=True)
ax_p = fig.add_subplot(n_rows, n_cols, pos_price)
ax_v = fig.add_subplot(n_rows, n_cols, pos_vol, sharex=ax_p)
fig, ax_list = mpf.plot(resampled_df, type='candle', ax=ax_p, volume=ax_v, show_nontrading=False,
datetime_format='%a %d-%m-%y', xrotation=0, returnfig=True)
Run Code Online (Sandbox Code Playgroud)
我的代码绘制的数百个图表中的 6 个示例图表的屏幕截图:
正如您所看到的,成交量图绘制在烛台图下方的单独图表中。我很难找到将交易量移动到蜡烛图的解决方案,mplfinance 文档第 114 期中有一篇类似的文章解释了如何做到这一点……但我发现对于新人来说很难理解像我一样的图书馆。
如果您能发布详细的代码来执行此操作,将不胜感激!
2021 年 2 月 12 日更新:
我根据@Daniel的建议修改了代码,使用add_axes()而不是add_subplot()现在绘制多个图表时成交量位于烛台图的底部。美丽的!答案已接受。
ax_intra_day_candle = fig.add_axes([x_pos, y_pos, ax_width, ax_height])
ax_intra_day_candle.set_title(title)
ax_intra_day_volume = fig.add_axes([x_pos, y_pos - ax_vol_height, ax_width, …Run Code Online (Sandbox Code Playgroud) MPL 财务很棒,但我似乎无法调整轴的格式。在图像中,我只想显示日期,而不显示 00:00 时间。还有价格,我想添加美元货币和小数位(变量)。
import pandas as pd
import mplfinance as mpf
df = pd.read_csv(csv)
df.date = pd.to_datetime(df.date)
cols = ['date', 'open', 'high', 'low', 'close', 'volume']
df = df[cols]
df = df.sort_values(by=['date'], ascending=False)
df = df.set_index('date')
Run Code Online (Sandbox Code Playgroud)
然后使用(插入样式)调用 mplfinance:
mpf.plot(df, type='candle', volume=True style= *style*)
Run Code Online (Sandbox Code Playgroud)
生成下面的图表,如果可能的话,我突出显示了我想要更改的部分。
我想在图表上绘制信号,有没有办法在烛台上做到这一点?我执行了以下操作并陷入困境:(
!pip install yfinance
!pip install mplfinance
import yfinance as yf
import mplfinance as mpf
import numpy as np
import pandas as pd
df=yf.download('BTC-USD',start='2008-01-04',end='2021-06-3',interval='1d')
buy=np.where((df['Close'] > df['Open']) & (df['Close'].shift(1) < df['Open'].shift(1),1,0)
fig = plt.figure(figsize = (20,10))
mpf.plot(df,figsize=(20,12),type ='candle',volume=True);
# any idea how to add the signal?
Run Code Online (Sandbox Code Playgroud) mplfinance ×9
python ×9
matplotlib ×5
anaconda ×2
python-3.x ×2
finance ×1
importerror ×1
installation ×1
pandas ×1
plot ×1
plotly ×1
pycharm ×1