文章 "使用带 ENCOG 机器学习框架的 MetaTrader 5 指标进行时间序列预测" - 页 5

 
Valentin Petkov:

你们好、

我想把这篇文章移植到 encog v.3.2 版,但在第 3 步时间框方面遇到了问题。 有人 完成 第 3 步吗?


我使用的 encog 3.3,希望能帮到你们。

使用 System;

使用 Encog.Util.CSV;

使用 Encog.App.Quant.Indicators;

使用 Encog.App.Quant.Indicators.Predictive;

使用Encog.Util.Simple.CSV

使用Encog.App.Quanticators.CSV

使用 Encog.Engine.Networks.Layers;

使用 Encog.Engine.Network.Activation;

使用 Encog.Persist;

使用 Encog.App.Analyst;

使用系统.IO.NET

使用 Encog.App.Analyst.CSV.Normalize;

使用 Encog.App.Analyst.Wizard;

使用 Encog.Util.Arrayutil;

使用 Encog.Util.ArrayUtil;

使用 Encog.App.Analyst.CSV.Normalize


命名空间 Encog

{

公共类 程序

{

/// <summary

/// 存储所有文件的目录。

/// </summary

public constring DIRECTORY = "your directory files";


/// <summary

/// 启动整个过程的输入文件。 该文件应使用 EncogStreamWriter 对象从 NinjaTrader 下载。

/// </summary>

public constring STEP1_FILENAME = DIRECTORY + "mt4export.csv";


/// <summary

/// 我们应用预测未来指标并生成第二个文件,其中添加了额外的预测字段。

/// </summary

public constring STEP2_FILENAME = DIRECTORY + "step2_future.csv";


/// <summary

/// 接下来,整个文件被规范化并存储到此文件中。

/// </summary

public constring STEP3_FILENAME = DIRECTORY + "step3_norm.csv";


/// <summary

/// 对文件进行时间框处理,以创建训练数据。

/// </summary>

public constring STEP4_FILENAME = DIRECTORY + "step4_train.csv";


/// <summary

/// 最后,将训练好的神经网络写入该文件。

/// </summary>

public constring STEP5_FILENAME = DIRECTORY + "step5_network.eg";


/// <summary

/// 输入窗口的大小,用于预测下一个条形图的条数。

/// </summary

public const int INPUT_WINDOW = 6;


/// <summary

/// 我们试图预测的前方条数。 这通常只有 1 条。 在步骤 1 中使用的未来指标可以

/// 以及展望更远的未来。

/// </summary>

public const int PREDICT_WINDOW = 1;


/// <summary

/// 为获得最佳结果而向前查看的条数。

/// </summary

public const int RESULT_WINDOW = 5;


/// <summary

/// 第一隐藏层的神经元数目。

/// </summary

public const int HIDDEN1_NEURONS = 12;


/// <summary

/// 要训练的目标误差。

/// </summary>训练的目标误差。

public const double TARGET_ERROR = 0.01;


static void Main(string[] args)

{

// 第 1 步:创建未来指标

Console.WriteLine("Step 1: Analyze NinjaTrader Export & Create Future Indicators");

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("External indicators found: " + externalIndicatorCount);

Console.ReadKey();

// 第 2 步:标准化

Console.WriteLine("Step 2: Create Future Indicators");

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

// 神经元计数

int inputNeurons = INPUT_WINDOW * externalIndicatorCount;

INPUT_WINDOW * externalIndicatorCount; int outputNeurons = PREDICT_WINDOW;

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

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

Console.ReadKey();

// 第三步:时间框(可选)

Console.WriteLine("Step 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;

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

twcsv.Fields[index++].Action = TemporalType.Input; // 外部指标

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


twcsv.Process(STEP4_FILENAME);

Console.ReadKey();

// 第四步:训练神经网络

Console.WriteLine("Step 4: Train");

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

// 第 5 步:保存神经网络和统计数据

Console.WriteLine("Step 5: Save Neural network and normalized fields");

Console.WriteLine("or here ?");

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

Console.WriteLine("error here ?");

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

Console.ReadKey();

}

}

}

 
有没有人成功地将 MQL 移植到 ENCOG 3.3?似乎没有人想让 MQL 与 ENCOG 3.3 或更高版本兼容。我不明白为什么 MQL 不为 metatrader 创建自己的神经网络,从而避免了普通人的大量工作。
 
tiagobr:
我不明白为什么 MQL 不为 metatrader 创建一个自己的神经网络,以避免普通人的大量工作。
如果您在 mql5.com 上搜索神经网络,您会得到很多文章和代码 - 所有的东西都可以 "即插即用"。它们不符合您的需求吗?
 

你好、

感谢你的文章,因为它对开始了解如何开发程序很有帮助。不过,我是个新手,我想知道如何运行所有步骤。我可以使用脚本下载数据,但我不知道如何在 Metatrader 中执行归一化和时间框。有没有运行代码的步骤信息?非常感谢,很抱歉提出这么基本的问题。

致以最崇高的敬意

 

你好、

我卡在

7.神经网络训练

我下载了 .Net Core、Visual Basic Code for Mac 和 Encog 3.3。

下一步我应该如何使用 Encog?

谢谢。

文章中还有一些断开的链接。

会有更新吗?

误差计算训练算法

完整的 ENCOG 文档可 在线获取

 

HI,nvesteo

I downloaded the sample code, with MT5 loading neuralencogindicator display exception, ask for help.


 

你们好、

这篇文章写得非常好,但我没有重现同样的结果。

当调用指标时,它并没有像文章中的例子那样归一化为 1 和 -1 ,而只是绘制了一条直线。

有人遇到过这个问题并解决了吗?

附加的文件:
 
Automated-Trading:

尝试在控制面板->区域和语言->附加设置中将小数符号更改为". "而不是","...


这就是我的问题所在。更改后问题就解决了。

谢谢

 
指示器没有绘图。将 dll 文件复制到不同位置,仍然没有结果。有什么办法吗?
 
它能与 MT4 一起使用吗?