1

我对编码比较陌生,我有一些我不太明白如何解决的问题。我正在尝试构建代码,该代码将生成从股票代码列表生成的图表,数据从雅虎财经下载。暂时考虑手动分配 stock1 (等等)一个股票代码......

我想弄清楚如何将数据循环到运行图表中,因此我的代码中包含 TSLA 和 MSFT。到目前为止,我有下面的代码,我已经更改了 dfs 和 stock。我只是不明白如何制作循环。如果有人也有一些好的循环资源,请告诉我。

稍后,我想将图表另存为 png,其文件名对应于从 yahoo 中提取的股票,因此如果有人知道如何更改(savefig = dict(fname="tsla.png", bbox_inches= "tight")之后的代码,则可以加分style = 'default'。谢谢您的帮助!

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()
4

1 回答 1

0

如果您的目标只是创建多个图(每只股票一个),那么不确定您为什么要计算自己的 SMA,并对股票和数据框进行分组。此外,如果您使用的是mplfinance,则无需导入和/或使用 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 文件中,供您以后查看。

另请注意,它不保存实际数据;只绘制数据然后移动到下一只股票,重新分配数据框变量(它会自动删除上一只股票的数据)。.to_csv()如果您想将每只股票的数据保存在单独的 csv 文件中,使用 Pandas 的方法也很容易做到。

另外,我假设您yf.download()正确调用。我不熟悉那个 API,所以我把那部分代码留给你。

HTH。让我知道。——丹尼尔

于 2020-07-15T16:33:59.973 回答