Merci. Je publierai un article pour la première fois depuis longtemps. C'est Wamaro. En raison de circonstances récentes, je cache le grattage. Dans l'ancien temps, quand j'entendais que ça grattait, "Quoi? Qu'Est-ce que c'est? Je réfléchissais, mais maintenant j'ai un fort sentiment que je dois gratter. J'ai vraiment l'impression que les idées des gens changent en fonction de leur position et de l'époque. Au fait, dans cet esprit, j'ai travaillé sur un programme dont je me suis complètement débarrassé. Même maintenant, j'écris sans être blâmé par personne pour l'encapsulation ou l'apprentissage du code. On dit que le programme est un outil. Il ne sert donc à rien d'écrire sans but. Vous n'avez même pas besoin d'apprendre. Par conséquent, le fou crée de force un but. C'est la raison. Donc, cette fois, j'aimerais créer une interface graphique en utilisant python. Plus précisément, après avoir entré le code de l'entreprise et la période spécifiée, je voudrais écrire le code de l'application qui affiche la transition du cours de l'action pendant cette période.
L'environnement est illustré ci-dessous. ・ Windows10 ・ Python3 (anaconda) Le développement a été principalement réalisé dans jupyter-lab.
Je vais expliquer brièvement le contenu du code. Si vous voulez juste les résultats, vous pouvez vous référer au "code final" final.
La bibliothèque utilisée cette fois est indiquée ci-dessous.
from pandas_datareader import data
import tkinter as tk
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
import matplotlib.pyplot as plt
from matplotlib.figure import Figure
import numpy as np
%matplotlib inline
Le sentiment principal est le suivant. ・ Pandas: pour le traitement des données -Matplotlib: pour l'affichage des graphiques (% matplotlib inline est utilisé lors de l'affichage des graphiques dans le système jupyter.) ・ Numpy: pour le calcul -Tkinter: Pour la création d'interface graphique. (Il existe de nombreux types, mais tkinter est inclus par défaut dans anaconda, il est donc facile à utiliser.)
J'utilise une bibliothèque orthodoxe comme celle-ci.
J'ai défini quelques fonctions cette fois. Il y en a deux principaux. ・ Fonction pour acquérir des données sur le cours des actions -Une fonction qui calcule et affiche un graphique lorsqu'un bouton est enfoncé
Après avoir obtenu les données sur le cours de l'action à partir du code de la société, j'ai défini une fonction qui calcule la moyenne de 5,25,50 jours, l'ajoute aux données et la renvoie. C'est un pakuri rond de kinocode.
def company_stock(start,end,company_code):
df = data.DataReader(company_code,'stooq')
df = df[(df.index <=end)&(df.index >=start)]
date=df.index
price=df['Close']
span01 = 5
span02 = 25
span03 = 50
df['sma01'] = price.rolling(window=span01).mean()
df['sma02'] = price.rolling(window=span02).mean()
df['sma03'] = price.rolling(window=span03).mean()
return df
L'événement lorsque le bouton est enfoncé est défini comme une fonction. Nous définissons une fonction qui obtient la valeur du texte, récupère les données sur le cours de l'action et l'affiche dans l'interface graphique avec l'ensemble de graphiques.
##événement de clic
def btn_click():
company_code = txtBox.get()
start = txtBox2.get()
end = txtBox3.get()
df = company_stock(start,end,company_code)
date=df.index
price=df['Close']
#plt.figure(figsize=(20,10))
fig = Figure(figsize=(6,6), dpi=100)
plt = fig.add_subplot(2,1,1)
plt.plot(date,price,label=company_code)
plt.plot(date,df['sma01'],label='sma01')
plt.plot(date,df['sma02'],label='sma02')
plt.plot(date,df['sma03'],label='sma03')
plt.set_title(company_code)
plt.set_xlabel('date')
plt.set_ylabel('price')
#plt.title(company_code)
#plt.xlabel('date')
#plt.ylabel('price')
plt.legend()
plt = fig.add_subplot(2,1,2)
plt.bar(date,df['Volume'],label='Volume',color='grey')
plt.legend()
canvas = FigureCanvasTkAgg(fig, master=root) # Generate canvas instance, Embedding fig in root
canvas.draw()
canvas.get_tk_widget().place(x=10, y=120)
Code pour définir l'interface graphique. L'arrangement et les écrans sont créés par essais et erreurs. Les événements de bouton sont définis en associant "command = btn_click" à la fonction. (Je pensais que ce serait compréhensible si je l'écrivais un peu.)
# Figure instance
fig = plt.Figure(figsize=(6,6), dpi=100)
root = tk.Tk()
root.title("stock analsis")
root.geometry("620x740")
#Écrire du texte
label = tk.Label(root, text="Code de l'entreprise")
label.place(x=10, y=10)
label2 = tk.Label(root, text="date de début")
label2.place(x=120, y=10)
label3 = tk.Label(root, text="Date de fin")
label3.place(x=230, y=10)
#Ecrire un bouton
txtBox = tk.Entry()
txtBox.configure(state='normal', width=15)
txtBox.place(x=10, y=40)
txtBox2 = tk.Entry()
txtBox2.configure(state='normal', width=15)
txtBox2.place(x=120, y=40)
txtBox3 = tk.Entry()
txtBox3.configure(state='normal', width=15)
txtBox3.place(x=230, y=40)
#Installez le bouton
button = tk.Button(text='Affichage du cours de l'action', width=20, command=btn_click)
button.place(x=10, y=80)
#Ecrire un graphique
canvas = FigureCanvasTkAgg(fig, master=root) # Generate canvas instance, Embedding fig in root
canvas.draw()
canvas.get_tk_widget().place(x=10, y=120)
root.mainloop()
Le résultat final est un code comme celui-ci: (Connectez simplement le cordon par le haut.) Pour le moment, si vous copiez ceci, cela fonctionnera probablement!
stock_analysis.py
from pandas_datareader import data
import tkinter as tk
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
import matplotlib.pyplot as plt
from matplotlib.figure import Figure
import numpy as np
%matplotlib inline
def company_stock(start,end,company_code):
df = data.DataReader(company_code,'stooq')
df = df[(df.index <=end)&(df.index >=start)]
date=df.index
price=df['Close']
span01 = 5
span02 = 25
span03 = 50
df['sma01'] = price.rolling(window=span01).mean()
df['sma02'] = price.rolling(window=span02).mean()
df['sma03'] = price.rolling(window=span03).mean()
return df
#événement de clic
def btn_click():
company_code = txtBox.get()
start = txtBox2.get()
end = txtBox3.get()
df = company_stock(start,end,company_code)
date=df.index
price=df['Close']
#plt.figure(figsize=(20,10))
fig = Figure(figsize=(6,6), dpi=100)
plt = fig.add_subplot(2,1,1)
plt.plot(date,price,label=company_code)
plt.plot(date,df['sma01'],label='sma01')
plt.plot(date,df['sma02'],label='sma02')
plt.plot(date,df['sma03'],label='sma03')
plt.set_title(company_code)
plt.set_xlabel('date')
plt.set_ylabel('price')
#plt.title(company_code)
#plt.xlabel('date')
#plt.ylabel('price')
plt.legend()
plt = fig.add_subplot(2,1,2)
plt.bar(date,df['Volume'],label='Volume',color='grey')
plt.legend()
canvas = FigureCanvasTkAgg(fig, master=root) # Generate canvas instance, Embedding fig in root
canvas.draw()
canvas.get_tk_widget().place(x=10, y=120)
# Figure instance
fig = plt.Figure(figsize=(6,6), dpi=100)
root = tk.Tk()
root.title("stock analsis")
root.geometry("620x740")
#Écrire du texte
label = tk.Label(root, text="Code de l'entreprise")
label.place(x=10, y=10)
label2 = tk.Label(root, text="date de début")
label2.place(x=120, y=10)
label3 = tk.Label(root, text="Date de fin")
label3.place(x=230, y=10)
#Ecrire un bouton
txtBox = tk.Entry()
txtBox.configure(state='normal', width=15)
txtBox.place(x=10, y=40)
txtBox2 = tk.Entry()
txtBox2.configure(state='normal', width=15)
txtBox2.place(x=120, y=40)
txtBox3 = tk.Entry()
txtBox3.configure(state='normal', width=15)
txtBox3.place(x=230, y=40)
#Installez le bouton
button = tk.Button(text='Affichage du cours de l'action', width=20, command=btn_click)
button.place(x=10, y=80)
#Ecrire un graphique
canvas = FigureCanvasTkAgg(fig, master=root) # Generate canvas instance, Embedding fig in root
canvas.draw()
canvas.get_tk_widget().place(x=10, y=120)
root.mainloop()
Obtenez le code de la société sur le site de la bourse des valeurs comme indiqué dans la figure ci-dessous.
Si vous remplissez les conditions en fonction de cela, vous pouvez obtenir les résultats suivants.
Pour le moment, je savais comment afficher le graphique sur l'interface graphique, donc j'ai pensé qu'il serait plus facile d'afficher le graphique et de le considérer. Je suis redevenu plus intelligent. Mais je veux m'en souvenir. (J'ai oublié comment utiliser SSH en dehors du LAN, avec lequel j'ai eu beaucoup de problèmes récemment, et j'ai ressenti la fragilité de la mémoire des gens.)
Recommended Posts