Sinir ağları, bunlara nasıl hakim olunur, nereden başlamalı? - sayfa 5

 
meta-trader2007 >> :

Reshetov'un kullandığına benzer basit bir doğrusal algılayıcı demek istiyorum. Rosenblatt, algılayıcısını beynin bir modeli olarak yarattı), çok ilkel bir model...

Bay Reshetov tarafından kullanılan basit doğrusal algılayıcı 40 yaşın üzerindedir.

Sinir ağlarının gerçek tarihi, aktivasyon fonksiyonu ile tam olarak Rosenblatt algılayıcısıyla başladı.

 
TheXpert >> :

Bay Reshetov tarafından kullanılan basit doğrusal algılayıcı 40 yaşın üzerindedir.

Sinir ağlarının gerçek tarihi, aktivasyon fonksiyonu ile tam olarak Rosenblatt algılayıcısıyla başladı.

Ama onun algılayıcısı da mükemmel değil. Ve parkurun hareket yönünü tahmin etmek için uygun değildir.

Onlar. Rosenblatt'ın iki katmanlı algılayıcılarında (onları önce yarattı), ilk gizli katman bir aktivasyon işlevi rolü mü oynadı?

 
meta-trader2007 >> :

Ama onun algılayıcısı da mükemmel değil. Ve kursun hareket yönünü tahmin etmek için uygun değildir.

Onlar. Rosenblatt'ın iki katmanlı algılayıcılarında (onları önce yarattı), ilk gizli katman bir aktivasyon işlevi rolü mü oynadı?

Arkadaşlar lütfen konuya yazın, yoksa konuyu takip ediyorum ve burada daha yüksek konulardan bahsediyorsunuz en azından basit bir şeyi nasıl yapacağımızı çözerdik...


İşte basit bir Uzman Danışmanın algoritması:

Örneğin, son fraktal temelinde zararı durdur ve kâr giriş noktaları alan basit bir algoritmayı ele alalım:

Eğer bir up fraktalimiz varsa, o zaman fraktalı kırmak için Buy Stop emri veririz, stop loss sıfırdan fraktalın oluştuğu bara kadar olan barlar arasında minimum fiyatın altındadır. Kâr almak, zararı durdurmak için eşittir.


İşte bu EA için kod:

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

Bu algoritmada, fraktal modelin ölçüleceği bazı referans noktaları ayırt edilebilir:


Ağırlık olarak kullanılabilecek parametreler:

Satın almak için:
iUpFr
iUpFr-iSellSl
YukarıFr-SellSl
(UpFr-SellSl)/(iUpFr-iSellSl)
(UpFr-SellSl)/(iUpFr)

Satılık:
iDnFr
iDnFr-iBuySl
BuySl-DnFr
(BuySl-DnFr)/(iDnFr-iBuySl)
(BuySl-DnFr)/(iDnFr)


Bir sinir ağı oluşturmanın bir sonraki adımının bu özelliklerle karşılaştırılacak değişkenlerin tanıtılması olacağını doğru anlıyor muyum?

Ve karşılaştırma optimizasyon sürecinde gerçekleşecek mi?

Eğer yanılıyorsam, bu Uzman Danışmana basit bir sinir ağı eklemek için başka hangi pratik adımların atılması gerekiyor?



 

Sinir ağlarının matematiği o kadar karmaşık değildir. Giriş parametrelerinin seçimi, ağ tahmininin başarısı için çok daha önemlidir. Buradaki soru şudur: Hangi göstergeler ve parametreleri, piyasanın mevcut durumunu ve tarihini tam olarak tanımlar? Bir para biriminin son birkaç fiyatını bilmek, ağdaki katman sayısından bağımsız olarak gelecekteki fiyatı tahmin etmek için yeterli olmaktan uzaktır. Bu nedenle, çok sayıda geçmiş fiyat veya farklı dönemlerin göstergelerini seçmeniz gerekir. Büyük çoğunluk göstergeleri kullanır çünkü geçmiş fiyatlara göre son fiyatın konumunu daha etkili bir şekilde tanımlamanıza olanak tanır. Belki tartışmayı girdi parametrelerinin seçimine çevirebiliriz. Bana öyle geliyor ki farklı dönemlerdeki hareketlerin son değerlerinin karşılıklı ilişkisi ağ için iyi bir girdi olabilir. Kimin başka görüşleri var? Aynı ağın girişinde MACD, RSI, AC, Stoch vb. gibi farklı türde göstergeleri karıştırmak mümkün müdür?

 
gpwr >> :

Aynı ağın girişinde MACD, RSI, AC, Stoch vb. gibi farklı türdeki göstergeleri karıştırmak mümkün müdür?

Bir dizi göstergenin iyi pazar girişleri sağlamasının mümkün olduğunu düşünüyorum. Takipte, daha az zor olmayan başka bir soru ortaya çıkıyor - eğitim sırasında ağ çıkışına ne beslenmeli? Ne istiyoruz? Bir deseni tanıyor musunuz? Bir sonraki mumun rengini tahmin edin? Ya da belki bir değil, birkaç? Veya hareketin büyüklüğünü tahmin edebilir misiniz? )))

Bu soruların cevaplarını bulmak istiyorum.

Belki uygulayıcılar size ağlarını ne üzerine eğittiklerini söylerler? :))

 

Sevgili forum katılımcıları, bu konunun konusu Sinir Ağları , nasıl ustalaşılır, nereden başlamalı?

Gelelim konuya....

 

Beyler, bu sinir ağlarıyla ilgili değil - nasıl kullanıldığıyla ilgili ......

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

Sevgili forum katılımcıları, bu konunun konusu Sinir Ağları , nasıl ustalaşılır, nereden başlamalı?

Gelelim konuya....

Bu konu açıldığında bazen alıntıladığım, ileri ağların kısa bir açıklaması. Böylece, en basit ileri ağı oluşturuyoruz.

Adım 1: Giriş verilerini seçin. Örneğin,

x1 = WPR Başına1

x2 = WPR Başına2

x3 = WPR Per3

Adım 2: Gizli katmandaki nöronların sayısını seçin - örneğin iki nöron, y1 ve y2. Çıkış düzeyindeki nöron sayısını seçiyoruz - örneğin, iki nöron, z1 ve z2. Böylece bir 3-2-2 ağı oluşturduk. z1 ve z2 çıktılarımızdır.

Adım 3: Karar verme mantığını ayarlayın. Örneğin z1>=u satın al, z1<=-u sat, z2<=-v kapat satın, z2>=v kapat sat, burada |u|<=1 ve |v|<=1.

Adım 4: Gizli nöronları y1=F(x1,x2,x3) ve y2=F(x1,x2,x3) tanımlayın:

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

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

burada F() doğrusal olmayan bir işlevdir (etkinleştirme işlevi). Örneğin, F(x)=tanh(x)=(exp(x)-exp(-x))/(exp(x)+exp(-x))). exp()'i hesaplarken hataları önlemek için daha basit bir işlevi tercih ederim:

F(x) = -1 ise x<=-1 ise, x -1 ise<x<1, x>=1 ise 1.

Adım 5: z1=F(y1,y2) ve z2=F(y1,y2) çıkış nöronlarını tanımlayın:

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

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

burada F() aynı nöron aktivasyon fonksiyonudur.

Böylece ağ oluşturulur ve tanımlanır. Williamps-Percent-Range (WPR) için Per1, Per2 ve Per3 periyodlarını ayarlayın ve metadraft bakteriyatörü a0, a1, a2, a3, b0, b1, b2, b3, c0, c1, c2, d0, d1, d2 ile optimize edin , - 1<=u<=+1, -1<=v<=+1. Ayrıca Per1, Per2 ve Per3'ü de optimize edebilirsiniz. Farklı girdilerle oynayabilirsiniz. Örneğin, WPR yerine MACD'yi veya başka bir göstergeyi deneyin. Açılış pozisyonları için kendinizi bir çıkış nöronuyla sınırlayabilirsiniz: z(y1,y2)>=u satın al, z(y1,y2)<=-u sat. Ve zararı durdur, sonda durdur veya kârı al ile kapatın.

Her ticaret kararına karşılık gelen bir çıktı nöronunun atandığı daha karmaşık bir ağ oluşturmak da mümkündür. Örneğin, aynı girdi verileri ve gizli nöronlar verildiğinde 4 çıktı nöronu oluşturuyoruz.

z1(y1,y2)>u1 - uzun açık

z2(y1,y2)>u2 - açık kısa

z3(y1,y2)>u3 - uzun olanı kapat

z4(y1,y2)>u4 - kısa devreyi kapat

Bu durumda, optimize edilmiş katsayıların sayısı önemli ölçüde artar. Genellikle, u1=u2=u3=u4=0.9.

Güçlü bir bilgisayarınız varsa, içlerindeki gizli katmanların ve nöronların sayısını artırabilirsiniz.

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

Sevgili forum katılımcıları, bu konunun konusu Sinir Ağları , nasıl ustalaşılır, nereden başlamalı?

Gelelim konuya....

Sinir ağlarını kendi başınıza programlama zahmetine girmeyin, hazır programlar var. Rusça'da bir kitabı bulunan tek program Statistica Neural Networks'tür ve ayrıca, bu kitap gerçekten sinir ağları uzmanları tarafından yazıldığı izlenimini veriyor ve sinir ağlarıyla çalışma yöntemlerine ilişkin oldukça iyi bir girişe ve genel bakışa sahip. ve mevcut sinir ağları türleri. Program, eğitimli ağları MT'deki danışmanlarda kullanılabilecek dll biçiminde dışa aktarmanıza izin verir (henüz kendim denemedim, bir şeyler ters giderse özür dilerim). Ağ olmayan özel ticaret programlarını MT'ye bağlamak o kadar kolay değildir ve mümkünse çarpık veya eğik veya çok pahalıdır. Metastock dosyalarına veri aktarımı sağlayan terminallere sahip DC'ler vardır; burada ağ olmayanlarla çalışmak için özel bir ticaret programı kurmak kolaydır. Eski! Peki, neden MT geliştiricileri, gereksiz yedeklemeler olmadan diğer teknik analiz programlarını kullanabilmeniz için verileri dışa aktarma olanağı sağlamıyor.

 

Yeni başlayanlar için, IMHO, en iyi program NeuroShell -2, Rusça yardım ve Rusça örnekler var. Ayrıca, NS 2'den gelen sinir ağları, MT4'teki Uzman Danışmanlara ve göstergelere kolayca eklenebilir.

Buradan okuyabilirsiniz: http://www.fxreal.ru/forums/forums.php?forum=3