FİKİR DEĞİŞİMİ - sayfa 9

 
FION :
Uzmanlar aynı anda çalışabilir - her biri kendi büyüsüyle, piyasa durumunun tanınması ve buna bağlı olarak yeniden yapılandırma her uzmanda olmalıdır, bu koşul karşılanmazsa, piyasa durumu değiştiğinde kayıplar kaçınılmazdır, çünkü hedefler ve Buna göre duraklar düz ve trend olarak farklı olmalıdır. Ek olarak, ara durumları dikkate almak gerekir - küçük bir daire veya düşük aktivitede "kayma". Prensip olarak, Kârlı Uzman Danışmanlar grubu, Kârsız Uzman Danışmanların pozisyonlarının kilitlenmesi nedeniyle en iyi sonuçları göstermelidir.

Hemen hemen herkesin kendi uygulaması vardır. Ancak birçoğunun böcekler üzerinde çalışması yok. Kesinlikle bende yok, sadece onlara sahip olmamaya çalışıyorum. Standart bir şey yaparsanız, bunun sağlanması gerekir. Ayrıca sihirbaza bir sembol () eklerdim, ancak bu gereksiz olabilir. Teorik olarak, her şey olabilse de, tek biletli bir sipariş tekrarlanamaz.
 

Tabiiki. Bu tam olarak kodda yaptığım şey. Magic _n'yi harici parametrelerde de ayarladık ve her sürüm kendi sihrine sahip kendi algoritmasına göre çalışacak.

 

Trende göre. ProtoType-IV Expert Advisor, son dört ekstremum temelinde bir trend belirlemek için çok para birimi olan bir Expert Advisor için bir örnek sağlar. Bu kod parçasını titizlikle inceledim ve "zararlı" bir şekilde seçtim ve şimdi herhangi bir Uzman Danışmana eklenebilir. Eğer gerekliyse. Harici parametrelerde ayarlanmışsa

 extern int     PeriodWPR = 8 ;
extern double  CriteriaWPR = 25 ;
extern int     ATRPeriod = 40 ; // период ATR для индикатора 
extern double  kATR = 0.5 ;
//-------------------------------------
int  LastUpArray [ 13 , 7 ] ;
int  PreLastUpArray [ 13 , 7 ] ;
int  LastDownArray [ 13 , 7 ] ;
int  PreLastDownArray [ 13 , 7 ] ;

İşte "belirleyicinin" kendisi:

 /-------------------------------------------------------------------+
//| определение тренда по четырем последним экстремумам              |
//+------------------------------------------------------------------+
int TrendByWPR ( )
  {
//----
   int res = 0 ;
   int curPos , LastUpPos , PreLastUpPos , LastDownPos , PreLastDownPos , LastPeak , newPos ;
   bool FindUp = true , FindDown = true , SearchCompleted = false ;
   double CurWPR = iWPR ( NULL , 0 , PeriodWPR , 0 ) ;
//----
   //=======  определим - где мы находимся в данный момент
   if ( CurWPR <= CriteriaWPR - 100 )
      {
      FindDown = false ;
      LastPeak = 0 ;
      }   
   if ( CurWPR >=- CriteriaWPR )
      {
      FindUp = false ;
      LastPeak = 0 ;
      }   
   // ================   начианем поиск пичков-донышков
   while ( ! SearchCompleted && curPos < Bars )
      {
      if ( iWPR ( NULL , 0 , PeriodWPR , curPos ) >=- CriteriaWPR && LastPeak < 0 )
         {
         FindUp = false ;
         LastPeak = curPos ;
         curPos ++;
         continue ;
         }
         
      if ( iWPR ( NULL , 0 , PeriodWPR , curPos ) <= CriteriaWPR - 100 && LastPeak < 0 )
         {
         FindDown = false ;
         LastPeak = curPos ;
         curPos ++;
         continue ;
         }
         
      if ( iWPR ( NULL , 0 , PeriodWPR , curPos ) >=- CriteriaWPR && FindUp )
         { //искали верхушку и нашли
         newPos = curPos ; 
         while ( iWPR ( NULL , 0 , PeriodWPR , curPos ) > CriteriaWPR - 100 && curPos < Bars )
            { // теперь нужно найти донышко, чтобы между ними найти точный пичок
            curPos ++;
            }
         if ( LastUpPos == 0 ) 
            {
            LastUpPos = Highest ( NULL , 0 , MODE_HIGH , curPos - LastPeak , LastPeak ) ;   
            LastPeak = LastUpPos ;
            }
         else 
            {
            PreLastUpPos = Highest ( NULL , 0 , MODE_HIGH , curPos - LastPeak , LastPeak ) ;
            LastPeak = PreLastUpPos ;
            }
         curPos = newPos ;
         FindUp = false ;
         FindDown = true ;
         curPos ++;
         continue ;
         } //==============
 
      if ( iWPR ( NULL , 0 , PeriodWPR , curPos ) <= CriteriaWPR - 100 && FindDown )
         {
         newPos = curPos ; 
         while ( iWPR ( NULL , 0 , PeriodWPR , curPos ) <- CriteriaWPR && curPos < Bars )
            {
            curPos ++;
            }
         if ( LastDownPos == 0 ) 
            {
            LastDownPos = Lowest ( NULL , 0 , MODE_LOW , curPos - LastPeak , LastPeak ) ;
            LastPeak = LastDownPos ;
            }   
         else 
            {
            PreLastDownPos = Lowest ( NULL , 0 , MODE_LOW , curPos - LastPeak , LastPeak ) ;
            LastPeak = PreLastDownPos ;
            }
         curPos = newPos ;
         FindDown = false ;
         FindUp = true ;
         curPos ++;
         continue ;
         }
      if ( PreLastDownPos != 0 && PreLastUpPos != 0 ) SearchCompleted = true ;
      curPos ++;
      }
  /* if (Symbol()==StringSymbol && Period()==PeiodMinute)
      {
      Comment("LastUpPos=",LastUpPos,"  PreLastUpPos",PreLastUpPos,"  
 LastDownPos=",LastDownPos,"  PreLastDownPos=",PreLastDownPos,
" Время ",TimeToStr(CurTime()));
      SetUpArrows(LastUpPos,PreLastUpPos,LastDownPos,PreLastDownPos);*/
   LastUpArray [ NULL , 0 ] = LastUpPos ;   
   PreLastUpArray [ NULL , 0 ] = PreLastUpPos ;   
   LastDownArray [ NULL , 0 ] = LastDownPos ;   
   PreLastDownArray [ NULL , 0 ] = PreLastDownPos ;   
  if ( High [ LastUpPos ] - High [ PreLastUpPos ] >= kATR * iATR ( NULL , 0 , ATRPeriod , LastUpPos )
&& Low [ LastDownPos ] > Low [ PreLastDownPos ]) res = 1 ;     
  if ( Low [ PreLastDownPos ] - Low [ LastDownPos ] >= kATR * iATR ( NULL , 0 , ATRPeriod , LastDownPos )
&& High [ PreLastUpPos ] > High [ LastUpPos ]) res =- 1 ;    
   
   return ( res ) ;
  }

Köşedeki grafik, = 0 veya =1 veya=-1 işlevini gösterir.

 
Bence, lineer regresyon kullanarak trendi belirlemek daha uygun, standart MT-4 kitindeki lineer regresyon komut dosyası harika, buna dayalı bir gösterge yapmak istiyorum, belki birileri kaynağı nereden alacağını biliyor? Bilinen tüm uygulamalar, fiyat değişikliklerinin dinamiklerinde iyi çalışmıyor. Ve yeni bir çubuk göründüğünde yeniden hesaplama ile 1 ila N çubuk arasında belirli bir uzunlukta bir kanala ihtiyacınız var ve tampona uzunluk başına pip cinsinden genişliğini ve pip cinsinden eğimi verme yeteneği. Ve belirli bir sapma ile aynı standart sapma kanalını yapmak güzel olurdu. Sıfırdan çizmeye başlayabilirsiniz, ancak birisi MT'den kaynağa sahipse, çok daha kolay olurdu.
 

Ancak, kodu yalnızca eğilimi belirlemek için yayınlamadım. Başka bir fikir geldi ... (biraz sonra açıklayacağım)

Ve başlangıç için gösterge şu olabilir:

Grafikte iPeriod=20, MASoot=20

Çalışmalarına girmedim. Ama görsel modda koro görülebilir - nasıl yerine getirir ...

Dosyalar:
 
Teşekkürler Leonid, ama dönerken düzgün çalışmıyor, uzun zaman önce denedim. İşte iyi bir gösterge, ancak ne kadar düşük olduğuna göre çalışıyor, fikir aynı ama doğrusal regresyona dayanıyor.
Dosyalar:
 
FION :
Bence, lineer regresyon kullanarak trendi belirlemek daha uygun, standart MT-4 kitindeki lineer regresyon komut dosyası harika, buna dayalı bir gösterge yapmak istiyorum, belki birileri kaynağı nereden alacağını biliyor? Bilinen tüm uygulamalar, fiyat değişikliklerinin dinamiklerinde iyi çalışmıyor. Ve yeni bir çubuk göründüğünde yeniden hesaplama ile 1 ila N çubuk arasında belirli bir uzunlukta bir kanala ihtiyacınız var ve tampona uzunluk başına pip cinsinden genişliğini ve pip cinsinden eğimi verme yeteneği. Ve belirli bir sapma ile aynı standart sapma kanalını yapmak güzel olurdu. Sıfırdan çizmeye başlayabilirsiniz, ancak birisi MT'den kaynağa sahipse, çok daha kolay olurdu.


Zaten bir yerde yayınladım. Yeni bir sürüm yayınlayabilirim. Bir hata düzeltildi.

Ve işte gösterge.

Ekranda çubuk sayısı gösterilir.3 sigma görüntülenir. Ve fiyat bir standart sapma içindeyse, her şey kabul edilebilir sınırlar içinde olduğu için yeniden hesaplama yapılmaz. Kırıldığında, yeniden hesaplama olacaktır.

Dosyalar:
 

Vinin, Kanalınız çok iyi ve doğru yapılandırılmış. Teşekkür ederim. Daire için filtre hakkında bir fikir paylaşacağım. Hepimiz hatırlıyoruz. Reshetov, algılayıcılarıyla birlikte. Temel olarak, bir algılayıcı doğrusal bir filtredir. Bir algılayıcı ile düz filtrelemeyi denemek istiyorum. Farklı uzunluklardaki 2 lineer regresyon kanalının genişliğini ve eğimini, Bollinger genişliğini ve fiyat değişim oranını girin. Burada optimizasyon kriteri olarak ne alınması gerektiğini düşünüyorum. Yüzde 75 hedefiyle Bollinger sınırlarından içeriye doğru kopmak mümkün. Genişlik.

 
FION :

Vinin, Kanalınız çok iyi ve doğru yapılandırılmış. Teşekkür ederim. Daire için filtre hakkında bir fikir paylaşacağım. Hepimiz hatırlıyoruz. Reshetov, algılayıcılarıyla birlikte. Temel olarak, bir algılayıcı doğrusal bir filtredir. Bir algılayıcı ile düz filtrelemeyi denemek istiyorum. Farklı uzunluklardaki 2 lineer regresyon kanalının genişliğini ve eğimini, Bollinger genişliğini ve fiyat değişim oranını girin. Burada optimizasyon kriteri olarak ne alınması gerektiğini düşünüyorum. Yüzde 75 hedefiyle Bollinger sınırlarından içeriye doğru kopmak mümkün. Genişlik.


Reshetovsky algılayıcı çalışmayacak. En az 4-5 nörondan bir Kohonen tabakası yapmak gerekir. Ancak tek bir sorun olacak - tüm değerler aynı sırada olmalıdır.
 
Yeni bir konu oluşturmak istiyorum, Mumların sinirsel analizi. Tüm başarılarımı ortaya koyacağım, Kişi görevle baş edemez. Üstelik (benimki) hataların çoğunu zaten biliyorum.