MetaTrader 5 Python User Group - wie man Python in Metatrader verwendet - Seite 83

 

Richtig - falsch vorbereitet....

Wo kann ich das nachlesen? Ich bereite die Daten für die NS nach meinen Vorstellungen auf, was wichtig ist und was nicht.

Eine Sache, die mir Rätsel aufgibt, ist die Frage, ob dieselbe Art von Daten "auf einem Haufen" gesammelt oder nach und nach ergänzt werden sollte?

Von welcher Seite sollen die Daten erhoben werden: von den "älteren" oder von den "neueren"?

 
Сергей Таболин:

Richtig - falsch vorbereitet....

Wo kann ich das nachlesen? Ich bereite die Daten für die NS nach meinen Vorstellungen auf, was wichtig ist und was nicht.

Eine Sache, die mir Rätsel aufgibt, ist die Frage, ob dieselbe Art von Daten "auf einem Haufen" gesammelt oder nach und nach ergänzt werden sollte?

Von welcher Seite sollen die Daten erhoben werden: von den "Älteren" oder von den "Neueren"?

Fragen Sie im MoD-Thread, jemand wird Ihnen antworten. Dies ist das Thema des Anschlusses

 
Сергей Таболин:

Das Problem ist, dass die Normalisierung ein hoffnungsloser Fall ist!

Lassen Sie mich das erklären. Es gibt einige Daten A, B, C...

Sie unterscheiden sich in Bezug auf ihre Bedeutung und so weiter. Jeder (Google) sagt, dass die Normalisierung nach Spalten (A-A-A, B-B-B, C-C-C) und nicht nach Zeilen erfolgen sollte. Das ist logisch nachvollziehbar.

Aber wenn neue Daten für die "Vorhersage" erscheinen, WIE kann man sie normalisieren, wenn es nur EINE Zeile ist? Und jeder Begriff in dieser Reihe kann über die Normalisierung der Trainings- und Testdaten hinausgehen?

Und die Normalisierung nach Zeichenketten hat keine Auswirkungen!

Nachdem ich diese Nuancen überprüft hatte, hatte ich diesen "Schrei der Seele" ))))

Bei der Normalisierung werden die Koeffizienten gespeichert. Um zu vermeiden, dass die Werte außerhalb des zulässigen Bereichs liegen, sollten wir einen großen Teil der Geschichte nehmen und normalisieren und diese Koeffizienten dann auf neue Daten anwenden

auf nicht normalisierte Daten, lernt das Gitter nicht oder nur schlecht. Das liegt in ihrer Natur.
 
Maxim Dmitrievsky:

die Koeffizienten werden bei der Normalisierung beibehalten. Um eine Bereichsüberschreitung zu vermeiden, müssen wir einen großen Teil der Geschichte nehmen und normalisieren und diese Koeffizienten dann auf neue Daten anwenden

Es lernt nicht von nicht normalisierten Daten, oder es lernt schlecht. Das ist ihre Besonderheit.

All dies ist logisch und verständlich, aber das Netz wird trainiert! Außerdem gibt es Informationen, dass die Verwendung nicht-normalisierter Daten für das Lernen komplizierter ist, aber das ist nicht entscheidend.

Und wie kann man nicht aus dem Sortiment verschwinden? Zum Beispiel gibt es einen Preis. Es gibt eine Preisspanne für die Trainings- und Testdaten - zum Beispiel 123-324. Aber der Preis steigt auf 421. Wie fällt sie in diesen Bereich?

Aber wir kommen vom Kern der Sache ab - warum ist die Vorhersage bei normalem Training und Test überhaupt etwas?

 

Liebe Freunde, wieder einmal bewegen sich meine Skier nicht... Ich bitte um Hilfe.

Ich beschloss, ein kleines Testgerät zu entwerfen, um die Vorhersage des trainierten Netzes zu testen.

# Загрузка данных
df_full = pd.read_csv(flname_csv, header=None)
r, c = df_full.shape
border = c - row_signal
test_data = np.array(df_full.values[:, :border])
test_verification = np.array(df_full.values[:, border:])
print(test_data[2], 'len =', len(test_data[2]))
print(test_verification[2], 'len =', len(test_verification[2]))

Hier ist alles in Ordnung.

[3.00000 e+00 7.00000 e+00 1.14656 e+00 1.14758 e+00 1.14656 e+00 1.14758 e+00
 3.00000 e+00 7.00000 e+00 1.27800 e+03 1.27800 e+03 3.00000 e+00 7.00000 e+00
 1.14758 e+00 1.14857 e+00 1.14758 e+00 1.14857 e+00 3.00000 e+00 8.00000 e+00
 2.93000 e+02 6.20000 e+02 3.00000 e+00 8.00000 e+00 1.14857 e+00 1.14960 e+00
 1.14821 e+00 1.14960 e+00 3.00000 e+00 8.00000 e+00 4.78000 e+02 7.23000 e+02
 3.00000 e+00 8.00000 e+00 1.14960 e+00 1.14966 e+00 1.14860 e+00 1.14860 e+00
 3.00000 e+00 8.00000 e+00 2.32100 e+03 2.41100 e+03] len = 40
[1. 0.] len = 2

Und das nächste, was du weißt...

if num_check_rows > r or num_check_rows == 0:
    num_check_rows = r

model = tf.keras.models.Sequential()
model = tf.keras.models.load_model(flname)
model.summary()

for i in range(num_check_rows):
    b = model.predict(test_data[i])
    a = b[0]
    x = a[0]
    y = a[1]
    x = format(x, '.5f')
    y = format(y, '.5f')
    print(f'ожидалось {test_verification[i]} >>> получили [{x} {y}]')

schwören

Model: "sequential_16"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense (Dense)                (None, 20)                820       
_________________________________________________________________
dropout (Dropout)            (None, 20)                0         
_________________________________________________________________
dense_1 (Dense)              (None, 10)                210       
_________________________________________________________________
dense_2 (Dense)              (None, 2)                 22        
=================================================================
Total params: 1,052
Trainable params: 1,052
Non-trainable params: 0
_________________________________________________________________

Traceback (most recent call last):
  File "M:/PythonProgs/PycharmProjects/NNets/ТестерНС.py", line 79, in <module>
    b = model.predict(test_data[i])
.....
ValueError: Error when checking input: expected dense_input to have shape (40,) but got array with shape (1,)

Was ist los?

 

Nachdem ich das Internet durchsucht und mir den Artikel angesehen habe, auf dessen Grundlage ich meinen Code geschrieben habe, kam ich zu dem enttäuschenden Schluss, dass jeder Autor eines Artikels "für Anfänger" zwangsläufig vergisst, etwas Wichtiges zu erwähnen...

Und hier stellte sich heraus, dassStandardScaler beim Training des Netzwerks verwendet wird.Aber der Artikel sagt kein Wort darüber, was es ist und warum es gebraucht wird.

Außerdemist StandardScaler eine Standardisierung. Außerdem möchte ich wissen, wie ich dieselbe Standardisierung für einen einzigen Eingangsvektor und sogar weniger implementieren kann.

Schlimmer noch, die "Standardisierung" erfolgt durch Spalten aus dem Datensatz! Nein, nur für die Statistik ist das in Ordnung. Aber für Prognosen heißt es "***hole"! Muss ich, wenn neue Daten eintreffen, das Netz neu trainieren, nur um die neuen Daten in den "Normierungsbereich" zu bekommen?

Blödsinn!

Bis dieses "neue Netz" ausgebildet ist, kann sich die Situation bereits drastisch verändert haben. Also, was zum Teufel soll das Ganze?

So viel zu Python mit einer Reihe von "geschärften" Bibliotheken....

Ich wäre Ihnen sehr dankbar, wenn Sie mich umstimmen könnten.


P.S. Ich möchte einfach glauben, dass ich meine Zeit mit Python nicht umsonst verschwendet habe.
 
Сергей Таболин:

Nachdem ich das Internet durchsucht und mir den Artikel angesehen habe, auf dessen Grundlage ich meinen Code geschrieben habe, kam ich zu dem enttäuschenden Schluss, dass jeder Autor eines Artikels "für Anfänger" zwangsläufig vergisst, etwas Wichtiges zu erwähnen...

Und hier stellte sich heraus, dassStandardScaler beim Training des Netzwerks verwendet wird.Aber der Artikel sagt kein Wort darüber, was es ist und warum es gebraucht wird.

Außerdemist StandardScaler eine Standardisierung. Außerdem möchte ich wissen, wie ich dieselbe Standardisierung für einen einzigen Eingangsvektor und sogar weniger implementieren kann.

Schlimmer noch, die "Standardisierung" erfolgt durch Spalten aus dem Datensatz! Nein, nur für die Statistik ist das in Ordnung. Aber für Prognosen heißt es "***hole"! Muss ich, wenn neue Daten eintreffen, das Netz neu trainieren, nur um die neuen Daten in den "Normierungsbereich" zu bekommen?

Blödsinn!

Bis dieses "neue Netz" ausgebildet ist, kann sich die Situation bereits drastisch verändert haben. Also, was zum Teufel soll das Ganze?

So viel zu Python mit einer Reihe von "geschärften" Bibliotheken....

Ich wäre Ihnen sehr dankbar, wenn Sie meine Meinung ändern würden.


P.S. Ich möchte einfach glauben, dass ich meine Zeit mit Python nicht umsonst verschwendet habe.
Vielleicht, weil es erst der Anfang ist.
Aber in letzter Zeit habe ich mich für die Möglichkeiten von Python für mt. Und auf die Frage, ob dies möglich ist, hat niemand geantwortet. Hinzu kommt, dass es in mql4 nicht funktionieren wird. Ich beschloss, meine Zeit nicht zu verschwenden (vielleicht wird sich die Situation nach einiger Zeit zum Besseren wenden).
 

(Ich kann es kaum erkennen. )))

Aber jetzt habe ich eine andere Frage (mit der ich alles angefangen habe):

Beim Training des Netzes erhielt ich folgende Ergebnisse

Score on train data     Score on test data      Test loss       Test acc
0.970960                0.968266                0.199544        0.981424

Mit anderen Worten: Das Ergebnis ist ein Schnäppchen!

Ich habe mein Testgerät gestartet. Ich habe solche Ergebnisse

Model: "sequential_16"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense (Dense)                (None, 15)                465       
_________________________________________________________________
dropout (Dropout)            (None, 15)                0         
_________________________________________________________________
dense_1 (Dense)              (None, 7)                 112       
_________________________________________________________________
dense_2 (Dense)              (None, 2)                 16        
=================================================================
Total params: 593
Trainable params: 593
Non-trainable params: 0
_________________________________________________________________
2021-01-18 17:59:04.495645: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cublas64_10.dll
ожидалось [0. 1.] >>> получили [0.08348 0.08859]
ожидалось [0. 1.] >>> получили [0.08324 0.08838]
ожидалось [0. 0.] >>> получили [0.08667 0.09141]
ожидалось [0. 0.] >>> получили [0.08263 0.08784]
ожидалось [0. 0.] >>> получили [0.09200 0.09218]
ожидалось [0. 0.] >>> получили [0.08351 0.08861]
ожидалось [0. 0.] >>> получили [0.08944 0.09384]
ожидалось [1. 0.] >>> получили [0.08313 0.08828]
ожидалось [1. 0.] >>> получили [0.08432 0.08933]

Process finished with exit code 0

Nun, sagen Sie mir genau, wo Sie sehen können, dass das Netzwerk auf 98% richtige Ergebnisse trainiert ist????

 

Hallo, ich habe ein paar Seiten der Diskussion gelesen und nichts Konkretes zu folgender Frage gefunden:


- Gibt es etwas derzeit arbeiten wie MetaTraderR oder MetaTrader5 Pakete für MT und R-Integration?


Prost

 

Tut mir leid, ich werde mein Epos fortsetzen... )))

Nachdem ich bei Google ein wenig mehr Wissen gesammelt hatte, kam ich zu dem Schluss:

  1. Die Daten sollten "ausgewogen" sein. Wenn beispielsweise von 1000 Eingabedaten nur auf 100 Signale erscheinen, müssen mindestens 1000 - ((1000 - 100) /3) = 700 "leere" Daten (die keine Signale bilden) entfernt werden.
  2. Der Rest sollte vorzugsweise "normalisiert" werden. Bringen Sie ihn in den Bereich 0-1. Aber hier liegt eine offensichtliche Schwierigkeit bei der Wahl des "Bereichs" der Normalisierung. Was ist als Minimum und was als Maximum zu betrachten? Ich weiß es noch nicht. Ich normalisiere jedes Eingabefeld nur nach seinem Bereich...

Durch die Erfüllung dieser beiden Bedingungen konnte ich die Lernkurve des Netzes deutlich senken. Darüber hinaus habe ich festgestellt, dass

  1. Einige zuvor verworfene Verlustfunktionen schneiden besser ab.
  2. Ergebnisse mit weniger versteckten Schichten wurden dominant.
  3. Es bleibt die Anzahl der Trainingsepochen zu überprüfen.

Und dann war da noch eine andere Frage: Wie sollte das Netz reagieren?

  1. Ein Neuron (0-1-2) (kein Signal-Kauf-Verkauf)
  2. Zwei Neuronen [0-0],[1-0],[0-1]
  3. Drei Neuronen [0-0-1],[1-0-0],[0-1-0]
???