Как назначить несколько переменных в al oop для графиков в Python 3 - PullRequest
1 голос
/ 10 июля 2020

Я относительно новичок в программировании, и у меня есть несколько проблем, которые я пока не совсем понимаю, как решить. Я пытаюсь создать код, который будет создавать графики, которые будут производиться из списка тикеров, с загрузкой данных из Yahoo Finance. Без учета ручного присвоения тикера stock1 (и т. Д.) На мгновение ...

Я хочу выяснить, как l oop данные, входящие в график, так что TSLA и MSFT в мой код. Пока у меня есть код ниже, в котором я уже изменил dfs и stocks. Просто не понимаю, как сделать l oop. Если у кого-то есть хорошие ресурсы для циклов, дайте мне знать.

Позже я хотел бы сохранить графики в виде 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()

1 Ответ

0 голосов
/ 15 июля 2020

Не уверен, почему вы рассчитываете свои собственные 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 локально (где вы запускаете скрипт) для последующего просмотра.

Обратите внимание, что он не сохраняет фактические данные; только отображает данные, а затем переходит к следующей акции, переназначая переменную фрейма данных (которая автоматически удаляет данные предыдущей акции). Если вы хотите сохранить данные для каждой акции в отдельном CSV-файле, это также легко сделать с помощью метода Pandas '.to_csv().

Кроме того, я предполагаю, что вы звоните yf.download() правильно. Я не знаком с этим API, поэтому я просто оставил эту часть кода в том виде, в каком он был у вас.

HTH. Дай мне знать. - Даниил

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...