文章 "使用带 ENCOG 机器学习框架的 MetaTrader 5 指标进行时间序列预测" - 页 5 123456 新评论 ryuga68 2015.11.17 05:29 #41 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/// 存储所有文件的目录。/// </summarypublic constring DIRECTORY = "your directory files";/// <summary/// 启动整个过程的输入文件。 该文件应使用 EncogStreamWriter 对象从 NinjaTrader 下载。/// </summary>public constring STEP1_FILENAME = DIRECTORY + "mt4export.csv";/// <summary/// 我们应用预测未来指标并生成第二个文件,其中添加了额外的预测字段。/// </summarypublic constring STEP2_FILENAME = DIRECTORY + "step2_future.csv";/// <summary/// 接下来,整个文件被规范化并存储到此文件中。/// </summarypublic 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/// 输入窗口的大小,用于预测下一个条形图的条数。/// </summarypublic const int INPUT_WINDOW = 6;/// <summary/// 我们试图预测的前方条数。 这通常只有 1 条。 在步骤 1 中使用的未来指标可以/// 以及展望更远的未来。/// </summary>public const int PREDICT_WINDOW = 1;/// <summary/// 为获得最佳结果而向前查看的条数。/// </summarypublic const int RESULT_WINDOW = 5;/// <summary/// 第一隐藏层的神经元数目。/// </summarypublic 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_WINDOWind.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; // PredictBestReturntwcsv.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();}}} Discussion of article "Using 使用带 ENCOG 机器学习框架的 MetaTrader Developing an Expert Advisor tiagobr 2015.11.22 10:18 #42 有没有人成功地将 MQL 移植到 ENCOG 3.3?似乎没有人想让 MQL 与 ENCOG 3.3 或更高版本兼容。我不明白为什么 MQL 不为 metatrader 创建自己的神经网络,从而避免了普通人的大量工作。 Stanislav Korotky 2015.11.22 21:07 #43 tiagobr: 我不明白为什么 MQL 不为 metatrader 创建一个自己的神经网络,以避免普通人的大量工作。 如果您在 mql5.com 上搜索神经网络,您会得到很多文章和代码 - 所有的东西都可以 "即插即用"。它们不符合您的需求吗? mgarciat 2016.04.16 14:48 #44 你好、感谢你的文章,因为它对开始了解如何开发程序很有帮助。不过,我是个新手,我想知道如何运行所有步骤。我可以使用脚本下载数据,但我不知道如何在 Metatrader 中执行归一化和时间框。有没有运行代码的步骤信息?非常感谢,很抱歉提出这么基本的问题。致以最崇高的敬意 Chee Chua 2016.07.14 03:12 #45 你好、我卡在 7.神经网络训练我下载了 .Net Core、Visual Basic Code for Mac 和 Encog 3.3。下一步我应该如何使用 Encog?谢谢。文章中还有一些断开的链接。会有更新吗?即误差计算 和 训练算法完整的 ENCOG 文档可 在线获取。 Aipe Li 2016.12.22 09:15 #46 HI,nvesteo I downloaded the sample code, with MT5 loading neuralencogindicator display exception, ask for help. Mateus Oliveira 2016.12.28 00:44 #47 你们好、这篇文章写得非常好,但我没有重现同样的结果。当调用指标时,它并没有像文章中的例子那样归一化为 1 和 -1 ,而只是绘制了一条直线。有人遇到过这个问题并解决了吗? 附加的文件: Captura_de_tela_2016-12-27_21.40.31.png 114 kb Mateus Oliveira 2016.12.29 00:12 #48 Automated-Trading:尝试在控制面板->区域和语言->附加设置中将小数符号更改为". "而不是","...这就是我的问题所在。更改后问题就解决了。谢谢 Cagatay Tezsezen 2017.04.25 12:45 #49 指示器没有绘图。将 dll 文件复制到不同位置,仍然没有结果。有什么办法吗? bmkinyua 2017.06.15 06:21 #50 它能与 MT4 一起使用吗? 123456 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
你们好、
我想把这篇文章移植到 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 不为 metatrader 创建一个自己的神经网络,以避免普通人的大量工作。
你好、
感谢你的文章,因为它对开始了解如何开发程序很有帮助。不过,我是个新手,我想知道如何运行所有步骤。我可以使用脚本下载数据,但我不知道如何在 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 ,而只是绘制了一条直线。
有人遇到过这个问题并解决了吗?
尝试在控制面板->区域和语言->附加设置中将小数符号更改为". "而不是","...
这就是我的问题所在。更改后问题就解决了。
谢谢