Vielen Dank. Ich werde zum ersten Mal seit langer Zeit einen Artikel veröffentlichen. Das ist Wamaro. Aufgrund der jüngsten Umstände verstecke ich das Schaben. In den alten Tagen, als ich hörte, dass es kratzte, "Was? Was ist es? Ich habe nachgedacht, aber jetzt habe ich das starke Gefühl, dass ich kratzen muss. Ich habe wirklich das Gefühl, dass sich die Ideen der Menschen je nach Position und Zeit ändern. In diesem Sinne habe ich übrigens an einem Programm gearbeitet, das ich komplett losgeworden bin. Sogar jetzt schreibe ich, ohne von irgendjemandem für die Kapselung oder das Erlernen des Codes verantwortlich gemacht zu werden. Das Programm soll ein Werkzeug sein. Es macht also keinen Sinn, ohne Zweck schriftlich zu schreiben. Du musst nicht einmal lernen. Daher schafft der Verrückte gewaltsam einen Zweck. Das ist der Grund. Dieses Mal möchte ich eine GUI mit Python erstellen. Insbesondere möchte ich nach Eingabe des Buchungskreises und des angegebenen Zeitraums den Code der App schreiben, der den Übergang des Aktienkurses während dieses Zeitraums anzeigt.
Die Umgebung ist unten dargestellt. ・ Windows10 ・ Python3 (Anakonda) Die Entwicklung erfolgte hauptsächlich im Jupyter-Labor.
Ich werde den Inhalt des Codes kurz erläutern. Wenn Sie nur die Ergebnisse wünschen, können Sie sich auf den endgültigen "endgültigen Code" beziehen.
Die diesmal verwendete Bibliothek ist unten dargestellt.
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
Das Hauptgefühl ist wie folgt. ・ Pandas: Zur Datenverarbeitung -Matplotlib: Für die Diagrammanzeige (% matplotlib inline wird verwendet, wenn Diagramme im Jupyter-System angezeigt werden.) ・ Numpy: Zur Berechnung -Tkinter: Für die GUI-Erstellung. (Es gibt viele Typen, aber tkinter ist standardmäßig in anaconda enthalten, daher ist es einfach zu bedienen.)
Ich benutze eine solche orthodoxe Bibliothek.
Ich habe diesmal einige Funktionen definiert. Es gibt zwei Haupt. ・ Funktion zum Erfassen von Aktienkursdaten
Nachdem ich die Aktienkursdaten aus dem Buchungskreis erhalten hatte, definierte ich eine Funktion, die den Durchschnitt von 5,25,50 Tagen berechnet, zu den Daten hinzufügt und zurückgibt. Dies ist ein rundes Pakuri von 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
Das Ereignis beim Drücken der Taste wird als Funktion definiert. Wir definieren eine Funktion, die den Wert aus dem Text abruft, die Aktienkursdaten abruft und diese in der GUI mit dem Diagrammsatz anzeigt.
##Klicken Sie auf Ereignis
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 zum Einstellen der GUI. Anordnung und Bildschirme werden durch Ausprobieren erstellt. Schaltflächenereignisse werden festgelegt, indem der Funktion "command = btn_click" zugeordnet wird. (Ich dachte, es wäre verständlich, wenn ich es ziemlich oft schreiben würde.)
# Figure instance
fig = plt.Figure(figsize=(6,6), dpi=100)
root = tk.Tk()
root.title("stock analsis")
root.geometry("620x740")
#Schreiben Sie Text
label = tk.Label(root, text="Buchungskreis")
label.place(x=10, y=10)
label2 = tk.Label(root, text="Anfangsdatum")
label2.place(x=120, y=10)
label3 = tk.Label(root, text="Endtermin")
label3.place(x=230, y=10)
#Schreiben Sie eine Schaltfläche
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)
#Installieren Sie die Schaltfläche
button = tk.Button(text='Aktienkursanzeige', width=20, command=btn_click)
button.place(x=10, y=80)
#Schreiben Sie eine Grafik
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()
Das Endergebnis ist Code wie folgt: (Schließen Sie einfach das Kabel von oben an.) Wenn Sie dies kopieren, wird es vorerst wahrscheinlich funktionieren!
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
#Klicken Sie auf Ereignis
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")
#Schreiben Sie Text
label = tk.Label(root, text="Buchungskreis")
label.place(x=10, y=10)
label2 = tk.Label(root, text="Anfangsdatum")
label2.place(x=120, y=10)
label3 = tk.Label(root, text="Endtermin")
label3.place(x=230, y=10)
#Schreiben Sie eine Schaltfläche
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)
#Installieren Sie die Schaltfläche
button = tk.Button(text='Aktienkursanzeige', width=20, command=btn_click)
button.place(x=10, y=80)
#Schreiben Sie eine Grafik
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()
Beziehen Sie den Buchungskreis von der Securities Exchange Site, wie in der folgenden Abbildung gezeigt.
Wenn Sie die darauf basierenden Bedingungen eingeben, können Sie die folgenden Ergebnisse erhalten.
Vorläufig wusste ich, wie man das Diagramm auf der GUI anzeigt, daher dachte ich, es wäre einfacher, das Diagramm anzuzeigen und zu betrachten. Ich wurde wieder schlauer. Aber ich möchte mich daran erinnern. (Ich habe vergessen, wie man SSH außerhalb des LAN verwendet, mit dem ich in letzter Zeit große Probleme hatte, und habe die Fragilität des Gedächtnisses der Menschen gespürt.)
Recommended Posts