Créez un programme qui change les données de 1 minute de FX en une heure arbitraire (par exemple 1 heure).
Données 1 minute ... Changez à tout moment et sortie en CSV ↓ (l'image ci-dessous est pour 1 heure)
Les données d'une minute ont été téléchargées à partir de GMO Click Securities. Si vous avez un compte, vous pouvez télécharger même si le montant du dépôt est de 0. Je suis très reconnaissant. (* Pour les autres entreprises, cela ne sert à rien si le montant du dépôt n'est pas un certain montant ou s'il n'y a que des données de niveau quotidien.)
Cette fois, j'ai téléchargé les données dollar US / yen de janvier 2007 à septembre 2020.
Lorsque vous décompressez les données téléchargées, elles ont la structure de dossiers suivante.
/ Nom de la devise_yyyymm / yyyymm /
/ USDJPY_202008 / 202008
Le CSV de chaque jour (nom de la devise_yyyymmdd.csv) est enregistré dans ce dossier.
Les données CSV téléchargées cette fois sont Je prévois de l'utiliser dans de futurs programmes, donc Je vais l'enregistrer dans l'arborescence suivante.
Avec une telle arborescence, il est facile à manipuler même si les types de devises à télécharger dans le futur augmentent. Aussi, le programme créé cette fois est dans la même hiérarchie que le dossier csv, Je vais créer un dossier appelé "Make_OHCL" et l'enregistrer ici.
csv a la structure de champs suivante en 2007.
Cependant, depuis 2016 environ, le nombre de champs a augmenté comme suit. Les spreads (frais de négociation) sont pris en compte.
C'est un peu ennuyeux, mais vous devez prendre en charge deux types de CSV.
Le programme créé cette fois est dans la même hiérarchie que le dossier csv, Créez un dossier appelé "Make_OHCL" et créez-le directement en dessous. Le traitement des données utilise numpy pour accélérer, pas les pandas.
from copy import copy
import glob
import numpy as np
import pandas as pd
def make_ohlc(ashi, arr=None):
"""
Description de la fonction: crée un OHLC pour la période spécifiée et renvoie un tableau.
ashi:Délai après le changement. Si c'est 60, c'est 1 heure.
arr:Un fichier csv d'une minute converti en tableau.
"""
#S'il y a 6 colonnes ou plus du fichier CSV lu, ne lisez que les 1ère à 5ème colonnes.
if arr.shape[1] > 5:
arr = arr[:,0:5]
arr = np.c_[arr, np.zeros((len(arr),4))] #4 colonnes ajoutées
for i in range(0, len(arr), ashi):
try:
arr[i,5] = arr[i,1] #Prix ouvert
max_tmp = arr[i:i+ashi,2].astype(np.float) #Obtenez une liste de prix élevés pour une période spécifiée
arr[i,6] = max_tmp.max() #Prix élevé
min_tmp = arr[i:i+ashi,3].astype(np.float) #Obtenez une liste de prix bas pour une période spécifiée
arr[i,7] = min_tmp.min() #Bas prix
arr[i,8] = arr[i+ashi-1,4] #le dernier prix
except IndexError:
pass
arr = np.delete(arr, [1,2,3,4], axis=1) #Supprimer les 2e à 5e colonnes car elles ne sont plus nécessaires
arr = arr[arr[:,4] != 0] #Supprimer la ligne 0
return arr
currency = 'USDJPY' #Nom de la paire de devises
ashi = 60 #La longueur de la jambe que vous souhaitez obtenir(60 minutes pendant 60 minutes)
arr = None #Initialiser arr
csv_dir = '../csv/' + currency + '/' # /csv/Dossier de nom de devise
dir_list = glob.glob(csv_dir + '*') # csv/Nom de la devise/Nom de la devise_Obtenez une liste des dossiers aaaamm
for i in range(len(dir_list)):
file_list = glob.glob(dir_list[i] + '/' + dir_list[i][-6:] + '/*') #Obtenez une liste de chemins pour les fichiers csv
for j in range(len(file_list)):
pre_arr = copy(arr) #Pré le précédent arr_Enregistrer dans arr
csv_arr = np.loadtxt(file_list[j], delimiter=",", skiprows=1, dtype='object') #Charger le csv dans le tableau
arr = make_ohlc(ashi, csv_arr) #Changer la longueur de la jambe
if pre_arr is not None:
#Concaténer l'arrr précédent et l'arrr converti
arr = np.vstack([pre_arr,arr])
filename = currency + '_ashi=' + str(ashi) + '.csv'
np.savetxt(filename, arr , delimiter="," , header="Date,Open,High,Low,Close" ,fmt="%s") #Enregistrer au format CSV
Cette fois, il y avait plusieurs fichiers CSV dans plusieurs répertoires, donc Le code est devenu un peu plus long en raison du processus de concaténation, etc. Si vous avez déjà CSV dans un fichier, seul le code suivant convient.
def make_ohlc(ashi, arr=None):
"""
Description de la fonction: crée un OHLC pour la période spécifiée et renvoie un tableau.
ashi:Délai après le changement. Si c'est 60, c'est 1 heure.
arr:Un fichier csv d'une minute converti en tableau.
"""
#S'il y a 6 colonnes ou plus du fichier CSV lu, ne lisez que les 1ère à 5ème colonnes.
if arr.shape[1] > 5:
arr = arr[:,0:5]
arr = np.c_[arr, np.zeros((len(arr),4))] #4 colonnes ajoutées
for i in range(0, len(arr), ashi):
try:
arr[i,5] = arr[i,1] #Prix ouvert
max_tmp = arr[i:i+ashi,2].astype(np.float) #Obtenez une liste de prix élevés pour une période spécifiée
arr[i,6] = max_tmp.max() #Prix élevé
min_tmp = arr[i:i+ashi,3].astype(np.float) #Obtenez une liste de prix bas pour une période spécifiée
arr[i,7] = min_tmp.min() #Bas prix
arr[i,8] = arr[i+ashi-1,4] #le dernier prix
except IndexError:
pass
arr = np.delete(arr, [1,2,3,4], axis=1) #Supprimer les 2e à 5e colonnes car elles ne sont plus nécessaires
arr = arr[arr[:,4] != 0] #Supprimer la ligne 0
return arr
currency = 'USDJPY' #Nom de la paire de devises
ashi = 60 #La longueur de la jambe que vous souhaitez obtenir(60 minutes pendant 60 minutes)
csv_arr = np.loadtxt(<chemin du fichier csv>, delimiter=",", skiprows=1, dtype='object') #Charger le csv dans le tableau
arr = make_ohlc(ashi, csv_arr) #Changer la longueur de la jambe
filename = currency + '_ashi=' + str(ashi) + '.csv'
np.savetxt(filename, arr , delimiter="," , header="Date,Open,High,Low,Close" ,fmt="%s") #Enregistrer au format CSV
Confirmez que le fichier CSV modifié est sorti pendant 1 heure.
Si vous le trouvez utile, cliquez sur LGTM. Ce sera encourageant de la mise à jour.
L'article suivant explique comment créer une image de graphique à partir d'un fichier CSV. https://qiita.com/sw1394/items/b2a86cfc663d89915e28