神经网络,如何掌握它们,从哪里开始? - 页 5

 
meta-trader2007 >> :

我指的是一个简单的线性透视器,就像雷舍托夫使用的那个。Rosenblatt创造了他的perseptron作为大脑功能的模型),这是一个非常原始的模型。

雷舍托夫先生使用的简单线性透视仪已经过时40多年了。

神经网络的真正历史始于具有激活函数的Rosenblatt perseptron。

 
TheXpert >> :

雷舍托夫先生使用的简单线性透视仪已经过时40多年了。

神经网络的真正历史始于具有激活函数的Rosenblatt perseptron。

但他的perseptron也不完美。而且它不善于预测航线方向。

那么,在罗森布拉特的两层透视器中(他首先创造了这种透视器),第一个隐藏层起到了激活函数的作用?

 
meta-trader2007 >> :

但他的perseptron也不完美。而且它不适合用于预测航线的方向。

也就是说,在Rosenblatt的两层透镜中(他首先创造了透镜),第一个隐藏层起到了激活函数的作用?

我在关注这个话题,但你说的是更高的事情。 我们至少应该了解如何做一些简单的事情...


下面是一个简单的专家顾问的算法。

让我们以一个简单的算法为例,该算法根据最后的分形给出带有止损和获利的进入点。

如果我们有一个分形向上,我们为分形的突破下一个买入止损单,止损低于从零到形成分形的条形中的最低价格。止盈等于止损。


下面是这个专家顾问的代码。

extern double    Lot=0.1;
extern int       Slippage=3; // Проскальзывание
extern int       Magic=1;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
 int i;
 
// Фрактал вверх 
 int iUpFr;   // Номер бара на котором образовался последний фрактал вверх
 double UpFr; // Значение последнего фрактала вверх 

for ( i=3; i<Bars; i++){
UpFr=iFractals(NULL,0,MODE_UPPER, i);
  if ( UpFr>0){
  iUpFr= i;
  //Print ("UpFr = ", UpFr, ", ", " iUpFr = ", iUpFr);
  break;
  }
}   
// Проверяем прорван-ли найденый фрактал, если он прорван, то по нему не имеет смысла выставлять ордер
bool OkUpFr; // Если false, то прорван, если true, то не прорван
if( UpFr>=High[iHighest(NULL,0,MODE_HIGH, iUpFr,0)]){ OkUpFr=true;}

double SellSl=High[iHighest(NULL,0,MODE_HIGH, iUpFr+1,0)]; // Минимальное значение цены от нулевого бара до номера на котором сформировался последний фрактал вверх


// Фрактал вниз
 int iDnFr;   // Номер бара на котором образовался последний фрактал вниз
 double DnFr; // Значение последнего фрактала вниз
 
for ( i=3; i<Bars; i++){
DnFr=iFractals(NULL,0,MODE_LOWER, i);
  if ( DnFr>0){
  iDnFr= i;
  //Print ("DnFr = ", DnFr, ", ", " iDnFr = ", iDnFr);
  break;
  }
} 
// Проверяем прорван-ли найденый фрактал, если он прорван, то по нему не имеет смысла выставлять ордер
bool OkDnFr; // Если false, то прорван, если true, то не прорван
if( DnFr<=Low[iLowest(NULL,0,MODE_LOW, iDnFr,0)]){ OkDnFr=true;}

double BuySl=Low[iLowest(NULL,0,MODE_LOW, iDnFr+1,0)]; // Максимальное значение цены от нулевого бара до номера на котором сформировался последний фрактал вниз
 
 // Параметры ордеров
  double Tick=MarketInfo(Symbol(),MODE_TICKSIZE);
  double spread=MarketInfo(Symbol(),MODE_SPREAD)* Tick;

  double B;
  double Bsl;
  double S;
  double Ssl;    
  double Btp; 
  double Stp; 
  B=NormalizeDouble( UpFr+1* Tick+ spread,Digits);      // Цена для покупки
  Bsl=NormalizeDouble( BuySl-1* Tick,Digits);          // Стоп лосс для ордера на покупку
  Btp=NormalizeDouble( B+( B- Bsl),Digits);             // Тейк профит для ордера на покупку
  S=NormalizeDouble( DnFr-1* Tick,Digits);             // Цена для продажи
  Ssl=NormalizeDouble( SellSl+ spread+1* Tick,Digits);  // Стоп лосс для ордера на продажу
  Stp=NormalizeDouble( S-( Ssl- S),Digits);             // Тейк профит для ордера на продажу
  
bool Buy; // если Buy==true, значит появились условия для Buy stop
bool Sell;// если Sell==true, значит появились условия для Sell stop

if( OkUpFr==true){ Buy=true;}
if( OkDnFr==true){ Sell=true;}
 
// Проверка открытых ордеров и выставленых ордеров
int total = OrdersTotal(); // Общее кол-во открытых и отложеных ордеров.
int Ticket = OrderTicket( ); // Возвращает номер тикета для текущего выбранного ордера. 
bool PendingOrderBuy=false;  
bool PendingOrderSell=false;   
bool MarketOrderBuy=false;
bool MarketOrderSell=false;
if( total>0){  
  for( i=0; i<= total; i++){
     if (OrderSelect( i, SELECT_BY_POS)==true){
        if (OrderSymbol()==Symbol() && OrderMagicNumber()== Magic){
         double OpenPrice=NormalizeDouble(OrderOpenPrice(),Digits);
         double StopLoss=NormalizeDouble(OrderStopLoss(),Digits);
         double TakeProfit=NormalizeDouble(OrderTakeProfit(),Digits);
         Ticket = OrderTicket( );
           if (OrderType( )==OP_BUY){
           MarketOrderBuy = true;
           }
           if (OrderType( )==OP_SELL){
           MarketOrderSell = true;
           }
           if (OrderType( )==OP_BUYSTOP){
           PendingOrderBuy = true;
           if( OpenPrice!= B) {OrderDelete( Ticket,CLR_NONE);} 
           if( StopLoss!= Bsl){OrderDelete( Ticket,CLR_NONE);}       
           }
           if (OrderType( )==OP_SELLSTOP){
           PendingOrderSell = true;
           if( OpenPrice!= S) {OrderDelete( Ticket,CLR_NONE);} 
           if( StopLoss!= Ssl){OrderDelete( Ticket,CLR_NONE);}    
           }  
        }
     }
  }
} 
// Выставление отложеных ордеров
if( Buy==true && PendingOrderBuy==false && MarketOrderBuy==false){
         Ticket=OrderSend (Symbol(),OP_BUYSTOP, Lot, B, Slippage, Bsl, Btp,NULL, Magic,0,CLR_NONE);
         if( Ticket<0)
         {
         Print("OrderSend failed with error #",GetLastError());
         return(0);
         }
}
if( Sell==true && PendingOrderSell==false && MarketOrderSell==false){
         Ticket=OrderSend (Symbol(),OP_SELLSTOP, Lot, S, Slippage, Ssl, Stp,NULL, Magic,0,CLR_NONE);
         if( Ticket<0)
         {
         Print("OrderSend failed with error #",GetLastError());
         return(0);
         }
}     
//----
   return(0);
  }

在这个算法中,你可以选择几个锚点,在此基础上对分形模型进行测量。


参数,可作为权重使用:

买:
iUpFr
iUpFr-iSellSl
UpFr-SellSl
(UpFr-SellSl)/(iUpFr-iSellSl)
(UpFr-SellSl)/(iUpFr)

卖:
iDnFr
iDnFr-iBuySl
BuySl-DnFr
(BuySl-DnFr)/(iDnFr-iBuySl)
(BuySl-DnFr)/(iDnFr)


我是否正确理解,神经网络创建的下一步将是引入变量,与这些属性进行比较?

而比较将在优化过程中进行?

如果我错了,为了栓住这个EA,一个简单的神经网络,我还需要采取哪些实际步骤?



 

神经网络的 数学原理并不复杂。输入参数的选择对于网络预测的成功更为重要。这里的问题是:哪些指标和它们的参数完全描述了市场的现状和历史?无论网络中有多少层,只知道一种货币过去的几个价格是远远不够的,无法预测未来价格。这就是为什么你必须选择大量的过去价格或不同时期的指标。绝大多数人使用指标,因为它们允许以一种更有效的方式来描述最后的价格与过去的价格的位置。也许我们应该把讨论转向输入参数的选择。我认为不同时期的muves的最近值的相关性可以成为网络的一个好的输入。谁有不同的意见?不同类型的指标,如MACD、RSI、AC、Stoch等,是否可以在同一个网络的输入端混合使用?

 
gpwr >> :

不同类型的指标,如MACD、RSI、AC、Stoch等,是否可以在同一个网络的输入端混合使用?

我认为你可以,只要这套指标能给出好的市场入口。在这之后,我们还有一个困难的问题--在训练期间我们应该向净输出提供什么?我们想要什么?要认识到一种模式?预测下一支蜡烛的颜色?或者也许不是一个而是几个?或者,我们想预测运动的幅度?)))

我希望能找到这些问题的答案。

也许从业者会告诉我,他们用什么来训练他们的网?:))

 

亲爱的论坛成员,这个主题是神经网络,如何掌握它,从哪里开始?

让我们走近这个话题....

 

伙计们,这不是关于神经网络--而是关于它们的应用方式......。

 
Andrey4-min писал(а)>>

亲爱的论坛成员,这个主题是神经网络,如何掌握它,从哪里开始?

让我们走近主题....

这里有一个关于前进网络的简短描述,当类似的话题出现时,我有时会引用它。因此,让我们创建一个简单的前向网络。

第1步:选择输入数据。比如说。

x1 = WPR Per1

x2 = WPR Per2

x3 = WPR Per3

第二步:选择隐藏层的神经元数量,例如两个神经元,y1和y2。选择输出层的神经元数量,例如两个神经元,z1和z2。因此,我们建立了一个3-2-2网络。z1和z2是我们的输出。

第3步:设定决策逻辑。例如z1>=u买入,z1<=-u卖出,z2<=-v收盘买入,z2>=v收盘卖出,其中|u|<=1和|v|<=1。

第四步:描述隐藏神经元 y1=F(x1,x2,x3)和y2=F(x1,x2,x3)。

y1 = F(a0+a1*x1+a2*x2+a3*x3)

y2 = F(b0+b1*x1+b2*x2+b3*x3)

其中F()是一个非线性函数。例如,F(x)=tanh(x)=(exp(x)-exp(-x))/(exp(x)+exp(-x))。我更喜欢一个更简单的函数,以避免计算exp()时出现错误。

F(x)=-1如果x<=-1,x如果-1<x<1,1如果x>=1。

第五步:描述输出神经元z1=F(y1,y2)和z2=F(y1,y2)。

z1 = F(c0+c1*y1+c2*y2)

z2 = F(d0+d1*y1+d2*y2)

其中F()是同一个神经元的激活函数。

因此,网络已经被创建和描述。给出Williamps-Percent-Range(WPR)的周期Per1,Per2和Per3,并通过metadrae batter a0, a1, a2, a3, b0, b1, b2, b3, c0, c1, c2, d0, d1, d2, -1<=u<=+1, -1<=v<=+1。你也可以优化Per1、Per2和Per3。你可以玩玩不同的输入。例如,用MACD或其他指标来代替WPR。你可以把它限制在一个开仓的输出神经元上:z(y1,y2)>=u买,z(y1,y2)<=-u卖。并通过止损、尾随止损或止盈来收盘。

你也可以创建一个更复杂的网络,每个交易决策都与一个相应的输出神经元相关。例如,用相同的输入数据和隐藏神经元,我们创建了4个输出神经元

z1(y1,y2)>u1 - 开长线

z2(y1,y2)>u2 - 开放式短路

z3(y1,y2)>u3 - 关闭多头

z4(y1,y2)>u4 - 关闭空头

在这种情况下,优化系数的数量大大增加。通常u1=u2=u3=u4=0.9。

如果你有一台强大的计算机,你可以增加隐藏层的数量和其中的神经元。

 
Andrey4-min писал(а)>>

亲爱的论坛成员,这个主题是神经网络,如何掌握它,从哪里开始?

让我们走近主题....

不用自己费心为神经网络编程,有现成的程序。唯一有俄文书的程序--Statistica Neural Networks,这本书给人的印象是真的是由神经网络专家写的,对神经网络技术和现有的神经网络类型有相当好的介绍和概述。该程序允许将训练好的网络导出为dll文件,可以在MT Expert Advisors中使用(不过我还没试过,如果我说错了,对不起)。有非网络的专门交易员程序不那么容易附加到MT上,即使有可能,也是歪打正着或非常昂贵。有经纪人终端可以将数据导出为元文件,要实施专门的软件来处理非增长的网络并不那么容易。诶!为什么MT开发者不提供输出数据的可能性,以便能够使用任何其他的财务分析程序,而不需要进行不必要的修改。

 

对于初学者来说,我认为最好的程序是NeuroShell -2,它有一个俄语帮助和俄语例子。此外,NS 2的神经网络可以很容易地连接到MT4的专家顾问和指标。

你可以在这里阅读:http://www.fxreal.ru/forums/forums.php?forum=3