Sinir ağının girdilerini beslemek için bir dizi gösterge arayın. Tartışma. Sonuç değerlendirme aracı.

 

Forumun tüm katılımcılarına ve ziyaretçilerine selamlar.


İlgilenen herkesi, girdileri sinir ağına göndermek için en uygun göstergeleri tartışmaya ve aramaya davet etmek istiyorum.

Programımdaki sinir ağının karlılığı bir değerlendirme aracı olarak hizmet edebilir, ayrıca yüksüz eğitimli bir sinir ağı ile bir MQL4 Expert Advisor yükleyebilirim. Rauzmeet, makul sınırlar içinde.


Her katmanda rastgele sayıda katman ve nöron içeren kendi yazdığım (Java'da) bir algılayıcım var, onu JGAP kitaplığından (http://jgap.sourceforge.net/) bir genetik algoritma ile eğitiyorum.

İlk katmanda, nöron sayısı giriş sayısına eşittir, ikinci katmanda - keyfi, 3. katmanda - 1 nöron. Sinir ağı ticaret sinyalleri üretir (Sinir ağı çıkışı >0.5 - satın al, Sinir ağı çıkışı<-0.5 - sat). sinyaller, sinir ağından gelen bir sinyaldeki pozisyonu tersine çeviren (veya açık pozisyon yoksa piyasaya giren) kendi kendine yazılan bir ticaret test cihazı tarafından işlenir. Genetik algoritmanın amaç fonksiyonu nihai kârdır. Bana öyle geliyor ki böyle bir yaklaşım, olası tüm hataları en aza indirmenize ve öğrenmeyi gerçek ticarete mümkün olduğunca yaklaştırmanıza izin veriyor. Eğitimli ağı MQL4 Expert Advisor'a aktarıyorum ve MT4 strateji test cihazı üzerindeki çalışmayı kontrol ediyorum. MT4 indikatöründe sinir ağı için girdileri oluşturuyorum ve bir dosyaya yüklüyorum.Program indikatörü ve danışmanı oluşturuyor ve dosyalara yazıyor (bu sayede daha az karışıklık ve daha az hata oluyor).

gözlemlerime göre 4 katmanlı ağlar 3 katmanlı ağlardan daha fazla (genellikle daha az) kazanç sağlamaz, ancak eğitimleri daha uzun sürer.
8-10-1 ağını Core2 Quadro 2.3 üzerinde 4 gün boyunca eğittim. Farklı başlangıç popülasyonlarına sahip 10 paralel akış, "kimin daha fazla kârı var" birbirleriyle rekabet eder. 4 günde, popülasyonda 200 kromozom ile yaklaşık 4000 nesil geçti. Maksimum kâr ilk 2000 nesilde öğrenildi, ayrıca kâr artmadı. Kârdaki en büyük artış ilk 100 nesilde oldu.

MT4 Strategy Tester'da bu ağın sonuçlarına baktım. Ağın neredeyse hiçbir zaman +-0.5 eşiğine ulaşmadığı ve ticaret sinyalinin çalışmadığı bulundu. nedenini anlamadım. MQL4'e dışa aktarmanın doğruluğunu kontrol ettim (Java ve MQL4'te programdaki girişlerin aynı değerleriyle, ağ aynı değerleri veriyor. Belki de gelen akışın tamamını göndermek gerekliydi, birkaç rastgele değer değil) ). Eşiği 0,4'e düşürdüm ve işe yaramış gibi görünüyordu... Ayrıca, EA'nın pozisyonu 1 çalıştırmada tersine çeviremeyeceğini keşfettim... Çubuk kapandığında ve fiyat bir sonraki çubuktan önce çıkmayı başardığında EA'm çalışıyor . ama bu da o kadar önemli değil... Eğitim döneminde (1-08-09 - 1-10-09 arası ders veriyorum) MT4'teki kâr test cihazımdan daha azdı, MT4'teki test döneminde (1'den 10-09 09 - 1-11-09), ağ kârlıydı. Hangi anlarda zarar eden girişlerin gerçekleştiğine baktım ve sinir ağına giren verilerin yeterli bilgi içermediği izlenimini edindim...

Sinir ağının girişine başvurdum: (k=100)

a [ 0 ] = ( iMA ( NULL , 0 , 13 , 0 , MODE_EMA , PRICE_CLOSE , i ) - Close [ i ] ) * k ;
a [ 1 ] = ( iMA ( NULL , 0 , 21 , 0 , MODE_EMA , PRICE_CLOSE , i ) - Close [ i ] ) * k
a [ 2 ] = ( iMA ( NULL , 0 , 34 , 0 , MODE_EMA , PRICE_CLOSE , i ) - Close [ i ] ) * k
a [ 3 ] = ( iMA ( NULL , 0 , 55 , 0 , MODE_EMA , PRICE_CLOSE , i ) - Close [ i ] ) * k
a [ 4 ] = ( iMA ( NULL , 0 , 89 , 0 , MODE_EMA , PRICE_CLOSE , i ) - Close [ i ] ) * k
a [ 5 ] = ( iMA ( NULL , 0 , 144 , 0 , MODE_EMA , PRICE_CLOSE , i ) - Close [ i ] ) * k * 0.9 ;
a [ 6 ] = ( iMA ( NULL , 0 , 233 , 0 , MODE_EMA , PRICE_CLOSE , i ) - Close [ i ] ) * k * 0.8 ;
a [ 7 ] = ( iMA ( NULL , 0 , 377 , 0 , MODE_EMA , PRICE_CLOSE , i ) - Close [ i ] ) * k * 0.6 ;
Göstergelerin nasıl çalıştığını hayal edebiliyorum, ancak onları ve piyasayı, piyasanın durumunu yansıtacak minimum sayıda göstergeyi bağımsız olarak seçecek kadar anlamıyorum...

Forumda aramaya başladım ve buldum (maalesef fikri aldığım yazının yazarını hatırlayamadım):

a [ 0 ] = ( iMA ( NULL , 0 , 3 , 0 , MODE_EMA , PRICE_CLOSE , i ) - iMA ( NULL , 0 , 5 , 0 , MODE_EMA , PRICE_CLOSE , i ) ) * 200 ;
a [ 1 ] = ( iMA ( NULL , 0 , 5 , 0 , MODE_EMA , PRICE_CLOSE , i ) - iMA ( NULL , 0 , 8 , 0 , MODE_EMA , PRICE_CLOSE , i ) ) * 200 ;
a [ 2 ] = ( iMA ( NULL , 0 , 8 , 0 , MODE_EMA , PRICE_CLOSE , i ) - iMA ( NULL , 0 , 13 , 0 , MODE_EMA , PRICE_CLOSE , i ) ) * 200 ;
a [ 3 ] = ( iMA ( NULL , 0 , 13 , 0 , MODE_EMA , PRICE_CLOSE , i ) - iMA ( NULL , 0 , 21 , 0 , MODE_EMA , PRICE_CLOSE , i ) ) * 150 ;
a [ 4 ] = ( iMA ( NULL , 0 , 21 , 0 , MODE_EMA , PRICE_CLOSE , i ) - iMA ( NULL , 0 , 34 , 0 , MODE_EMA , PRICE_CLOSE , i ) ) * 150 ;
a [ 5 ] = ( iMA ( NULL , 0 , 34 , 0 , MODE_EMA , PRICE_CLOSE , i ) - iMA ( NULL , 0 , 55 , 0 , MODE_EMA , PRICE_CLOSE , i ) ) * 150 ;
a [ 6 ] = ( iMA ( NULL , 0 , 55 , 0 , MODE_EMA , PRICE_CLOSE , i ) - iMA ( NULL , 0 , 89 , 0 , MODE_EMA , PRICE_CLOSE , i ) ) * 140 ;
a [ 7 ] = ( iMA ( NULL , 0 , 89 , 0 , MODE_EMA , PRICE_CLOSE , i ) - iMA ( NULL , 0 , 144 , 0 , MODE_EMA , PRICE_CLOSE , i ) ) * 130 ;
a [ 8 ] = ( iMA ( NULL , 0 , 144 , 0 , MODE_EMA , PRICE_CLOSE , i ) - iMA ( NULL , 0 , 233 , 0 , MODE_EMA , PRICE_CLOSE , i ) ) * 120 ;
1-08-09'dan 1-10-09'a kadar 10 akışta, 200 nesilde, nüfus büyüklüğü 200'de öğretildi (java test cihazım sonuçları veriyor):
net 9-10-1 : kar 10521
net 9-20-1 : kar 10434
ağ 9-30-1 : kar 10361
ağ 9-50-1 : kar 10059
sonuç iyi, ancak önceki seçeneklerle daha iyi gibi görünüyordu ... önceki girdilerle koymak gerekecek (geçmiş eğitimlerin sonuçlarını kaydetmedim)

-1 ile +1 aralığındaki değerleri getirmek için ek faktörlere ihtiyaç vardır


Yazılanları okuduktan sonra, eğitilmiş sinir ağını Expert Advisor'a aktarırken olası bir hata düşündüm, tekrar test etmem gerekecek...

PS Şimdi keyfi bir yapıya sahip tekrarlayan bir sinir ağı yazıyorum (anladığım kadarıyla, tekrarlayan bir sinir ağı sadece değeri değil, aynı zamanda eğim açısını da hesaba katıyor).

 

Sorun sizinkine benzer. Yaklaşım farklıdır.

Benden bir genetikçi, bir mühendisten bile daha kötü, ama ben kabaca özü anlıyorum.

Birkaç soruma izin verin, puanı en üst düzeye çıkarmanın amaç işlevi IMHO'nun en iyi seçeneği değil. Yukarıdaki örnekten doğru anladıysam, belirli bir sistem grubunu, sizin durumunuzda 9'u sıralayacaksınız, peki, hatta en üstte bile, toplamda en az bir tane olacak şekilde kâr durdurma + daha fazla fanteziyi optimize edeceksiniz. sistem (burada gösterge kullanılarak), en az yüzlerce, iki veya üç olası seçenekle çalışır. Kartların içindeki seçeneklere göre sıralarken genel olarak CCI veya RSI diyelim ki gözden kaçacağı ortaya çıkmayacak. Ardından, mevcut an için sihirli bir göstergemiz var. mov(20)-mov(10) > < 0 olsun. Olumlu durumun ne kadar süreceğini değerlendirme veya en azından tahmin etme.

 
iliarr >> :

Her katmanda rastgele sayıda katman ve nöron içeren kendi yazdığım (java'da) bir algılayıcım var, onu JGAP kitaplığından (http://jgap.sourceforge.net/) bir genetik algoritma ile eğitiyorum.

Eğitimi nasıl yürütüyorsunuz? Lütfen öğrenme algoritmasını tanımlayın.

Doğru hatırlıyorsam - JGap sadece gen için bir kütüphanedir. algoritma ve daha fazlası değil, Ulusal Meclis ile ilgili değil. Belki de soru, genomun nasıl oluştuğu ve uygunluk fonksiyonlarının doğru seçimidir.

 

Ağın ga yardımı ile eğitilmesinde bir çok tuzak var ki bunları çözebileceksiniz... En azından "Ağ, tıpkı eğitimde olduğu gibi ne kadar çalışacak?" sorusunun çözümü. -bana göre ha yardımıyla öğrenirken bu hiç de mümkün görünmüyor.

ns yardımıyla tahmin problemlerinin standart çözümüne geçmenizi öneririm.

 
rip >> :

Eğitimi nasıl yürütüyorsunuz? Lütfen öğrenme algoritmasını tanımlayın.

Doğru hatırlıyorsam - JGap sadece gen için bir kütüphanedir. algoritma ve daha fazlası değil, Ulusal Meclis ile ilgili değil. Belki de soru, genomun nasıl oluştuğu ve uygunluk fonksiyonlarının doğru seçimidir.

JGap, genetik algoritma uygulayan bir kütüphanedir. benim için bu, belirli bir uzunluktaki bir vektöre bağlı olan bir amaç fonksiyonu verilmesi gereken bir kara kutu. bu kütüphaneden gelen genetik algoritma, bu vektörün değerlerini amaç fonksiyonu maksimum olacak şekilde seçer. benim amaç fonksiyonum, sinir ağından gelen sinyalleri işleyerek ticaret yayıcısının geçmişi boyunca geçişten elde edilen karı verir. değerleri genetik algoritma tarafından seçilen vektör, sinir ağı nöronlarının ağırlıklarını belirler.

ıvandurak >> :

Sorun sizinkine benzer. Yaklaşım farklıdır.

Benden bir genetikçi, bir mühendisten bile daha kötü, ama ben kabaca özü anlıyorum.

Birkaç soruma izin verin, puanı en üst düzeye çıkarmanın amaç işlevi IMHO'nun en iyi seçeneği değil. Yukarıdaki örnekten doğru anladıysam, belirli bir sistem grubunu, sizin durumunuzda 9'u sıralayacaksınız, peki, hatta en üstte bile, toplamda en az bir tane olacak şekilde kâr durdurma + daha fazla fanteziyi optimize edeceksiniz. sistem (burada gösterge kullanılarak), en az yüzlerce, iki veya üç olası seçenekle çalışır. Kartların içindeki seçeneklere göre sıralarken genel olarak CCI veya RSI diyelim ki gözden kaçacağı ortaya çıkmayacak. Ardından, mevcut an için sihirli bir göstergemiz var. mov(20)-mov(10) > < 0 olsun. Olumlu durumun ne kadar süreceğini değerlendirme veya en azından tahmin etme.

ne yazık ki, numaralandırma yoluyla optimal göstergeleri aramak için bilgi işlem kaynaklarım yok (10 iş parçacığında 9-10-1 ağ, 200 nesil, 1-08-09 ile 1-10-09 arasındaki süre için nüfus büyüklüğü 200 sürer bir saatten fazla olmasına rağmen, nöronların ağırlık sayısı (genetik algoritmanın seçtiği vektörün uzunluğu) = 181).

Piyasadaki durumu yansıtan bir dizi göstergeye ihtiyacım var. göstergeler basit olmalı, tercihen standart MT4 (bir uygulama sorunu ve olası hatalar) bunlardan sadece 30 tanesi var, göstergelerin piyasanın nereye gittiği konusunda bilgi vermesinin bir amacı yok. fiyat dalgalanmalarından mümkün olduğunca fazla bilgi çekmeleri gerekir.


Burayı sevdim... Nasıl ve ne yazacağımı düşünüyorum, formüle ediyorum ve daha fazla anlayış var... forum ve sana teşekkürler ivandurak. :)

 
iliarr >> :

JGap, genetik algoritma uygulayan bir kütüphanedir. benim için bu, belirli bir uzunluktaki bir vektöre bağlı olan bir amaç fonksiyonu verilmesi gereken bir kara kutu. bu kütüphaneden gelen genetik algoritma, bu vektörün değerlerini amaç fonksiyonu maksimum olacak şekilde seçer. benim amaç fonksiyonum, sinir ağından gelen sinyalleri işleyerek ticaret yayıcısının geçmişi boyunca geçişten elde edilen karı verir. değerleri genetik algoritma tarafından seçilen vektör, sinir ağı nöronlarının ağırlıklarını belirler.

İşte tam da bundan bahsediyorum...


Daha sonra JGap'e ileteceğiniz bir vektörü nasıl oluşturursunuz, bu sadece bir W değerleri vektörü mü yoksa W değerleri olarak kodlanmış mı?

Hedef işlevi nedir. Bir örnek verebilirim - E[i](t) = D[i](t) - Y[i](t) fonksiyonunu hedef fonksiyon olarak alırsak, burada E hatadır, D beklenen değerdir çıktıda , Y - X eğitim örneğini uygularken elde edilen değer, i - nöronun normu, t - çağ sayısı. Sonra NN tek tek öğrenir, E[i](t) = Sign(D[i](t) - Y[i](t))*(D[i](t) - Y[i] alırsak (t ))^2 bazı problemlerde sonuç çok daha iyi. Diyelim ki klasik dinamik sistemlerin (Lorentz, Henon, Rössler, ..) bir dizi yansıtıcı çekicisi oluşturursak, ağı bu tür verilere derinlemesine değil, ama yine de yaklaşmak için eğitebiliriz.


Döviz kurlarından oluşan seri ile denemedim :) çünkü bu davayı sonuçsuz buluyorum :)

 
Bu tasarımla, dezavantajlar olmadan neredeyse dikey eşitlik elde edebilirsiniz. Bir nöronda yeniden eğitim sorununu çözecek misiniz?
 
IlyaA >> :
Bu tasarımla, dezavantajlar olmadan neredeyse dikey eşitlik elde edebilirsiniz. Bir nöronda yeniden eğitim sorununu çözecek misiniz?

Ve fazla uydurma olmayabilir... Yazar test numunesi üzerinde hatanın grafiğini verirse, overfitting ile ne olduğunu hemen söylemek mümkün olacaktır.

 
rip >> :

Ve fazla uydurma olmayabilir... Yazar test numunesi üzerinde hatanın grafiğini verirse, overfitting ile ne olduğunu hemen söylemek mümkün olacaktır.


Kabul ediyorum. kara kutu ile çalışır. Yeniden eğitim çok olasıdır. Sayın iliarr, eğitim programını yayınlayabilirsiniz.
 
iliarr >> :.............

Makineleri boşuna kullanıyorsunuz. Ya da daha doğrusu, boşuna sadece hareketli ortalamaları kullanın. Bir dizi farklı gösterge türünü denemeyi deneyin, göstergelerin her birinin algoritmasının diğerlerinden kökten farklı olması istenir. Ardından web için daha fazla bilgi edinin.

Bir an daha.

NN sinyallerine dayalı bir ters ticaret sistemi kullanıyorsunuz. Bu kesinlikle standart hareketli ortalama uzmanıyla aynıdır. Daha iyi ve daha kötü değil.

NN yardımıyla SL ve TP'nin boyutunu belirlemenin bir yolunu ve açık pozisyonları korumanın yollarını arayın. Rastgele de açabilirsiniz.


statbars yazdı >>

Ağın ga yardımı ile eğitilmesinde bir çok tuzak var ki bunları çözebileceksiniz... En azından "Ağ, tıpkı eğitimde olduğu gibi ne kadar çalışacak?" sorusunun çözümü. -bana göre ha yardımıyla öğrenirken bu hiç de mümkün görünmüyor.

ns yardımıyla tahmin problemlerinin standart çözümüne geçmenizi öneririm.

GA sadece bir optimizasyon aracıdır (araba için bir tornavida). Minimum farkla, onu veya başka bir optimizasyon algoritmasını (tornavida) kullanabilirsiniz.

 

merhaba

NS hakkında bir şeyler öğrenmek her zaman ilginçti, ancak bu konuyla ilgili bir dizi literatür okumaya başlar başlamaz kafam kaynamaya başlıyor ve sonunda NS'nin ne olduğunu bile anlayamıyorum.

ne olduğunu basit bir örnekle (deyim yerindeyse) açıklar mısınız?

teşekkürler

Neden: