Diskussion zum Artikel "Verwendung von Indikatoren in MetaTrader 5 mit dem Machine Learning Framework ENCOG für die Prognostizierung von Zeitreihen" - Seite 5
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Hallo Leute,
Ich versuche, diesen Artikel auf encog v.3.2 zu portieren, aber ich habe ein Problem mit Step3-Timeboxen. Ist jemand in der Lage , Schritt 3 zu tun ?
Verwenden Sie Mine @Valentin petkov. Ich benutze encog 3.3 . ich hoffe, kann Ihnen helfen ..
using System;
using Encog.Util.CSV;
using Encog.App.Quant.Indicators;
using Encog.App.Quant.Indicators.Predictive;
using Encog.Util.Simple;
using Encog.Neural.Networks;
using Encog.Neural.Networks.Layers;
using Encog.Engine.Network.Activation;
using Encog.Persist;
using Encog.App.Analyst;
using System.IO;
using Encog.App.Analyst.CSV.Normalize;
using Encog.App.Analyst.Wizard;
using Encog.Util.Arrayutil;
using Encog.Util.ArrayUtil;
using Encog.ML.Data;
Namespace Encog
{
public class Programm
{
/// <summary>
/// Das Verzeichnis, in dem alle Dateien gespeichert werden sollen.
/// </summary>
public const String DIRECTORY = "Ihr Dateiverzeichnis";
/// <summary>
/// Die Eingabedatei, die den gesamten Prozess startet. Diese Datei sollte von NinjaTrader mit dem EncogStreamWriter-Objekt heruntergeladen werden.
/// </summary>
public const String STEP1_FILENAME = DIRECTORY + "mt4export.csv";
/// <summary>
/// Wir wenden einen prädiktiven Future-Indikator an und generieren eine zweite Datei, in der das zusätzliche prädiktive Feld hinzugefügt wird.
/// </summary>
public const String STEP2_FILENAME = DIRECTORY + "step2_future.csv";
/// <summary>
/// Anschließend wird die gesamte Datei normalisiert und in dieser Datei gespeichert.
/// </summary>
public const String STEP3_FILENAME = VERZEICHNIS + "step3_norm.csv";
/// <summary>
/// Die Datei wird mit einer Timebox versehen, um Trainingsdaten zu erstellen.
/// </summary>
public const String STEP4_FILENAME = VERZEICHNIS + "step4_train.csv";
/// <summary>
/// Schließlich wird das trainierte neuronale Netz in diese Datei geschrieben.
/// </summary>
public const String STEP5_FILENAME = VERZEICHNIS + "step5_network.eg";
/// <summary>
/// Die Größe des Eingabefensters, d.h. die Anzahl der Takte, die zur Vorhersage des nächsten Taktes verwendet werden.
/// </summary>
public const int INPUT_WINDOW = 6;
/// <summary>
/// Die Anzahl der Takte, die wir vorhersagen wollen. Dies ist normalerweise nur 1 Takt. Der in Schritt 1 verwendete Zukunftsindikator kann
/// auch mehr in die Zukunft schauen.
/// </summary>
public const int PREDICT_WINDOW = 1;
/// <summary>
/// Die Anzahl der Balken, die für das beste Ergebnis in die Zukunft geschaut werden.
/// </summary>
public const int RESULT_WINDOW = 5;
/// <summary>
/// Die Anzahl der Neuronen in der ersten versteckten Schicht.
/// </summary>
public const int HIDDEN1_NEURONS = 12;
/// <summary>
/// Der Zielfehler, auf den trainiert werden soll.
/// </summary>
public const double TARGET_ERROR = 0.01;
static void Main(string[] args)
{
// Schritt 1: Future-Indikatoren erstellen
Console.WriteLine("Schritt 1: NinjaTrader Export analysieren & Zukunftsindikatoren erstellen");
ProcessIndicators ind = new ProcessIndicators();
ind.Analyze(new FileInfo(STEP1_FILENAME), true, CSVFormat.English); //.Analyze(STEP1_FILENAME, true, AnalystFileFormat.DecpntComma);
int externalIndicatorCount = ind.Columns.Count - 3;
ind.AddColumn(new BestReturn(RESULT_WINDOW, true)); // najlepszy zwrot w nastepnym RESULT_WINDOW
ind.Process(new FileInfo(STEP2_FILENAME));// Process(STEP2_FILENAME);
Console.WriteLine("Externe Indikatoren gefunden: " + externalIndicatorCount);
Console.ReadKey();
// Schritt 2: Normalisieren
Console.WriteLine("Schritt 2: Zukunftsindikatoren erstellen");
var analyst = new EncogAnalyst();
var wizard = new AnalystWizard(analyst);
wizard.Wizard(new FileInfo(STEP2_FILENAME), true, AnalystFileFormat.DecpntComma);
analyst.Script.Normalize.NormalizedFields[0].Action=NormalizationAction.PassThrough;
analyst.Script.Normalize.NormalizedFields[1].Action = NormalizationAction.PassThrough;
analyst.Script.Normalize.NormalizedFields[2].Action = NormalizationAction.Normalize;
analyst.Script.Normalize.NormalizedFields[3].Action = NormalizationAction.Normalize;
analyst.Script.Normalize.NormalizedFields[4].Action = NormalizationAction.Normalize;
analyst.Script.Normalize.NormalizedFields[5].Action = NormalizationAction.Normalize;
analyst.Script.Normalize.NormalizedFields[6].Action = NormalizationAction.Normalize;
var norm = new AnalystNormalizeCSV();
norm.Analyze(new FileInfo(STEP2_FILENAME), true, CSVFormat.English, analyst);
norm.ProduceOutputHeaders = true;
norm.Normalize(new FileInfo(STEP3_FILENAME));
// Neuronenanzahl
int inputNeurons = INPUT_WINDOW * externalIndicatorCount;
int outputNeurons = PREDICT_WINDOW;
Console.WriteLine("inputNeuronen : {0}",inputNeuronen);
Console.WriteLine("ausgabeNeuronen : {0}", ausgabeNeuronen);
Console.ReadKey();
// Schritt 3: Time-box (optional)
Console.WriteLine("Schritt 3: Timebox");
var twcsv = new TemporalWindowCSV();
twcsv.Analyze(new FileInfo(STEP3_FILENAME), true, CSVFormat.English);
twcsv.InputWindow = INPUT_WINDOW;
twcsv.VorhersageFenster = PREDICT_WINDOW;
int index = 0;
twcsv.Fields[index++].Action = TemporalType.Ignore;
twcsv.Felder[index++].Aktion = TemporalType.Ignorieren;
twcsv.Felder[index++].Aktion = TemporalType.Ignorieren;
for (int i = 0; i < externalIndicatorCount; i++)
twcsv.Fields[index++].Action = TemporalType.Input; // externe Indikatoren
twcsv.Fields[index++].Action = TemporalType.Predict; // PredictBestReturn
twcsv.Process(STEP4_FILENAME);
Console.ReadKey();
// Schritt 4: Neuronales Netzwerk trainieren
Console.WriteLine("Schritt 4: Trainieren");
Console.ReadKey();
IMLDataSet training = EncogUtility.LoadCSV2Memory(STEP4_FILENAME, inputNeurons, outputNeurons, true, CSVFormat.English,false);
BasicNetwork network = new BasicNetwork();
network.AddLayer(new BasicLayer(new ActivationTANH(), true, inputNeurons));
network.AddLayer(new BasicLayer(new ActivationTANH(), true, HIDDEN1_NEURONS));
network.AddLayer(new BasicLayer(new ActivationLinear(), true, outputNeurons));
network.Structure.FinalizeStructure();
network.Reset();
//EncogUtility.TrainToError(network, training, TARGET_ERROR);
EncogUtility.TrainConsole(network, training,1);
Console.ReadKey();
// Schritt 5: Neuronales Netzwerk und Statistiken speichern
Console.WriteLine("Schritt 5: Neuronales Netzwerk und normalisierte Felder speichern");
Console.WriteLine("oder hier?");
EncogDirectoryPersistence.SaveObject(new FileInfo(STEP5_FILENAME), network);
Console.WriteLine("Fehler hier?");
//EncogDirectoryPersistence.SaveObject(new FileInfo(STEP5_FILENAME), analyst);
Console.ReadKey();
}
}
}
Ich verstehe nicht, warum MQL nicht ein eigenes neuronales Netzwerk für Metatrader erstellt, wodurch eine Menge Arbeit für Normalsterbliche vermieden wird.
Hallo,
Vielen Dank für den Artikel, denn er ist sehr hilfreich, um zu wissen, wie man Programme entwickelt. Allerdings bin ich ein Neuling und ich würde gerne wissen, wie ich alle Schritte ausführen kann. Ich konnte die Daten mit Hilfe des Skripts herunterladen, aber dann weiß ich nicht, wie ich die Normalisierung und Timeboxing in Metatrader durchführen kann. Gibt es eine Schritt-für-Schritt-Anleitung für die Ausführung der Codes? Vielen Dank im Voraus und Entschuldigung für eine so grundlegende Frage.
Mit freundlichen Grüßen
Hallo!
ich stecke fest bei
7. Neuronales Netzwerk Training
Ich habe .Net Core, Visual Basic Code für Mac und Encog 3.3 heruntergeladen.
Was sollte ich als nächstes mit Encog machen?
Vielen Dank im Voraus.
Es gibt auch defekte Links in dem Artikel.
Wird es ein Update geben?
z.B..
Fehlerberechnung und Trainingsalgorithmen
Die vollständige ENCOG-Dokumentation ist online verfügbar.
HI ,nvesteo
Ich habe den Beispielcode heruntergeladen, mit MT5 Laden neuralencogindicator Anzeige Ausnahme, um Hilfe bitten.
Hallo Leute,
Wirklich ausgezeichneter Artikel, aber ich habe nicht das gleiche Ergebnis zu reproduzieren.
Wenn der Indikator aufgerufen wird, ist es nicht normalisiert, um 1 und -1 wie Beispiel des Artikels und Grundstück nur eine gerade Linie.
Jemand hatte dieses Problem und lösen es?
Versuchen Sie, in Systemsteuerung->Region und Sprache->Zusätzliche Einstellungen das Dezimalzeichen in "." statt "," zu ändern...
Das war mein Problem. Ändern Sie dies und lösen Sie das Problem.
DANKE!!