Bir komut dosyası şeklinde sinir ağı - sayfa 4

 
rip :
YuraZ :

normalleştirme her zaman gerekli değildir, ağın sadece 0 ve 1 ile ÇALIŞMASINI ve ÇALIŞMASINI kim söyledi?


Bir örnekle basit bir ızgara ekleyebilirim (maalesef şu anda elimde malzeme yok) - Daha sonra ekleyeceğim

basit bir NN'nin bu sorunu normalleştirme ile önceden veri hazırlığı olmadan çözdüğü yer

maalesef orjinal değil


Ancak, verdiğim örnek! zaten normalleşti

koşul iki aralık vardır


1 0-100

2 10-30


sadece bir aralıktaki konum oranını bulmanız gerekir - bu bilinen

Temelde ölçeklendirme.

Normalleştirme neredeyse her zaman gereklidir. Veriler, etkinleştirme işlevinin kapsamında olmalıdır.

Komut dosyasında sigmoid [-1; +1] şeklindedir. Diyelim ki, bir üstel ... veya bir karekök ile değiştirirsek.


http://www.statsoft.ru/home/portal/applications/NeuralNetworksAdvisor/Adv-new/ActivationFunctions.htm








http://www.statsoft.ru/statportal/tabID__32/MId__141/ModeID__0/PageID__354/DesktopDefault.aspx


işte bir ağ oluşturma örneği ... giriş DÜŞÜK, yani normalleştirme yok

 
YuraZ :

http://www.statsoft.ru/statportal/tabID__32/MId__141/ModeID__0/PageID__354/DesktopDefault.aspx


işte bir ağ oluşturma örneği ... giriş DÜŞÜK, yani normalleştirme yok


Normalleştirilmemiş verileri kullanmak bazen çok faydalıdır. Dönüşümler sırasında kaybolabilecek bilgi içeriğini kaybetmezler.

Ve eğitim örneğinin bilgilendiriciliğini belirlemek için resmi bir mekanizma yoktur ...


Bu arada, makalede aktivasyonun hangi işlevinin kullanıldığı hiçbir yerde görüntülenmiyor. Görünüşe göre, [-inf;+inf] veya [0;+inf] kapsamındaki bir şey ...

 

programı biraz değiştirdi!

ekrandaki çıktı biçimini biraz değiştirdi


şimdi SCRIPT, çıktı verilerini yüksek doğrulukla hesaplamak için borçlarını düşünüyor

program, elbette, evrensel değil, zaten ortaya çıktı, ancak girdi ve çıktı sayısı için keskinleştirildi

ama gizli katmanın boyutu! öğrenme sürecinde seçilen



sonraki sürüm - Girdi ve çıktı sayısı açısından esnek hale getirmeye çalışacağım

ve mümkünse genetik algoritma ekleyeceğim

amacı birçok hata ile NEURONS öldürmek olacak

ve az sayıda hatayla nöronların çoğaltılması!

yani, aslında, en az sayıda hataya sahip olan nöronların dizisinde arama yapmak ve onlardan değiştirilecek yavrular yaratmak.

kötü performans gösteren nöronlar...


1 Öğrenme oranı şu anda düşük

2. değişiklik - gizli 1. seviyenin nöron sayısı mantıksız rastgele

3 giriş ve çıkış veri örneğinde yüksek doğruluk elde ederken eğitimi durdurun

Dosyalar:
 

Bu nasıl kullanılır? Grafiğe bir yazı koydum, yığınlarca sayı birbirine karşılık gelmeye başladı... Bu sayılar ne diyor?

 
Blast :

Bu nasıl kullanılır? Grafiğe bir yazı koydum, yığınlarca sayı birbirine karşılık gelmeye başladı... Bu sayılar ne diyor?

Neden? GA için kendi ağ eğitim algoritmama sahip olduğum için kodu anlamakta bile zorlandım - bunun üzerinde zaman harcamanız, girdileri nereye iteceğinizi, bu çıktıdan nasıl geri çekileceğinizi ve ne zaman alım-satım yapacağınızı anlamanız gerekiyor. Bütün bunlar mümkün mü? Yoksa kâse koşusu için mi buradasın?

 
Loknar :
Patlama :

Bu nasıl kullanılır? Grafiğe bir yazı koydum, yığınlarca sayı birbirine karşılık gelmeye başladı... Bu sayılar ne diyor?

Neden? GA için kendi ağ eğitim algoritmama sahip olduğum için kodu anlamakta bile zorlandım - bunun üzerinde zaman harcamanız, girdileri nereye iteceğinizi, bu çıktıdan nasıl geri çekileceğinizi ve ne zaman alım-satım yapacağınızı anlamanız gerekiyor. Bütün bunlar mümkün mü? Yoksa kâse koşusu için mi buradasın?

Blast burada bir danışman veya gösterge aramayın - bu hala çok uzak


daha ziyade MQL4'te bir sinir ağının çalışma prensipleri üzerine bir çalışmadır.

---

genel olarak, MT'ye veya hızlı olan diğer dillere yapışırsanız, bunu C ++ ile DLL olarak yazmak mantıklıdır.


Loknar, daha doğru çıktı verileri elde etme girişimi ile başlangıçta yayınlanan komut dosyasının yalnızca bir modifikasyonudur.

--

bu arada bir katman eklemeye çalıştım :-) çıktı girdilerinden bahsetmiyorum bile ... öğrenme borusu algoritması o anda ölüyor ...


---

gibi bir şey denemek istiyorum

3 çıkış

çıktı aptalca 0 veya 1 veya -1 0 +1 değil, belirli bir aralıktır

x 0 0 - güle güle bekle

0 x 0 daire (al veya sat çık)

0 0 x sat beklet sat

x'in 0 veya 1 olmadığı ancak belirli bir aralıkta sapma olduğu durumlarda, örneğin -1.000 0.000 +1.000

yani 0.1122 veya -0.012 gibi bir değer alabilir


sınır geçişleri için 3 çıktının bir kombinasyonu analiz edilir


Her TF'de 9 giriş - M1 M5 M15 M30 H1 H4 toplam 54 giriş alıyoruz

her TF için ortalama 3 5 8 13 21 34 55 89 144 233 arasındaki farkı veriyoruz

toplam 3-5 5-8 8-13 13-21 21-34 34-55 55-89 89-144 144-233 her TF'de toplam 9

ızgara görünümünde FAN OF AVERAGES gibi bir şey alıyoruz... :-) matriste

desen gibi bir şeye sahip olduğumuzda 2 3 4 5 6 7 8 9 10 11 fan tamamen açılıyor, görünüşe göre hücre

bir desenimiz olduğunda -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 fan tamamen açılır - BY

daha büyük bir TF'de koşullu sayılar ve böyle bir kalıp -1 -3 -7 - 10 -15 -20 -30 -40 -80 var



---

bir çeşit eğitim seti


1 2 1 0 -3 2 3 0 4 M1

-1 2 -1 0 1 2 3 0 -4 M5

...

................................H4

 

Eğitim için veri hazırlayın





 #property copyright " Copyright © 2005, MetaQuotes Software Corp. "
#property link        " http://www.metaquotes.net/ "
 
static int hWR ;
 
static double      ma [ 9 ][ 233 ] ;
static datetime    SaveTime [ 9 ] ;
static int        indx [ 8 ] = { 3 , 5 , 8 , 13 , 21 , 34 , 55 , 89 , 144 } ;
static    int iFW = 0 ;
 
int init ()
   {
   hWR = FileOpen ( " MA.CSV " , FILE_BIN | FILE_WRITE ) ; 
   string strPut = " DATETIM            | " +
   " m100035|m010058|m010813|m011321|m012134|m013455|m015589| " +
   " m500035|m050058|m050813|m051321|m052134|m053455|m055589| " +
   " m150035|m150058|m150813|m151321|m152134|m153455|m155589| " +
   " m300035|m300058|m300813|m301321|m302134|m303455|m305589| " +
   " h010035|h010058|h010813|h011321|h012134|h013455|h015589| " ;
 
 
 
// "-0.0001|-0.0001|-0.0001|-0.0001|-0.0001|-0.0001|-0.0001|-0.0001|
   FileWrite ( hWR , strPut ) ;
   return ( 0 ) ;
   }
int deinit ()
   {
   FileClose ( hWR ) ;
   }
 
int start ()
{
   iFW = 0 ;
   getMA ( PERIOD_M1 , 1 ) ;
   getMA ( PERIOD_M5 , 2 ) ;
   getMA ( PERIOD_M15 , 3 ) ;
   getMA ( PERIOD_M30 , 4 ) ;
   getMA ( PERIOD_H1 , 5 ) ;
   getMA ( PERIOD_H4 , 6 ) ;
   if ( iFW == 1 )
   {
       PutFile ( ) ;
   }
   return ( 0 ) ;
}
void getMA ( int TF , int iTF )
{
 if ( SaveTime [ iTF ] != iTime ( Symbol () , TF , 0 ) )
 {
 SaveTime [ iTF ] = iTime ( Symbol () , TF , 0 ) ;
 ma [ iTF ][ 89 ] =   iMA ( Symbol () , TF , 89 , 0 , MODE_EMA , PRICE_CLOSE , 0 ) ;
 ma [ iTF ][ 55 ] =   iMA ( Symbol () , TF , 55 , 0 , MODE_EMA , PRICE_CLOSE , 0 ) ;
 ma [ iTF ][ 34 ] =   iMA ( Symbol () , TF , 34 , 0 , MODE_EMA , PRICE_CLOSE , 0 ) ;
 ma [ iTF ][ 21 ] =   iMA ( Symbol () , TF , 21 , 0 , MODE_EMA , PRICE_CLOSE , 0 ) ;
 ma [ iTF ][ 13 ] =   iMA ( Symbol () , TF , 13 , 0 , MODE_EMA , PRICE_CLOSE , 0 ) ;
 ma [ iTF ][ 8 ] =   iMA ( Symbol () , TF , 8 , 0 , MODE_EMA , PRICE_CLOSE , 0 ) ;
 ma [ iTF ][ 5 ] =   iMA ( Symbol () , TF , 5 , 0 , MODE_EMA , PRICE_CLOSE , 0 ) ;
 ma [ iTF ][ 3 ] =   iMA ( Symbol () , TF , 3 , 0 , MODE_EMA , PRICE_CLOSE , 0 ) ;
 iFW = 1 ;
 }
}
void    PutFile ( )
{
 string strPut ;
 strPut = TimeToStr ( SaveTime [ 1 ] , TIME_DATE | TIME_MINUTES | TIME_SECONDS ) ;
 for ( int iiTF = 1 ; iiTF <= 6 ; iiTF ++ )
 {
   for ( int jM = 0 ; jM <= 6 ; jM ++ )
   {
       int nMA = indx [ jM ] ;
       int nMA_N = indx [ jM + 1 ] ;
       double nn = NormalizeDouble ( ( ma [ iiTF ][ nMA ] - ma [ iiTF ][ nMA_N ]) / Point , 0 ) ;
       string sss = DoubleToStr ( nn , 0 ) ;
       if ( nn >= 0 )
         sss = " " + sss ;
       if ( MathAbs ( nn )   <= 9 )
         sss = " " + sss ;
       
         
       // strPut = strPut+DoubleToStr( ma[iiTF][ nMA] , 4)+"|";
       strPut = strPut + " | " + sss ;
   }
 }
 FileWrite ( hWR , strPut ) ;
}
 
Loknar :
Patlama :

Bu nasıl kullanılır? Grafiğe bir yazı koydum, yığınlarca sayı birbirine karşılık gelmeye başladı... Bu sayılar ne diyor?

Neden? GA için kendi ağ eğitim algoritmama sahip olduğum için kodu anlamakta bile zorlandım - bunun üzerinde zaman harcamanız, girdileri nereye iteceğinizi, bu çıktıdan nasıl geri çekileceğinizi ve ne zaman alım-satım yapacağınızı anlamanız gerekiyor. Bütün bunlar mümkün mü? Yoksa kâse koşusu için mi buradasın?

Başlangıçta, sinir ağları fikrini çok seviyorum. Sadece 1000 puana sahip olan ağın bir şekilde bir noktaya yaklaşacağını biliyorum ... ve otomatik ticaretin ağ algoritmasına dayalı bir danışmanla kazanıldığını biliyorum. Böyle bir ağın kendi versiyonumu oluşturma planlarım var, ancak bu aşamada ne mql4'te ne de sinir ağlarında hiçbir şey anlamıyorum.

Bu nedenle mql4 öğrenmek için önce Expert Advisor'a stratejimi yazacağım. O zaman ağlar hakkında düşünecekler.

Varyantınız ilgi için indirildi. İlk defa böyle şeylerle karşılaşıyorum. Bu ağların nasıl çalıştığını anlamıyorum. Bu nedenle, bu tür sorular ortaya çıktı.

Bu arada, sizin görüşünüze göre, benzer konulardaki herhangi bir bağlantıya memnuniyetle katılacağım!

 

BU AĞ

YuraZ :

programı biraz değiştirdi!

ekrandaki çıktı biçimini biraz değiştirdi

şimdi SCRIPT, çıktı verilerini yüksek doğrulukla hesaplamak için borçlarını düşünüyor

program, elbette, evrensel değil, zaten ortaya çıktı, ancak girdi ve çıktı sayısı için keskinleştirildi

ama gizli katmanın boyutu! öğrenme sürecinde seçilen



sonraki sürüm - Girdi ve çıktı sayısı açısından esnek hale getirmeye çalışacağım

ve işe yararsa, genetik bir algoritma ile ekleyeceğim

amacı birçok hata ile NEURONS öldürmek olacak

ve az sayıda hatayla nöronların çoğaltılması!

yani, aslında, en az sayıda hataya sahip olan nöronların dizisinde arama yapmak ve onlardan değiştirilecek yavrular yaratmak.

kötü performans gösteren nöronlar...


1 Öğrenme oranı şu anda düşük

2. değişiklik - gizli 1. seviyenin nöron sayısı mantıksız rastgele

3 giriş ve çıkış veri örneğinde yüksek doğruluk elde ederken eğitimi durdurun


AYNI IZGARA, ancak Microsoft Visual C++ 6.0 ile yazılmış

işin hızı MQL4'tekinden çok daha yüksek

algoritma değişmedi, MQL4'ten C++'a aktarım, nesneler - sınıflar kullanılmadan mümkün olduğunca doğrudan

Dosyalar:
yzpnn.zip  63 kb
 

Başka bir seçenek ama MQL'de


sadece M1 üzerinde çalışmaya çalışmak mevcut trend yönünü gösteriyor

3'ünde çıkın, teorik olarak, başlangıçta antrenman yapamazsınız - ancak hemen hazır Ağırlıkları alın - önceden antrenman yapın


---

Normalleştirilmiş hareket farkının beslendiği 9 giriş

---

çıkış-1 çıkış-2 çıkış-3 çıkış

0,9 0,01 0,01 yukarı trend

0,01 0,9 0,01 düz

0,01 0,01 0,9 eğilim Aşağı



---

3-4 zaman dilimi ekleyip hemen hesaplamayı planlıyorum!

PNN, ağırlıkları zaten yaptığınızda çok hızlı çalışır

---


test kodu deneysel - lütfen tekme atmayın






Dosyalar: