如何在循环中为 Python 中的图分配多个变量 3
How to assign multiple variables in a loop for graphs in Python 3
我对编码还比较陌生,有一些问题我不太明白如何解决。我正在尝试构建代码来生成图表,这些图表将从股票代码列表中生成,并从雅虎金融下载数据。暂不考虑手动为 stock1(等等)分配代码...
我想弄清楚如何将数据循环进入 运行 图形,因此我的代码中包含 TSLA 和 MSFT。到目前为止,我有下面的代码,我已经更改了 dfs 和 stocks。我只是不明白如何制作循环。如果有人也有一些好的循环资源,请告诉我。
稍后,我想将图表保存为 png,文件名与从雅虎提取的股票相对应,所以如果有人知道如何更改此代码 (savefig = dict(fname="tsla.png", bbox_inches= "tight")
后的代码,请加分 [=] 13=]。感谢您的帮助!
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import datetime as dt
import mplfinance as mpf
import yfinance as yf
#yahoo info
start = "2020-01-01"
end = dt.datetime.now()
stock1 = 'TSLA'
stock2 = 'MSFT'
df1 = yf.download(stock1, start, end)
df2 = yf.download(stock2, start, end)
stocks = [[stock1],[stock2]]
dfs = [[df1],[df2]]
changingvars = [[stocks],[dfs]]
#graph1
short_sma = 20
long_sma = 50
SMAs = [short_sma, long_sma]
for i in SMAs:
dfs["SMA_"+ str(i)] = dfs.iloc[:,4].rolling(window=i).mean()
graph1 = mpf.plot(dfs, type = 'candlestick',figratio=(16,6),
mav=(short_sma,long_sma),
volume=True, title= str(stocks),
style='default')
plt.show()
不确定为什么要计算自己的 SMA,并对股票和数据框进行分组,如果您的目标只是创建多个图(每个股票一个)。此外,如果您使用 mplfinance
,则 无需 导入 and/or 使用 matplotlib.pyplot(也无需调用 plt.show( ); mplfinance 为您做这件事)。
也就是说,这是对您的代码的建议。我已经为 Apple 和 Alphabet (Google) 添加了代码,只是为了演示如何扩展它。
stocklist = ['TSLA','MSFT','AAPL','GOOGL']
start = "2020-01-01"
end = dt.datetime.now()
short_sma = 20
long_sma = 50
for stock in stocklist:
df = yf.download(stock, start, end)
filename = stock.lower() + '.png'
mpf.plot(df,type='candlestick',figratio=(16,6),
mav=(short_sma,long_sma),
volume=True, title=stock,style='default',
savefig=dict(fname=filename,bbox_inches="tight")
)
以上代码将不会显示每只股票的图表,但会单独保存每只股票.png 文件 本地(您 运行 脚本所在的位置)供您之后查看。
另请注意,它不保存实际数据;只绘制数据,然后移动到下一只股票,重新分配数据框变量(自动删除前一只股票的数据)。如果您想将每只股票的数据保存在单独的 csv 文件中,使用 Pandas' .to_csv()
方法也很容易做到。
此外,我假设您正确调用了 yf.download()
。我不熟悉那个 API 所以我只是保留了你所拥有的那部分代码。
HTH。让我知道。 --丹尼尔
我对编码还比较陌生,有一些问题我不太明白如何解决。我正在尝试构建代码来生成图表,这些图表将从股票代码列表中生成,并从雅虎金融下载数据。暂不考虑手动为 stock1(等等)分配代码...
我想弄清楚如何将数据循环进入 运行 图形,因此我的代码中包含 TSLA 和 MSFT。到目前为止,我有下面的代码,我已经更改了 dfs 和 stocks。我只是不明白如何制作循环。如果有人也有一些好的循环资源,请告诉我。
稍后,我想将图表保存为 png,文件名与从雅虎提取的股票相对应,所以如果有人知道如何更改此代码 (savefig = dict(fname="tsla.png", bbox_inches= "tight")
后的代码,请加分 [=] 13=]。感谢您的帮助!
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import datetime as dt
import mplfinance as mpf
import yfinance as yf
#yahoo info
start = "2020-01-01"
end = dt.datetime.now()
stock1 = 'TSLA'
stock2 = 'MSFT'
df1 = yf.download(stock1, start, end)
df2 = yf.download(stock2, start, end)
stocks = [[stock1],[stock2]]
dfs = [[df1],[df2]]
changingvars = [[stocks],[dfs]]
#graph1
short_sma = 20
long_sma = 50
SMAs = [short_sma, long_sma]
for i in SMAs:
dfs["SMA_"+ str(i)] = dfs.iloc[:,4].rolling(window=i).mean()
graph1 = mpf.plot(dfs, type = 'candlestick',figratio=(16,6),
mav=(short_sma,long_sma),
volume=True, title= str(stocks),
style='default')
plt.show()
不确定为什么要计算自己的 SMA,并对股票和数据框进行分组,如果您的目标只是创建多个图(每个股票一个)。此外,如果您使用 mplfinance
,则 无需 导入 and/or 使用 matplotlib.pyplot(也无需调用 plt.show( ); mplfinance 为您做这件事)。
也就是说,这是对您的代码的建议。我已经为 Apple 和 Alphabet (Google) 添加了代码,只是为了演示如何扩展它。
stocklist = ['TSLA','MSFT','AAPL','GOOGL']
start = "2020-01-01"
end = dt.datetime.now()
short_sma = 20
long_sma = 50
for stock in stocklist:
df = yf.download(stock, start, end)
filename = stock.lower() + '.png'
mpf.plot(df,type='candlestick',figratio=(16,6),
mav=(short_sma,long_sma),
volume=True, title=stock,style='default',
savefig=dict(fname=filename,bbox_inches="tight")
)
以上代码将不会显示每只股票的图表,但会单独保存每只股票.png 文件 本地(您 运行 脚本所在的位置)供您之后查看。
另请注意,它不保存实际数据;只绘制数据,然后移动到下一只股票,重新分配数据框变量(自动删除前一只股票的数据)。如果您想将每只股票的数据保存在单独的 csv 文件中,使用 Pandas' .to_csv()
方法也很容易做到。
此外,我假设您正确调用了 yf.download()
。我不熟悉那个 API 所以我只是保留了你所拥有的那部分代码。
HTH。让我知道。 --丹尼尔