如何在循环中为 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。让我知道。 --丹尼尔