Erstellen Sie ein Programm, das die 1-Minuten-Daten von FX in eine beliebige Zeit (z. B. 1 Stunde) ändert.
1-Minuten-Daten ... Wechseln Sie zu einer beliebigen Zeit und geben Sie sie in CSV aus ↓ (Das Bild unten ist für 1 Stunde)
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.
Wenn Sie die heruntergeladenen Daten entpacken, hat sie die folgende Ordnerstruktur.
/ Währungsname_yyyymm / yyyymm /
/ USDJPY_202008 / 202008
In diesem Ordner wird die CSV jedes Tages (Währungsname_JJJMMMTT CSV) gespeichert.
Die diesmal heruntergeladenen CSV-Daten sind Ich habe vor, es in zukünftigen Programmen zu verwenden Ich werde es in der folgenden Baumstruktur speichern.
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.
csv hat 2007 die folgende Feldstruktur.
Seit etwa 2016 hat sich die Anzahl der Felder jedoch wie folgt erhöht. Spreads (Handelsgebühren) werden berücksichtigt.
Es ist ein bisschen nervig, aber Sie müssen zwei Arten von CSV unterstützen.
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
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