[PYTHON] Vorbereitung auf das Erlernen technischer Indikatoren mit TFlearn

Einführung

Es gibt viele Arten von technischen Indikatoren, die in der Marktanalyse verwendet werden. Grundsätzlich werden jedoch die letzten vier Werte als Eingabedaten verwendet, und einige Berechnungen werden durchgeführt und ausgegeben.

Wenn Sie also die Eingabe- und Ausgabedaten kennen, können Sie abschätzen, welche Art von Berechnung Sie durchführen? Wenn Sie das Berechnungsmodell kennen und nur die darin enthaltenen Parameter festlegen, gibt es verschiedene Methoden wie die Systemidentifikation und den Optimierungsalgorithmus.

Es wäre jedoch ein wenig schwierig, selbst das Berechnungsmodell abzuschätzen, aber wenn der aktuelle Trend zu künstlicher Intelligenz und tiefem Lernen "universell" ist, wird es möglich sein. Nein, wenn Sie nicht so viel tun können, sollten Sie sich nicht künstliche Intelligenz nennen.

Abgesehen davon habe ich diesmal mit TFlearn versucht, herauszufinden, ob ich die technischen Indikatoren lernen kann, die ich im Voraus kannte.

Technische Indikatoren zu lernen

Der grundlegendste technische Indikator ist der gleitende Durchschnitt. Es ist ein einfacher linearer Prozess, Sie müssen also kein neuronales Netzwerk verwenden, aber es ist nicht zu einfach. Ich werde es von der wirklich einfachen versuchen.

Ich kann den Durchschnitt nicht mit einer Eingabe ermitteln, daher werde ich vorerst zwei verwenden. Ändern Sie jedoch die Gewichte auf 1/3 und 2/3.

y(n)=\frac{1}{3}x(n-1)+\frac{2}{3}x(n)

Dies ist der sogenannte linear gewichtete gleitende Durchschnitt (LWMA) der Periode 2, der MT5 ist.

iMA(_Symbol, 0, 2, 0, MODE_LWMA, PRICE_CLOSE);

Sie kann mit der Funktion von berechnet werden. Das Folgende ist die Dateiausgabe mit den täglichen Daten von USDJPY in MT5-Programm.

``USDJPY.f16408.txt`


Time,Open,High,Low,Close,Ind0
2015.01.02 00:00,120.416,120.74,119.805,120.458,120.257999999996
2015.01.05 00:00,120.531,120.646,119.371,119.631,119.906666666662
2015.01.06 00:00,119.285,119.504,118.05,118.363,118.785666666662
2015.01.07 00:00,118.587,119.647,118.504,119.249,118.953666666662
2015.01.08 00:00,119.314,119.961,119.157,119.652,119.517666666662
2015.01.09 00:00,119.727,119.876,118.415,118.509,118.889999999995
2015.01.12 00:00,118.315,119.315,118.098,118.346,118.400333333328
2015.01.13 00:00,118.363,118.849,117.534,117.925,118.065333333328
2015.01.14 00:00,117.89,117.937,116.067,117.335,117.531666666662
2015.01.15 00:00,117.257,117.941,116.151,116.165,116.554999999995
2015.01.16 00:00,116.183,117.764,115.849,117.541,117.082333333328
2015.01.19 00:00,117.426,117.78,116.919,117.557,117.551666666661
2015.01.20 00:00,117.654,118.866,117.64,118.766,118.362999999995
2015.01.21 00:00,118.67,118.759,117.179,117.956,118.225999999994
2015.01.22 00:00,117.917,118.665,117.245,118.469,118.297999999994
2015.01.23 00:00,118.633,118.813,117.534,117.754,117.992333333328
2015.01.26 00:00,117.634,118.497,117.263,118.447,118.215999999994
2015.01.27 00:00,118.413,118.657,117.334,117.861,118.056333333327
2015.01.28 00:00,117.746,118.262,117.249,117.536,117.644333333327
2015.01.29 00:00,117.489,118.486,117.385,118.257,118.016666666661
2015.01.30 00:00,118.336,118.459,117.296,117.542,117.780333333327
  :

Erstellung von Lehrerdaten

Lesen Sie die obige Datei und erstellen Sie Lehrerdaten. Die Datei enthält 4 Werte und Indexwerte, aber hier werden nur der Schlusskurs Close und der Indexwert Ind0 verwendet.

Erstellen Sie ungefähr 200 Abtastwerte von Eingabedaten (in diesem Fall 2) in "X" und den Indexausgabewert in "Y".

import numpy as np
import pandas as pd
import tensorflow as tf
import tflearn

file = 'USDJPY.f16408.txt'
ohlc = pd.read_csv(file, index_col='Time', parse_dates=True)
close = ohlc.Close.values
ind0 = ohlc.Ind0.values

N = 2
X = np.empty((0,N))
Y = np.empty((0,1))
for i in range(200):
    X = np.vstack((X, close[i:i+N]))
    Y = np.vstack((Y, ind0[i+N-1:i+N]))

Diagrammdefinition

Dies ist die Definition des in TFlearn verwendeten Diagramms. Dieses Mal definieren wir jedoch das Diagramm, das linear mit der Eingabeebene verbunden ist, vorausgesetzt, es handelt sich um ein lineares Modell. Außerdem verwende ich keine Voreingenommenheit, also setze Bias = False.

Für "Regression" waren die Standardergebnisse jedoch nicht sehr gut, daher habe ich die Lernrate so angepasst, dass sie mit der SGD-Methode allmählich abnimmt.

# Graph definition
layer_in = tflearn.input_data(shape=[None, N])
layer1 = tflearn.fully_connected(layer_in, 1, activation='linear', bias=False)
sgd = tflearn.optimizers.SGD(learning_rate=0.01, lr_decay=0.95, decay_step=100)
regression = tflearn.regression(layer1, optimizer=sgd, loss='mean_square')

Lernen

Mit TFlearn ist das Lernen einfach zu schreiben. Lernen Sie bis zu 10.000 Generationen.

# Model training
m = tflearn.DNN(regression)
m.fit(X, Y, n_epoch=10000, snapshot_epoch=False, run_id='MAlearn')

Ergebnis

Der Gewichtskoeffizient wird als Lernergebnis ausgegeben.

# Weights
print('\nweights')
for i in range(N):
    print('W['+str(i)+'] =' ,m.get_weights(layer1.W)[i])

Das Folgende ist die Ausgabe des Lernergebnisses.

---------------------------------
Run id: MAlearn
Log directory: /tmp/tflearn_logs/
---------------------------------
Training samples: 200
Validation samples: 0
--
Training Step: 40000  | total loss: 0.61673
| SGD | epoch: 10000 | loss: 0.61673 -- iter: 200/200
--

weights
W[0] = [ 0.43885291]
W[1] = [ 0.56114811]

Die genauen Gewichte sind "W [0] = 0,3333", "W [1] = 0,6777", es sieht also nicht so aus, als würden Sie richtig lernen.

Verarbeitung von Lehrerdaten

In diesem Beispiel bestand das Modell nur darin, die lineare Summe zweier Eingaben zu ermitteln. Wenn jedoch die Differenz zwischen den beiden Eingabedaten gering wäre, wäre der Fehler gering und das Lernen nicht erfolgreich. Daher habe ich dieses Mal versucht, nur die Lehrerdaten zu verwenden, wenn der Unterschied zwischen den beiden Daten 1 oder mehr beträgt.

N = 2
X = np.empty((0,N))
Y = np.empty((0,1))
for i in range(200):
    if abs(close[i]-close[i+1]) >= 1.0:
        X = np.vstack((X, close[i:i+N]))
        Y = np.vstack((Y, ind0[i+N-1:i+N]))

Das Ergebnis.

---------------------------------
Run id: MAlearn
Log directory: /tmp/tflearn_logs/
---------------------------------
Training samples: 22
Validation samples: 0
--
Training Step: 10000  | total loss: 1.94699
| SGD | epoch: 10000 | loss: 1.94699 -- iter: 22/22
--

weights
W[0] = [ 0.33961287]
W[1] = [ 0.66053367]

Die Anzahl der Proben ist auf 22 gesunken, aber das Gewicht liegt näher am wahren Wert als zuvor.

Laute Lehrerdaten

Erstens dient das neuronale Netzwerk nicht der genauen numerischen Vorhersage, sondern der fairen Vorhersage.

Daher habe ich dieses Mal Gaußsches Rauschen mit einem Durchschnitt von 0 und einer Standardabweichung von 0,1 zum Indexwert als Lehrerdaten hinzugefügt.

N = 2
X = np.empty((0,N))
Y = np.empty((0,1))
for i in range(200):
    if abs(close[i]-close[i+1]) >= 1.0:
        X = np.vstack((X, close[i:i+N]))
        noise = np.random.normal(0,0.1)
        Y = np.vstack((Y, ind0[i+N-1:i+N]+noise))

Das Ergebnis.

---------------------------------
Run id: MAlearn
Log directory: /tmp/tflearn_logs/
---------------------------------
Training samples: 22
Validation samples: 0
--
Training Step: 10000  | total loss: 3.79990
| SGD | epoch: 10000 | loss: 3.79990 -- iter: 22/22
--

weights
W[0] = [ 0.32918188]
W[1] = [ 0.67114329]

Die Ergebnisse ändern sich jedes Mal geringfügig, aber Sie können sehen, dass Sie im Allgemeinen lernen. Der Vorteil des neuronalen Netzwerks besteht darin, dass es selbst bei Rauschen irgendwie vorhersagen kann.

Zusammenfassung

Es ist möglich, 3 oder mehr Daten zu verarbeiten, indem das "N" im Code geändert wird, aber tatsächlich konnte der Gewichtskoeffizient nicht mit sehr guter Genauigkeit erhalten werden, wenn 3 oder mehr Eingaben vorhanden waren. Das Ergebnis wird weggelassen.

Es scheint also noch ein langer Weg zu sein, um einen technischen Index zu erlernen. Vorerst war es ein Artikel über die Vorbereitung.

Der Vorteil von TFlearn besteht darin, dass Sie schnell überprüfen können, ob Ihre Idee gut ist oder nicht.

Recommended Posts

Vorbereitung auf das Erlernen technischer Indikatoren mit TFlearn
Öffnen Sie AI Gym, um mit PD-gesteuertem Cart Pole zu lernen
Ich habe versucht, mit TF Learn die logische Operation zu lernen
Lernen Sie mit Caffe, handschriftliche Zahlen (MNIST) zu erkennen
AWS-Schrittfunktionen zum Lernen anhand eines Beispiels
Wie man Kaldi mit JUST Corpus trainiert
Ich habe versucht, die Sündenfunktion mit Chainer zu trainieren
Ich habe versucht, DCGAN mit PyTorch zu implementieren und zu lernen
Vorbereiten der Verwendung von Tensorflow (Anaconda) mit Visual Studio Code
Site-Zusammenfassung zum Erlernen des maschinellen Lernens mit englischen Videos
Wie man strukturiertes SVM von ChainCRF mit PyStruct lernt
[How to!] Lerne und spiele Super Mario mit Tensorflow !!
MVC-Model Edition, um nur mit Voreingenommenheit von 0 zu lernen
Lerne Python mit ChemTHEATER
Konvertieren Sie 202003 bis 2020-03 mit Pandas
Lerne Zundokokiyoshi mit LSTM
Pandas lernen mit Chemoinfomatik
Scikit-Lernen mit Chemoinfomatik
Lernen Sie mit Chemo Informatics Matplotlib
Lernen Sie mit Chemo Informatics NumPy
DCGAN mit TF Learn
Lernen Sie Pendulum-v0 mit DDPG
Verfahren zum Erlernen und Ableiten eines Transformator-Englisch-Japanisch-Übersetzungsmodells mit CloudTPU
Maschinelles Lernen mit Nogisaka 46 und Keyakizaka 46 Teil 1 Einführung