文章 "神经网络:从理论到实践" - 页 6 1234567891011 新评论 Yedelkin 2012.10.10 11:10 #51 fyords: 当然,我并不反对在这个主题中讨论神经网络的微妙之处,但这篇文章 原本是为初学者准备的。文章省略了一些细节,因为这些细节会让神经网络新手感到困惑。当然,这篇文章并没有具体说明训练(拟合)神经网络的各种方法,但在初始阶段这并不是必要的。如果你意识到神经网络并不难,这并不能成为你拒绝接受并说 "这很难,不适合我 "的借口。如果你懂得更多,那很好,但这篇文章可能不适合你。到目前为止,正是因为没有我上面提到的那些细节,才让我这个普通的傻瓜陷入了迷茫。 我把这篇文章重读了三遍,但只在论坛上找到了必要的答案。fyords: 目前,第二部分将涉及多层神经网络的工作。 如果您对第二部分的内容有任何希望,请简要提出。 我只对一个问题感兴趣:如何创建一个不使用 "外部 "优化器的自学习 程序。当然,如果在现阶段有可能的话。 Serj 2012.10.10 12:33 #52 fyords:经过商议,决定撰写文章的第二部分。目前,第二部分将涉及多层神经网络的工作。 如果您对文章内容有任何希望,请简要写出来。 那些我用手指就能表达的想法将在文章中描述。谢谢。 我希望看到用手指描述梯度学习方法。 Yury Reshetov 2012.10.10 15:59 #53 Yedelkin:我 "天真地认为",在以俄语为母语的人中,并不习惯把独立学习的过程称为 "参数拟合"。同样,把任何系统的参数选择(借助外部过程)称为学习也是不被接受的。无论你如何称呼拟合,它都不会停止拟合。处理非平稳数据的神经网络的优化、拟合和学习是同义词。因为这三个词的意思是一样的:为过去的历史数据(训练样本)选择加权系数,以尽量减少神经网络输出的误差。如果有可能为网格提供未来数据,那就另当别论了。但现在办公设备商店里还没有时间机器出售,所以我们只能适应过去。 TheXpert 2012.10.10 16:06 #54 Reshetov:无论你把它叫做什么,它都不会不再是一个配件。 再培训的定义很简单。因此,没有什么可指责镜子的。 Vladimir 2012.10.11 00:23 #55 Yedelkin:只有一个问题令人感兴趣:如何创建一个不使用 "外部 "优化器的自学 程序。当然,如果在现阶段有可能的话。这很简单。EA 代码可以包含网络本身及其权重优化器,当新数据到来时,优化器可以自动启动。在大多数情况下,我们所说的神经网络 指的就是这种自学习网络。外部训练的网络,例如由测试优化器训练的网络,就是玩具。 Vladimir Tkach 2012.10.13 18:44 #56 各位,帮帮我!我的理解是否正确,即输入数据的归一化应该在网络 的整个训练 期进行?我是说 xi 的最大值和最小值应该取自整个训练期? Yury Reshetov 2012.10.13 19:23 #57 net: 各位,帮帮我!我的理解是否正确,即输入数据的归一化应该在网络的整个训练期进行?我是说 xi 的最大值和最小值应该取自整个训练期? 有必要对整个训练样本进行归一化。 Dmitiry Ananiev 2012.10.13 21:45 #58 //+------------------------------------------------------------------+ //|macd-neuro-example.mq5 //| Copyright 2012, MetaQuotes Software Corp. //|http://www.mql5.com | | //+------------------------------------------------------------------+ #property copyright "Copyright 2012, MetaQuotes Software Corp." #property link "http://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ //| 专家初始化函数| //+------------------------------------------------------------------+ #define SIZE 1000 #include <Trade\Trade.mqh> // 连接执行贸易操作的图书馆 #include <Trade\PositionInfo.mqh> // 连接图书馆以获取有关职位的信息 #include <Indicators/TimeSeries.mqh> //--- 加权系数的值 input double w0=0.5; input double w1=0.5; input double w2=0.5; input double w3=0.5; input double w4=0.5; input double w5=0.5; input double w6=0.5; input double w7=0.5; input double w8=0.5; input double w9=0.5; input double w10=0.5; input double w11=0.5; input double w12=0.5; string my_symbol; // 用于存储字符的变量 double inputsH[13]; // 用于存储输入信号的数组 double inputsL[13]; // 用于存储输入信号的数组 int periods[13]={2,3,5,8,13,21,34,55,89,144,233,377,610}; int B,Ba; double weight[13]; // 用于存储权重系数的数组 double High[SIZE],Low[SIZE]; CTrade m_Trade; // 执行贸易操作的对象 CPositionInfo m_Position; // 位置信息对象 //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ int OnInit() { weight[0]=w0; weight[1]=w1; weight[2]=w2; weight[3]=w3; weight[4]=w4; weight[5]=w5; weight[6]=w6; weight[7]=w7; weight[8]=w8; weight[9]=w9; weight[10]=w10; weight[11]=w11; weight[12]=w12; my_symbol=Symbol(); B=Bars(my_symbol,0); //--- 返回 0,初始化完成 return(0); } //+------------------------------------------------------------------+ //| 专家去初始化函数| //+------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+------------------------------------------------------------------+ //| 专家勾选功能| //+------------------------------------------------------------------+ void OnTick() { double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits); // 最优惠购买 double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits); // 最优惠出售 B=Bars(my_symbol,0); if(B!=Ba) { CiHigh hi; CiLow li; hi.Create(_Symbol,_Period); li.Create(_Symbol,_Period); hi.GetData(0,SIZE,High); li.GetData(0,SIZE,Low); } Ba=B; { for(int i=0; i<13; i++) { int HB = ArrayMaximum(High,SIZE-periods[i],periods[i]); int LB = ArrayMinimum(Low, SIZE-periods[i],periods[i]); if(Bid>=High[HB]) inputsH[i] =1; else inputsH[i]=0; if(Bid<=Low[LB]) inputsL[i]=1; else inputsL[i]=0; } double outH=CalculateNeuron(inputsH,weight); double outL=CalculateNeuron(inputsL,weight); //--- 如果神经元输出值小于 0 if(outL>0) { //--- 如果该字符已有位置 if(m_Position.Select(my_symbol)) { //--- 如果该位置的类型是 "卖出",则关闭它 if(m_Position.PositionType()==POSITION_TYPE_SELL) m_Trade.PositionClose(my_symbol); //--- 如果该仓位的类型是买入,则退出。 if(m_Position.PositionType()==POSITION_TYPE_BUY) return; } //--- if you got here, there is no position, open it. m_Trade.Buy(0.1,my_symbol); } //--- 如果神经元输出值大于或等于 0 if(outH>0) { //--- 如果该字符已有位置 if(m_Position.Select(my_symbol)) { //--- 如果该仓位的类型是买入,则关闭它 if(m_Position.PositionType()==POSITION_TYPE_BUY) m_Trade.PositionClose(my_symbol); //--- 如果该位置的类型是卖出,则退出。 if(m_Position.PositionType()==POSITION_TYPE_SELL) return; } //--- if you got here, there is no position, open it. m_Trade.Sell(0.1,my_symbol); } if(outH>0.0 || outL>0) Print(outH," ",outL); } } //+------------------------------------------------------------------+ //|| 神经元计算功能| //+------------------------------------------------------------------+ double CalculateNeuron(double &inputs[],double &w[]) { //--- 用于存储输入信号加权和的变量 double NET=0.0; //-----------------------------在循环中按输入数得到输入的加权平均和 for(int n=0;n<ArraySize(inputs);n++) { NET+=inputs[n]*w[n]; } //--- 将投入的加权平均值乘以加法因子 return(ActivateNeuron(NET)); } //+------------------------------------------------------------------+ //|| 神经元激活函数| //+------------------------------------------------------------------+ double ActivateNeuron(double x) { //--- 用于存储激活函数结果的变量 double Out; //--- 双曲正切函数 Out=(exp(x)-exp(-x))/(exp(x)+exp(-x)); //--- 返回激活函数的值 return(Out); } //+------------------------------------------------------------------+ 这只猫头鹰是我写的。我们能说它是一个神经网络吗?用于通道交易的猫头鹰。算法如下:取斐波条数的极值(2,3,5,8,13....)。对于每个神经元的买入,例如 - 如果价格低于或等于一个周期的 LOW 极值价格,我们返回 1,否则 - 0。卖出 - 相反。我在等待对代码和算法的批评。 Serj 2012.10.13 22:17 #59 dimeon:这只猫头鹰是我写的。我们能说它是一个神经网络吗?用于通道交易的猫头鹰。算法如下:取斐波条数的极值(2,3,5,8,13....)。对于每个神经元的买入,例如 - 如果价格低于或等于一个周期的 LOW 极值价格,我们返回 1,否则 - 0。要卖出--镜像相反。我在等待对代码和算法的批评。 在您的案例中,神经元激活的功能可以丢掉,因为它是一个不必要的制动器。return(NET); 这不是神经网络,只是一个感知器。一个网络至少需要几个感知器。 Dmitiry Ananiev 2012.10.14 02:11 #60 her.human: 在你的情况中,神经元激活功能可以被丢弃,这是一个不必要的制动器。return(NET); 这不是一个神经网络,它只是一个感知器。一个网络至少需要几个感知器。 你能给我举个例子吗,比如添加 MA 或其他指标或其他东西,以及如何将其全部联网? 1234567891011 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
到目前为止,正是因为没有我上面提到的那些细节,才让我这个普通的傻瓜陷入了迷茫。 我把这篇文章重读了三遍,但只在论坛上找到了必要的答案。
经过商议,决定撰写文章的第二部分。
目前,第二部分将涉及多层神经网络的工作。
如果您对文章内容有任何希望,请简要写出来。
那些我用手指就能表达的想法将在文章中描述。
谢谢。
我 "天真地认为",在以俄语为母语的人中,并不习惯把独立学习的过程称为 "参数拟合"。同样,把任何系统的参数选择(借助外部过程)称为学习也是不被接受的。
无论你如何称呼拟合,它都不会停止拟合。
处理非平稳数据的神经网络的优化、拟合和学习是同义词。因为这三个词的意思是一样的:为过去的历史数据(训练样本)选择加权系数,以尽量减少神经网络输出的误差。如果有可能为网格提供未来数据,那就另当别论了。但现在办公设备商店里还没有时间机器出售,所以我们只能适应过去。
无论你把它叫做什么,它都不会不再是一个配件。
只有一个问题令人感兴趣:如何创建一个不使用 "外部 "优化器的自学 程序。当然,如果在现阶段有可能的话。
这很简单。EA 代码可以包含网络本身及其权重优化器,当新数据到来时,优化器可以自动启动。在大多数情况下,我们所说的神经网络 指的就是这种自学习网络。外部训练的网络,例如由测试优化器训练的网络,就是玩具。
各位,帮帮我!我的理解是否正确,即输入数据的归一化应该在网络的整个训练期进行?我是说 xi 的最大值和最小值应该取自整个训练期?
这只猫头鹰是我写的。我们能说它是一个神经网络吗?
用于通道交易的猫头鹰。
算法如下:取斐波条数的极值(2,3,5,8,13....)。对于每个神经元的买入,例如 - 如果价格低于或等于一个周期的 LOW 极值价格,我们返回 1,否则 - 0。卖出 - 相反。
我在等待对代码和算法的批评。
这只猫头鹰是我写的。我们能说它是一个神经网络吗?
用于通道交易的猫头鹰。
算法如下:取斐波条数的极值(2,3,5,8,13....)。对于每个神经元的买入,例如 - 如果价格低于或等于一个周期的 LOW 极值价格,我们返回 1,否则 - 0。要卖出--镜像相反。
我在等待对代码和算法的批评。
在你的情况中,神经元激活功能可以被丢弃,这是一个不必要的制动器。