J'ai créé un programme en Python qui change les données de 1 minute de FX en une heure arbitraire (1 heure, etc.)

À propos de cet article

Créez un programme qui change les données de 1 minute de FX en une heure arbitraire (par exemple 1 heure).

Livrables

Données 1 minute ... Changez à tout moment et sortie en CSV ↓ (l'image ci-dessous est pour 1 heure)

Préparation des données

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. image.png

Structure des dossiers

Lorsque vous décompressez les données téléchargées, elles ont la structure de dossiers suivante. / Nom de la devise_yyyymm / yyyymm /

Le CSV de chaque jour (nom de la devise_yyyymmdd.csv) est enregistré dans ce dossier. image.png

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. image.png

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.

À propos du contenu du CSV

csv a la structure de champs suivante en 2007. image.png

Cependant, depuis 2016 environ, le nombre de champs a augmenté comme suit. Les spreads (frais de négociation) sont pris en compte. image.png

C'est un peu ennuyeux, mais vous devez prendre en charge deux types de CSV.

code

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

Vérification

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

Recommended Posts

J'ai créé un programme en Python qui change les données de 1 minute de FX en une heure arbitraire (1 heure, etc.)
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
J'ai créé un programme en Python qui lit les données FX CSV et crée un grand nombre d'images de graphiques
J'ai créé une commande appdo pour exécuter des commandes dans le contexte de l'application
Je souhaite stocker les résultats de% time, %% time, etc. dans un objet (variable)
J'ai créé un programme qui résout la recherche d'erreur en quelques secondes
Une fonction qui mesure le temps de traitement d'une méthode en python
[Python] Un programme qui fait pivoter le contenu de la liste vers la gauche
J'ai fait un programme de gestion de la paie en Python!
J'ai créé une application Web en Python qui convertit Markdown en HTML
Je veux colorer une partie de la chaîne Excel avec Python
Je souhaite laisser une commande arbitraire dans l'historique des commandes de Shell
Python: je souhaite mesurer proprement le temps de traitement d'une fonction
J'ai créé une fonction pour voir le mouvement d'un tableau à deux dimensions (Python)
Utilisons Python pour représenter la fréquence des données binaires contenues dans une trame de données dans un graphique à barres unique.
J'ai créé un programme cryptographique César en Python.
J'ai fait un outil pour estimer le temps d'exécution de cron (+ débuts de PyPI)
Avec LINEBot, j'ai fait une application qui m'informe de "l'heure du bus"
J'ai fait un script pour enregistrer la fenêtre active en utilisant win32gui de Python
Partie 1 J'ai écrit un exemple de la réponse au problème de référence de l'écriture hors ligne en temps réel en Python
[Python] Un programme qui compte le nombre de vallées
[Python] Un programme qui compare les positions des kangourous.
[Python] J'ai créé une application pour pratiquer la délicate distinction vocale des mots anglais.
Programme qui résume les données csv de l’historique des transactions de l’action SBI Securities [Python3]
[Python / C] J'ai créé un appareil qui fait défiler sans fil l'écran d'un PC à distance.
J'ai créé un package pour filtrer les séries chronologiques avec python
J'ai créé une classe pour obtenir le résultat de l'analyse par MeCab dans ndarray avec python
Un programme qui redimensionne automatiquement la taille d'image requise pour les icônes d'application iOS en Python
Résumé des points à garder à l'esprit lors de l'écriture d'un programme qui s'exécute sur Python 2.5
J'ai fait une fonction pour vérifier le modèle de DCGAN
[Python] Programmation pour trouver le nombre de a dans une chaîne de caractères qui se répète un nombre spécifié de fois.
J'ai essayé "un programme qui supprime les déclarations en double en Python"
Comment calculer la somme ou la moyenne des données csv de séries chronologiques en un instant
J'ai créé une fonction pour découper l'image de python openCV, alors veuillez l'utiliser.
J'ai écrit un doctest dans "J'ai essayé de simuler la probabilité d'un jeu de bingo avec Python"
Programme Python qui agrège l'utilisation du temps à partir des données icalendar
Un moyen simple de visualiser le temps pris en Python et un moyen plus intelligent de l'améliorer
[Python] Un programme pour trouver le nombre de pommes et d'oranges qui peuvent être récoltées
J'ai créé un robot Line qui devine le sexe et l'âge d'une personne à partir de l'image
Je souhaite extraire une URL arbitraire de la chaîne de caractères de la source html avec python
Mettre le processus en veille pendant un certain temps (secondes) ou plus en Python
J'ai créé un générateur brouillé qui encode vos phrases préférées de UTF-8 à Shift-JIS (cp932) en Python
J'ai créé une fonction pour vérifier si le webhook est reçu dans Lambda pour le moment
[Python] J'ai essayé de créer un programme simple qui fonctionne sur la ligne de commande en utilisant argparse
Une histoire qui n'a pas fonctionné lorsque j'ai essayé de me connecter avec le module de requêtes Python
Partie 1 J'ai écrit la réponse au problème de référence de l'écriture hors ligne en temps réel en Python
J'ai essayé de faire un programme pour résoudre (indice) la recherche d'erreur de Saiseriya
Comment déterminer l'existence d'un élément sélénium en Python
J'ai comparé le temps de calcul de la moyenne mobile écrite en Python
Comment connaître la structure interne d'un objet en Python
J'ai essayé le mouvement Python3 qui change la direction dans le système de coordonnées
Comment vérifier la taille de la mémoire d'une variable en Python
J'ai essayé de créer une expression régulière de "temps" en utilisant Python
J'ai écrit le code pour écrire le code Brainf * ck en python