FX-Vorhersagen in Deep Learning (CNN) treffen Aus CSV-Daten (Datum und Uhrzeit, Eröffnungspreis, Hochpreis, Niedrigpreis, Schlusskurs werden beschrieben) Ich möchte eine große Anzahl von Diagrammbildern erzeugen.
Erstellen Sie das folgende Diagrammbild aus CSV.
Die CSV-Datei ist ein stündlicher Balken von USDJPY. (Von Januar 2007 bis September 2020) Wenn Sie keine stündlichen CSV-Daten haben, lesen Sie bitte diesen Artikel . Der Inhalt von CSV ist wie folgt. Es gibt mehr als 80.000 Zeilen.
Der Code ist unten.
import matplotlib.pylab as plt
import pandas as pd
import numpy as np
def make_sma(parab, arr=None):
"""
Funktionsbeschreibung: Fügt dem als Argument empfangenen Array eine durchschnittliche Bewegungslinie hinzu.
parab:Zeitraum
arr:Array bestehend aus Datum und Uhrzeit, Öffnungspreis, Hochpreis, Niedrigpreis, Schlusskurs
"""
row = arr.shape[1] #Ermitteln Sie die Anzahl der Spalten in einem Array
arr = np.c_[arr, np.zeros((len(arr),1))] #Spalte hinzufügen
for i in range(parab, len(arr)):
tmp = arr[i-parab+1:i+1,4].astype(np.float) #Geben Sie die Nummer innerhalb des Zeitraums ein
arr[i,row] = np.mean(tmp) #Geben Sie den Wert des gleitenden Durchschnitts ein
return arr
def dataframe_to_img(chart_range, img_name, df=None):
"""
Funktionsbeschreibung: DataFrame in Image konvertieren und speichern.
chart_range:DataFrame-Bereich
img_name:Bildspeicherziel
df:Zu zeichnender DataFrame
"""
df = df[0:chart_range]
plt.figure()
df.plot(legend=None) #Legende löschen
plt.axis('off') #Randentfernung
plt.tick_params(labelbottom=False,
labelleft=False,
bottom=False,
left=False) #Randentfernung
plt.box(False) #Randentfernung
plt.savefig(img_name,bbox_inches="tight") #Ränder entfernen und speichern
plt.close('all')
#Laden Sie csv in ein Array
arr = np.loadtxt(r'CSV-Datei', delimiter=",", skiprows=1, dtype='object')
#Technische Indikatoren hinzugefügt
arr = make_sma(parab=25, arr=arr)
#In DataFrame konvertieren
col_name = ['Date',"Open","High","Low","Close","SMA"]
df = pd.DataFrame(arr,columns=col_name)
#In DataFrame konvertieren und Bild speichern
df = df[df!=0].dropna() #Zeile 0 löschen
df = df[['Close','SMA']] #Nur die Spalten, die im Diagramm gezeichnet werden sollen
df = df.astype('float') #In Float umwandeln
chart_range = 360
for i in range(20):
try:
img_name = str(i) + '.png' #Bildspeicherziel
dataframe_to_img(chart_range, img_name, df=df[i:chart_range+i])
except IndexError:
pass
#DataFrame wird ebenfalls gespeichert, da es später als korrektes Antwortetikett verwendet wird.
df.to_csv(r'tarintest_labels.csv',encoding='utf_8_sig')
Eine Beschreibung des Codes. Laden Sie zuerst die CSV mit numpy.
Dann mit arr = make_sma (parab = 25, arr = arr)
,
Fügen Sie arr eine gleitende Durchschnittslinie hinzu. Die Periode der gleitenden Durchschnittslinie wird durch parab angegeben.
Wenn Sie Langzeitzeilen wie 75 und 200 anstelle von 25 hinzufügen möchten,
Sie können es hinzufügen, indem Sie den Wert von parab ändern und hinzufügen.
Nach dem Hinzufügen der technischen Indikatoren
Mit df = pd.DataFrame (arr, column = col_name)
Konvertieren Sie arr in DataFrame.
chart_range = 360
ist der Bereich der anzuzeigenden Diagramme.
Diesmal handelt es sich um eine 1-stündige CSV. Wenn es sich also um 360 handelt, wird sie 360 Stunden lang angezeigt.
Übergeben Sie schließlich in der for-Anweisung den DataFrame an die Funktion dataframe_to_img
und speichern Sie ihn nacheinander.
dataframe_to_img verwendet matplotlib.
Grenzen usw. werden gelöscht, weil sie das Lernen beim tiefen Lernen beeinträchtigen.
Speichern Sie nach der Ausgabe des Bildes den DataFrame als CSV. Dies dient dazu, es als korrektes Antwortetikett für tiefes Lernen umzuleiten.
Stellen Sie sicher, dass das Bild gespeichert ist.
Diesmal nur eine einfache gleitende Durchschnittslinie, Es ist auch möglich, das Bollinger-Band und die Ichimoku-Balance-Tabelle anzuzeigen.
Wenn Sie es hilfreich finden, verwenden Sie bitte LGTM. Es wird das Update fördern.
Recommended Posts