Ich habe in Python ein Programm erstellt, das die 1-Minuten-Daten von FX auf eine beliebige Zeit (1 Stunde usw.) ändert.

Über diesen Artikel

Erstellen Sie ein Programm, das die 1-Minuten-Daten von FX in eine beliebige Zeit (z. B. 1 Stunde) ändert.

Ergebnisse

1-Minuten-Daten ... Wechseln Sie zu einer beliebigen Zeit und geben Sie sie in CSV aus ↓ (Das Bild unten ist für 1 Stunde)

Datenaufbereitung

Die 1-Minuten-Daten wurden von GMO Click Securities heruntergeladen. Wenn Sie ein Konto haben, können Sie es herunterladen, auch wenn der Einzahlungsbetrag 0 beträgt. Ich bin sehr dankbar. (* Für andere Unternehmen ist es nutzlos, wenn der Einzahlungsbetrag kein bestimmter Betrag ist oder nur Daten auf Tagesebene vorliegen.)

Dieses Mal habe ich die US-Dollar / Yen-Daten von Januar 2007 bis September 2020 heruntergeladen. image.png

Ordnerstruktur

Wenn Sie die heruntergeladenen Daten entpacken, hat sie die folgende Ordnerstruktur. / Währungsname_yyyymm / yyyymm /

In diesem Ordner wird die CSV jedes Tages (Währungsname_JJJMMMTT CSV) gespeichert. image.png

Die diesmal heruntergeladenen CSV-Daten sind Ich habe vor, es in zukünftigen Programmen zu verwenden Ich werde es in der folgenden Baumstruktur speichern. image.png

Mit einer solchen Baumstruktur ist es einfach zu handhaben, selbst wenn die Arten von Währungen, die in Zukunft heruntergeladen werden sollen, zunehmen. Außerdem befindet sich das diesmal erstellte Programm in derselben Hierarchie wie der CSV-Ordner. Ich werde einen Ordner namens "Make_OHCL" erstellen und dort speichern.

Über den Inhalt von CSV

csv hat 2007 die folgende Feldstruktur. image.png

Seit etwa 2016 hat sich die Anzahl der Felder jedoch wie folgt erhöht. Spreads (Handelsgebühren) werden berücksichtigt. image.png

Es ist ein bisschen nervig, aber Sie müssen zwei Arten von CSV unterstützen.

Code

Das diesmal erstellte Programm befindet sich in derselben Hierarchie wie der CSV-Ordner.

from copy import copy
import glob
import numpy as np
import pandas as pd

def make_ohlc(ashi, arr=None):
    """

    ashi:
    arr:
    """

    #
    if arr.shape[1] > 5:
        arr = arr[:,0:5]

    arr = np.c_[arr, np.zeros((len(arr),4))] #Die Datenverarbeitung verwendet Numpy, um zu beschleunigen, nicht Pandas. Funktionsbeschreibung: Erstellt einen OHLC für den angegebenen Zeitraum und gibt ein Array zurück. Zeitrahmen nach Änderung. Wenn es 60 ist, ist es 1 Stunde. Eine 1-minütige CSV-Datei, die in ein Array konvertiert wurde. Wenn die gelesene CSV-Datei 6 oder mehr Spalten enthält, lesen Sie nur die 1. bis 5. Spalte. 4 Spalten hinzugefügt
    for i in range(0, len(arr), ashi):
        try:
            arr[i,5] = arr[i,1] #Offener Preis
            max_tmp = arr[i:i+ashi,2].astype(np.float) #Holen Sie sich eine Liste der hohen Preise für einen bestimmten Zeitraum
            arr[i,6] = max_tmp.max() #Hoher Preis
            min_tmp = arr[i:i+ashi,3].astype(np.float) #Holen Sie sich eine Liste der günstigen Preise für einen bestimmten Zeitraum
            arr[i,7] = min_tmp.min() #Niedriger Preis
            arr[i,8] = arr[i+ashi-1,4] #Schlusskurs
        except IndexError:
            pass

    arr = np.delete(arr, [1,2,3,4], axis=1) #Löschen Sie die 2. bis 5. Spalte, da sie nicht mehr benötigt werden
    arr = arr[arr[:,4] != 0] #Zeile 0 löschen

    return arr

currency = 'USDJPY' #Name des Währungspaars
ashi = 60 #Die Länge des Beines, das Sie erhalten möchten(60 Minuten für 60 Minuten)
arr = None #Arr initialisieren

csv_dir = '../csv/' + currency + '/' # /csv/Ordner für den Währungsnamen
dir_list = glob.glob(csv_dir + '*') # csv/Währungsname/Währungsname_Holen Sie sich eine Liste der JJJJMM-Ordner

for i in range(len(dir_list)):
    file_list = glob.glob(dir_list[i] + '/' + dir_list[i][-6:] + '/*') #Holen Sie sich eine Liste der Pfade für CSV-Dateien

    for j in range(len(file_list)):
        pre_arr = copy(arr) #Vor dem vorherigen arr_Speichern bis arr
        csv_arr = np.loadtxt(file_list[j], delimiter=",", skiprows=1, dtype='object') #Laden Sie csv in ein Array
        arr = make_ohlc(ashi, csv_arr) #Beinlänge ändern

        if pre_arr is not None:
            #Verketten Sie das vorherige arr und das konvertierte arr
            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") #In CSV speichern

Diesmal befanden sich also mehrere CSV-Dateien in mehreren Verzeichnissen Der Code wurde aufgrund des Verkettungsprozesses usw. etwas länger. Wenn Sie bereits CSV in einer Datei haben, ist nur der folgende Code in Ordnung.

def make_ohlc(ashi, arr=None):
    """
Funktionsbeschreibung: Erstellt einen OHLC für den angegebenen Zeitraum und gibt ein Array zurück.
    ashi:Zeitrahmen nach Änderung. Wenn es 60 ist, ist es 1 Stunde.
    arr:Eine 1-minütige CSV-Datei, die in ein Array konvertiert wurde.
    """

    #Wenn die gelesene CSV-Datei 6 oder mehr Spalten enthält, lesen Sie nur die 1. bis 5. Spalte.
    if arr.shape[1] > 5:
        arr = arr[:,0:5]

    arr = np.c_[arr, np.zeros((len(arr),4))] #4 Spalten hinzugefügt
    for i in range(0, len(arr), ashi):
        try:
            arr[i,5] = arr[i,1] #Offener Preis
            max_tmp = arr[i:i+ashi,2].astype(np.float) #Holen Sie sich eine Liste der hohen Preise für einen bestimmten Zeitraum
            arr[i,6] = max_tmp.max() #Hoher Preis
            min_tmp = arr[i:i+ashi,3].astype(np.float) #Holen Sie sich eine Liste der günstigen Preise für einen bestimmten Zeitraum
            arr[i,7] = min_tmp.min() #Niedriger Preis
            arr[i,8] = arr[i+ashi-1,4] #Schlusskurs
        except IndexError:
            pass

    arr = np.delete(arr, [1,2,3,4], axis=1) #Löschen Sie die 2. bis 5. Spalte, da sie nicht mehr benötigt werden
    arr = arr[arr[:,4] != 0] #Zeile 0 löschen

    return arr

currency = 'USDJPY' #Name des Währungspaars
ashi = 60 #Die Länge des Beines, das Sie erhalten möchten(60 Minuten für 60 Minuten)

csv_arr = np.loadtxt(<CSV-Dateipfad>, delimiter=",", skiprows=1, dtype='object') #Laden Sie csv in ein Array
arr = make_ohlc(ashi, csv_arr) #Beinlänge ändern

filename = currency + '_ashi=' + str(ashi) + '.csv'
np.savetxt(filename, arr , delimiter="," , header="Date,Open,High,Low,Close" ,fmt="%s") #In CSV speichern

Bestätigung

Stellen Sie sicher, dass die geänderte CSV-Datei 1 Stunde lang ausgegeben wird.

Wenn Sie es hilfreich finden, klicken Sie bitte auf LGTM. Es wird das Update fördern.

Der folgende Artikel beschreibt das Erstellen eines Diagrammbilds aus einer CSV-Datei. https://qiita.com/sw1394/items/b2a86cfc663d89915e28

Recommended Posts

Ich habe in Python ein Programm erstellt, das die 1-Minuten-Daten von FX auf eine beliebige Zeit (1 Stunde usw.) ändert.
Ich habe ein Programm erstellt, um die Größe einer Datei mit Python zu überprüfen
Ich habe in Python ein Programm erstellt, das FX-CSV-Daten liest und eine große Anzahl von Diagrammbildern erstellt
Ich habe einen Appdo-Befehl erstellt, um Befehle im Kontext der App auszuführen
Ich möchte die Ergebnisse von% time, %% time usw. in einem Objekt (Variable) speichern.
Ich habe ein Programm erstellt, das die Fehlersuche in Sekunden löst
Eine Funktion, die die Verarbeitungszeit einer Methode in Python misst
[Python] Ein Programm, das den Inhalt der Liste nach links dreht
Ich habe ein Pay-Management-Programm in Python erstellt!
Ich habe eine Webanwendung in Python erstellt, die Markdown in HTML konvertiert
Ich möchte einen Teil der Excel-Zeichenfolge mit Python einfärben
Ich möchte einen beliebigen Befehl im Befehlsverlauf von Shell belassen
Python: Ich möchte die Verarbeitungszeit einer Funktion genau messen
Ich habe eine Funktion erstellt, um die Bewegung eines zweidimensionalen Arrays (Python) zu sehen.
Verwenden wir Python, um die Häufigkeit der in einem Datenrahmen enthaltenen Binärdaten in einem einzelnen Balkendiagramm darzustellen.
Ich habe ein Caesar-Kryptografieprogramm in Python erstellt.
Ich habe ein Tool erstellt, um die Ausführungszeit von cron zu schätzen (+ PyPI-Debüt)
Mit LINEBot habe ich eine Anwendung erstellt, die mich über die "Buszeit" informiert.
Ich habe ein Skript erstellt, das das aktive Fenster mit win32gui von Python aufzeichnet
Teil 1 Ich habe ein Beispiel für die Antwort auf das Referenzproblem geschrieben, wie man in Python in Echtzeit offline schreibt
[Python] Ein Programm, das die Anzahl der Täler zählt
[Python] Ein Programm, das die Positionen von Kängurus vergleicht.
[Python] Ich habe eine App erstellt, um die feine Sprachunterscheidung von englischen Wörtern zu üben.
Programm, das die CSV-Daten der Transaktionshistorie der SBI Securities-Aktie zusammenfasst [Python3]
[Python / C] Ich habe versucht, ein Gerät zu erstellen, das den Bildschirm eines PCs drahtlos aus der Ferne scrollt.
Ich habe ein Paket erstellt, um Zeitreihen mit Python zu filtern
Ich habe eine Klasse erstellt, um das Analyseergebnis von MeCab in ndarray mit Python zu erhalten
Ein Programm, das die für iOS-App-Symbole in Python erforderliche Bildgröße automatisch ändert
Zusammenfassung der Punkte, die beim Schreiben eines Programms zu beachten sind, das unter Python 2.5 ausgeführt wird
Ich habe eine Funktion erstellt, um das Modell von DCGAN zu überprüfen
[Python] Programmieren, um die Nummer von a in einer Zeichenfolge zu finden, die eine bestimmte Anzahl von Malen wiederholt.
Ich habe versucht, "ein Programm, das doppelte Anweisungen in Python entfernt"
So berechnen Sie die Summe oder den Durchschnitt von Zeitreihen-CSV-Daten in einem Augenblick
Ich habe eine Funktion zum Trimmen des Bildes von Python openCV erstellt. Verwenden Sie sie daher bitte.
Ich schrieb einen Test in "Ich habe versucht, die Wahrscheinlichkeit eines Bingospiels mit Python zu simulieren".
Python-Programm, das die Zeitnutzung aus icalendar-Daten aggregiert
Eine einfache Möglichkeit, die in Python benötigte Zeit anzuzeigen und sie intelligenter zu verbessern
[Python] Ein Programm, um die Anzahl der Äpfel und Orangen zu ermitteln, die geerntet werden können
Ich habe einen Linienbot erstellt, der das Geschlecht und das Alter einer Person anhand des Bildes errät
Ich möchte mit Python eine beliebige URL aus der Zeichenfolge der HTML-Quelle extrahieren
Schlafverarbeitung für einen bestimmten Zeitraum (Sekunden) oder länger in Python
Ich habe einen verstümmelten Generator erstellt, der Ihre Lieblingssätze von UTF-8 bis Shift-JIS (cp932) in Python codiert
Ich habe eine Funktion erstellt, um zu überprüfen, ob der Webhook vorerst in Lambda empfangen wird
[Python] Ich habe versucht, mit argparse ein einfaches Programm zu erstellen, das in der Befehlszeile funktioniert
Eine Geschichte, die nicht funktioniert hat, als ich versucht habe, mich mit dem Python-Anforderungsmodul anzumelden
Teil 1 Ich habe die Antwort auf das Referenzproblem geschrieben, wie man in Python in Echtzeit offline schreibt
Ich habe versucht, ein Programm zu erstellen, um die Fehlersuche von Saiseriya zu lösen (Hinweis)
So bestimmen Sie die Existenz eines Selenelements in Python
Ich habe die Berechnungszeit des in Python geschriebenen gleitenden Durchschnitts verglichen
Wie Sie die interne Struktur eines Objekts in Python kennen
Ich habe die Bewegung Python3 ausprobiert, die die Richtung im Koordinatensystem ändert
So überprüfen Sie die Speichergröße einer Variablen in Python
Ich habe versucht, mit Python einen regulären Ausdruck von "Zeit" zu erstellen
Ich habe den Code geschrieben, um den Brainf * ck-Code in Python zu schreiben