Pour faire des prédictions FX dans le Deep Learning (CNN) À partir des données CSV (date et heure, prix d'ouverture, prix élevé, prix bas, cours de clôture sont décrits) Je souhaite générer un grand nombre d'images de graphiques.
Créez l'image de graphique suivante à partir de CSV.
Le fichier CSV est une barre horaire de USDJPY. (De janvier 2007 à septembre 2020) Si vous ne disposez pas de données CSV horaires, veuillez consulter cet article . Le contenu du CSV est le suivant. Il y a plus de 80 000 lignes.
Le code est ci-dessous.
import matplotlib.pylab as plt
import pandas as pd
import numpy as np
def make_sma(parab, arr=None):
"""
Description de la fonction: ajoute une ligne de mouvement moyenne au tableau reçu comme argument.
parab:période
arr:Tableau composé de la date et de l'heure, prix d'ouverture, prix élevé, prix bas, prix de clôture
"""
row = arr.shape[1] #Obtenir le nombre de colonnes dans un tableau
arr = np.c_[arr, np.zeros((len(arr),1))] #Ajouter une colonne
for i in range(parab, len(arr)):
tmp = arr[i-parab+1:i+1,4].astype(np.float) #Entrez le numéro dans la période
arr[i,row] = np.mean(tmp) #Entrez la valeur de la moyenne mobile
return arr
def dataframe_to_img(chart_range, img_name, df=None):
"""
Description de la fonction: Convertissez DataFrame en image et enregistrez-le.
chart_range:Gamme DataFrame
img_name:Destination d'enregistrement de l'image
df:DataFrame pour dessiner
"""
df = df[0:chart_range]
plt.figure()
df.plot(legend=None) #Supprimer la légende
plt.axis('off') #Suppression des frontières
plt.tick_params(labelbottom=False,
labelleft=False,
bottom=False,
left=False) #Suppression des frontières
plt.box(False) #Suppression des frontières
plt.savefig(img_name,bbox_inches="tight") #Supprimez les marges et économisez
plt.close('all')
#Charger le csv dans le tableau
arr = np.loadtxt(r'Fichier CSV', delimiter=",", skiprows=1, dtype='object')
#Ajout d'indicateurs techniques
arr = make_sma(parab=25, arr=arr)
#Convertir en DataFrame
col_name = ['Date',"Open","High","Low","Close","SMA"]
df = pd.DataFrame(arr,columns=col_name)
#Convertir en DataFrame et enregistrer l'image
df = df[df!=0].dropna() #Supprimer la ligne 0
df = df[['Close','SMA']] #Seules les colonnes à dessiner sur le graphique
df = df.astype('float') #Convertir en flottant
chart_range = 360
for i in range(20):
try:
img_name = str(i) + '.png' #Destination d'enregistrement de l'image
dataframe_to_img(chart_range, img_name, df=df[i:chart_range+i])
except IndexError:
pass
#DataFrame est également enregistré car il sera utilisé ultérieurement comme une étiquette de réponse correcte.
df.to_csv(r'tarintest_labels.csv',encoding='utf_8_sig')
Une description du code. Tout d'abord, chargez le CSV avec numpy.
Ensuite, avec ʻarr = make_sma (parab = 25, arr = arr)
`
Ajoutez une ligne moyenne mobile à arr. La période de la ligne moyenne mobile est spécifiée par parab.
Si vous souhaitez ajouter des lignes à long terme telles que 75 et 200 au lieu de 25,
Vous pouvez l'ajouter en modifiant la valeur de parab et en l'ajoutant.
Après avoir ajouté les indicateurs techniques, Avec `` df = pd.DataFrame (arr, columns = col_name) '' Convertissez arr en DataFrame.
`` chart_range = 360 '' est la plage de graphiques à afficher. Cette fois, il s'agit d'un CSV d'une heure, donc s'il s'agit de 360, il sera affiché pendant 360 heures.
Enfin, dans l'instruction for, passez le DataFrame à la fonction `` dataframe_to_img '' et enregistrez-le un par un. dataframe_to_img utilise matplotlib. Les frontières, etc. sont supprimées car elles interfèrent avec l'apprentissage dans l'apprentissage profond.
Après avoir sorti l'image, enregistrez le DataFrame au format CSV. Il s'agit de le détourner comme une étiquette de réponse correcte pour l'apprentissage en profondeur.
Assurez-vous que l'image est enregistrée.
Cette fois seulement une simple ligne moyenne mobile, Il est également possible d'afficher la bande de Bollinger et la table d'équilibre Ichimoku.
Si vous le trouvez utile, veuillez utiliser LGTM. Ce sera encourageant de la mise à jour.
Recommended Posts