Discussione sull’articolo "Utilizzo degli indicatori MetaTrader 5 con il framework di apprendimento automatico ENCOG per la previsione delle serie temporali" - pagina 5

 
Valentin Petkov:

Ciao ragazzi,

Ho cercato di portare questo articolo a encog v.3.2 ma ho un problema con le timebox del passo 3. Qualcunoè in grado di fare il passo 3?


Usa il mio @Valentin petkov. Io sto usando encog 3.3. Spero di poterti aiutare.

usando System;

usando Encog.Util.CSV;

usando Encog.App.Quant.Indicators;

using Encog.App.Quant.Indicators.Predictive;

using Encog.Util.Simple;

using Encog.Neural.Networks;

utilizzando 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;


spazio dei nomi Encog

{

public class Programma

{

/// <summary>

/// La directory in cui saranno memorizzati tutti i file.

/// </summary>

public const String DIRECTORY = "la vostra directory di file";


/// <summary>

/// Il file di input che avvia l'intero processo. Questo file deve essere scaricato da NinjaTrader utilizzando l'oggetto EncogStreamWriter.

/// </summary>

public const String STEP1_FILENAME = DIRECTORY + "mt4export.csv";


/// <summary>

/// Applichiamo un indicatore di future predittivo e generiamo un secondo file, con l'aggiunta di un campo predittivo.

/// </summary>

public const String STEP2_FILENAME = DIRECTORY + "step2_future.csv";


/// <summary>

/// Successivamente l'intero file viene normalizzato e memorizzato in questo file.

/// </summary>

public const String STEP3_FILENAME = DIRECTORY + "step3_norm.csv";


/// <summary>

/// Il file viene sottoposto a time-boxing per creare i dati di addestramento.

/// </summary>

public const String STEP4_FILENAME = DIRECTORY + "step4_train.csv";


/// <summary>

/// Infine, la rete neurale addestrata viene scritta in questo file.

/// </summary>

public const String STEP5_FILENAME = DIRECTORY + "step5_network.eg";


/// <summary>

/// La dimensione della finestra di input. Si tratta del numero di barre utilizzate per prevedere la barra successiva.

/// </summary>

public const int INPUT_WINDOW = 6;


/// <summary>

/// Il numero di barre in avanti che stiamo cercando di prevedere. Di solito si tratta di 1 sola barra. L'indicatore di futuro utilizzato nel passaggio 1 può

/// guardare più avanti nel futuro.

/// </summary>

public const int PREDICT_WINDOW = 1;


/// <summary>

/// Il numero di barre in avanti da considerare per ottenere il risultato migliore.

/// </summary>

public const int RESULT_WINDOW = 5;


/// <summary>

/// Il numero di neuroni nel primo strato nascosto.

/// </summary>

public const int HIDDEN1_NEURONS = 12;


/// <summary>

/// L'errore target su cui allenarsi.

/// </summary>

public const double TARGET_ERROR = 0,01;


static void Main(string[] args)

{

// Fase 1: creazione di indicatori future

Console.WriteLine("Fase 1: analizzare l'esportazione di NinjaTrader e creare indicatori future");

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("Indicatori esterni trovati: " + externalIndicatorCount);

Console.ReadKey();

// Passo 2: normalizzazione

Console.WriteLine("Passo 2: Creare indicatori futuri");

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));

// Conteggio dei neuroni

int inputNeurons = INPUT_WINDOW * externalIndicatorCount;

int neuroni in uscita = PREDICT_WINDOW;

Console.WriteLine("inputneurons : {0}",inputNeurons);

Console.WriteLine("neuroni in uscita: {0}", neuroni in uscita);

Console.ReadKey();

// Passo 3: Time-box (opzionale)

Console.WriteLine("Passo 3: Timebox");

var twcsv = new TemporalWindowCSV();

twcsv.Analyze(new FileInfo(STEP3_FILENAME), true, CSVFormat.English);

twcsv.InputWindow = INPUT_WINDOW;

twcsv.PredictWindow = PREDICT_WINDOW;

int index = 0;

twcsv.Fields[index++].Action = TemporalType.Ignore;

twcsv.Fields[index++].Action = TemporalType.Ignore;

twcsv.Fields[index++].Action = TemporalType.Ignore;

per (int i = 0; i < externalIndicatorCount; i++)

twcsv.Fields[index++].Action = TemporalType.Input; // indicatori esterni

twcsv.Fields[index++].Action = TemporalType.Predict; // PredictBestReturn


twcsv.Process(STEP4_FILENAME);

Console.ReadKey();

// Passo 4: addestrare la rete neurale

Console.WriteLine("Passo 4: addestramento");

Console.ReadKey();

IMLDataSet training = EncogUtility.LoadCSV2Memory(STEP4_FILENAME, inputNeurons, outputNeurons, true, CSVFormat.English,false);

Rete BasicNetwork = nuova Rete 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(rete, addestramento,1);

Console.ReadKey();

// Passo 5: salvare la rete neurale e le statistiche

Console.WriteLine("Passo 5: salvare la rete neurale e i campi normalizzati");

Console.WriteLine("o qui?");

EncogDirectoryPersistence.SaveObject(new FileInfo(STEP5_FILENAME), network);

Console.WriteLine("errore qui?");

//EncogDirectoryPersistence.SaveObject(new FileInfo(STEP5_FILENAME), analyst);

Console.ReadKey();

}

}

}

 
Qualcuno ha avuto successo con il porting a Encog 3.3? Sembra che non ci sia alcun interesse a rendere MQL compatibile con ENCOG 3.3 o versioni successive. Non capisco perché MQL non crei una propria rete neurale per metatrader, evitando un sacco di lavoro ai comuni mortali.
 
tiagobr:
Non capisco perché MQL non crei una propria rete neurale per metatrader, evitando un sacco di lavoro ai comuni mortali.
Se cercate mql5.com per le reti neurali otterrete molti articoli e codici - tutto il materiale è disponibile su base "plug and play". Non sono adatti alle vostre esigenze?
 

Ciao,

Grazie per l'articolo perché è molto utile per iniziare a sapere come sviluppare programmi. Tuttavia sono un principiante e vorrei sapere come posso eseguire tutti i passaggi. Ho potuto scaricare i dati utilizzando lo script ma poi non so come eseguire la normalizzazione e il timeboxing in Metatrader. Esiste una guida passo passo per l'esecuzione dei codici? Grazie in anticipo e scusate per la domanda così elementare.

Cordiali saluti

 

Salve,

Sono bloccato a

7. Formazione sulla rete neurale

Ho scaricato .Net Core, Visual Basic Code per Mac, Encog 3.3.

Cosa devo fare ora con Encog?

Grazie in anticipo.

L'articolo contiene anche dei link non funzionanti.

Ci sarà qualche aggiornamento?

cioè

calcolo dell'errore e algoritmi di formazione

La documentazione completa di ENCOG è disponibile online.

 

Ciao , nvesteo

Ho scaricato il codice di esempio, con MT5 caricamento eccezione visualizzazione neuralencogindicator, chiedere aiuto.


 

Ciao ragazzi,

Articolo davvero eccellente, ma non ho riprodotto lo stesso risultato.

Quando si chiama l'indicatore non è normalizzato a 1 e -1 come nell'esempio dell'articolo e traccia solo una linea retta.

Qualcuno ha avuto questo problema e lo ha risolto?

 
Automated-Trading:

Provare a cambiare il simbolo decimale in "." invece di "," in Pannello di controllo->Regione e lingua->Impostazioni aggiuntive...


Questo era il mio problema. Cambiate questo e risolvete il problema.

GRAZIE!!!

 
L'indicatore non disegna nulla. Ho copiato i file dll in diverse posizioni, ma ancora nessun risultato. Qualche idea?
 
Può funzionare con MT4?