KimIV'ten faydalı özellikler - sayfa 46

 
SK. писал (а) >>

Bunun hakkında konuşuyorum. Genel olarak konuşursak, her zaman değişen mevcut kısıtlamaları dikkate almak gerekir.

Her türlü kısıtlamayı analiz eden bir fonksiyon var mı?

Modifiye ile aynı.

--

(16 işlevim var - her mükemmel sipariş için 3 (OP,SL,TP) ve her pazar için 2 (SL,TP),

ve ardından birkaç izin kombinasyonunu daha analiz edin).

evet, ayrıca olası tüm kısıtlamaları kontrol eden sipariş vermek için ayrı bir işlevim ve değişiklik için ayrı (birincisine kısmen benzer) bir işlevim var. Kodu vermeyeceğim - yalnızca benim tarafımdan ihtiyaç duyulan çok fazla "sol" çan ve ıslık var, bu - ah. :-) ama genel olarak - gerçek hayatta böyle Uzman Danışmanlar olmadan ticaret yapmak zor. :-)

 
Shu писал (а) >>

evet, ayrıca olası tüm kısıtlamaları kontrol eden sipariş vermek için ayrı bir işlevim ve değişiklik için ayrı (birincisine kısmen benzer) bir işlevim var. Kodu vermeyeceğim - yalnızca benim tarafımdan ihtiyaç duyulan çok fazla "sol" çan ve ıslık var, bu - ah. :-) ama genel olarak - gerçek hayatta böyle bir danışman ticareti olmadan zor. :-)

Aslında kendimi kontrol etmek istedim - her şeyi hesaba kattım mı? Bazı durumlarda, kontrol etmezseniz, bir dizi başarısızlıkla karşılaşabilirsiniz (bazen danışmanların çalışmalarını yasaklama ihtimaliyle).

Çeklerimi kısaca listeleyeceğim.

1. Seviyeyi Durdur. Örneğin, SL BuyStop'u değiştirirken.

Bir mesafe kontrolünden daha fazlasına ihtiyacımız var. StopLevel ile mevcut pozisyonu ve stop emrinin hareket yönünü analiz etmek gerekir.

SL, StopLevel koridorunun dışındaysa, yakına hareket edebilir veya süresiz olarak geri itebilirsiniz.

SL koridordaysa, yukarı hareket reddedilir. Aşağı doğru hareket kabul edilir, ancak StopLevel dikkate alınarak: mesafe koridoru içindeki değişiklik mesafesi 3 st ve koridor 30 st ise, yürütme için fiilen kabul edilen değer StopLevel koridorunun sınırı tarafından belirlenir.

2.Dondurma Seviyesi.

3. StopLevel ve TICKSIZE arasındaki ilişki. Sipariş tüm koridorların dışında olabilir, ancak TICKSIZE - ardından Khan'ın katı olamaz. Modifi yönünde yuvarlamanız gerekir. "Para dışı" için kritik.

4. Çok. Minloth +/- minshaglota. Kısmi ve karşı kapatmanın da minlot ile sınırlı olduğunu göz önünde bulundurun (bence bu mantıksız olsa da, öyle).

Şahsi kontrollerden sonra her bir çekin olumlu sonuçlanması halinde (yasaksız) emir kamuya duyurulur.

 

Tamamen yayınlanmış işlev kitaplıkları:

b-Graphics.rar - grafik nesnelerle çalışın.

b-Indicators.rar - göstergelerle çalışın.

 

ArrayLR() işlevi.

Bu işlev, bir dizi doğrusal regresyon değeri üretir. İşlev, aşağıdaki gerekli parametreleri kabul eder:

  • x - sayısal dizi değerleri dizisi. Bu bir giriş parametresidir. Bu dizi, işlevi çağırmadan önce değerleri içermelidir.
  • y , bir doğrusal regresyon değerleri dizisidir. Bu bir çıktı parametresidir, yani fonksiyon tamamlandıktan sonra dizi doldurulacaktır.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 20.05.2008                                                     |
//|  Описание : Формирует массив значений линейной регрессии.                  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    x - массив значений числового ряда                                      |
//|    y - массив значений линейной регрессии                                  |
//+----------------------------------------------------------------------------+
void ArrayLR ( double & x [] , double & y []) {
   double a , b , c , sx = 0 , sx2 = 0 , sxy = 0 , sy = 0 ;
   int      i , n = ArraySize ( x ) ;

   if ( n > 1 ) {
     for ( i = 0 ; i < n ; i ++ ) {
       sx += i + 1 ;
       sy += x [ i ] ;
       sxy += ( i + 1 ) * x [ i ] ;
       sx2 += ( i + 1 ) * ( i + 1 ) ;
     }
     a = sx * sy - n * sxy ;
     c = sx * sx - n * sx2 ;
     if ( c != 0 ) a = a / c ; else a = 0 ;
     b = ( sy - a * sx ) / n ;
     ArrayResize ( y , n ) ;
     for ( i = 0 ; i < n ; i ++ ) y [ i ] = a * ( i + 1 ) + b ;
   } else Print ( " ArrayLR(): Недостаточное количество элементов ряда! n= " , n ) ;
}
 

ArrayLR() işlevinin kullanımına bir örnek.

Önceki 30 bar için lineer regresyonun fiyat seviyelerini not edin.

 #define r 30
double x [ r ] , y [] ;
for ( int i = 0 ; i < r ; i ++ ) x [ i ] = Close [ i + 1 ] ;
ArrayLR ( x , y ) ;
for ( i = 0 ; i < r ; i ++ ) SetArrow ( 170 , Red , " arr " + i , Time [ i + 1 ] , y [ i ]) ; 

PS Ekli, ArrayLR() işlevini test etmek için bir komut dosyasıdır.

Dosyalar:
 
KimIV писал (а) >>

Tamamen yayınlanmış işlev kitaplıkları:

b-Graphics.rar - grafik nesnelerle çalışın.

b-Indicators.rar - göstergelerle çalışın.

Puan. İyi! Sayesinde!

 
Parabellum писал (а) >>

Igor, birkaç mumu bir araya getirebilecek iyi bir gösterge var. Ama sadece saatlik grafikte çalışıyor. Evrensel hale getirilebilir mi?

Teşekkür ederim.

?

 
Parabellum писал (а) >>

?

ah... üzgünüm...

Böyle bir gösterge zaten yazılmış, kim olduğunu ve nerede gördüğümü hatırlamıyorum ... Kendin bulacağını ya da birisinin link vereceğini düşündüm ...

 

ArrayLR() işlevinde kesin olmayan bir işlem var.

1. Barların geçici konumlarını dikkate almaz. Çubukları atlarken, düzgün çalışmıyor.

2. Kullanılan katsayı hesaplama algoritmasının yuvarlama hatası biriktirme dezavantajı vardır, bkz .

3. Bu eksiklikleri olmayan bir algoritma öneriyorum

4. Aramadan önce değiştirin X[i]=Zaman[i+1]; üzerinde X[i]=i+1; algoritma benzerdir, ancak hata birikimi yoktur.

5. Barlar sadece hafta sonları atlanmaz :-(((

İşte seçeneğim

 //+----------------------------------------------------------------------------+
//|  Автор    : Сергей Привалов aka Prival,  Skype: privalov-sv                |
//+----------------------------------------------------------------------------+
//|  Версия   : 10.09.2008                                                     |
//|  Описание : Формирует массив значений линейной регрессии y(x)=A*x+B.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    X    - массив значений числового ряда, ось X                            |
//|    Y    - массив значений числового ряда, ось Y                            |
//+----------------------------------------------------------------------------+

void Array_LR ( double & X [] , double & Y [])
{
       double mo_X = 0 , mo_Y = 0 , var_0 = 0 , var_1 = 0 ;
       int      i , N = ArraySize ( X ) ;
       double A , B ;
     
       if ( N > 1 )    {
         for ( i = 0 ; i < N ; i ++ ) {
             mo_X += X [ i ] ;
           mo_Y += Y [ i ] ;
       }
       mo_X /= N ;
       mo_Y /= N ;
        
       for ( i = 0 ; i < N ; i ++ )    {
         var_0 += ( X [ i ] - mo_X ) * ( Y [ i ] - mo_Y ) ;
         var_1 += ( X [ i ] - mo_X ) * ( X [ i ] - mo_X ) ;
       }
       // значение коэффициента A
       if ( var_1 != 0 )    A = var_0 / var_1 ; else A = 0 ;
       // значение коэффициента B
       B = mo_Y - A * mo_X ;
       ArrayResize ( Y , N ) ;
     for ( i = 0 ; i < N ; i ++ ) Y [ i ] = A * X [ i ] + B ;
     } else Print ( " ArrayLR(): Недостаточное количество элементов ряда! n= " , N ) ;
    
}

işte çizim

İş örneği

 #define r 280
void start () {
   double X [ r ] , Y [ r ] ;
   for ( int i = 0 ; i < r ; i ++ )    {
     Y [ i ] = Close [ i + 1 ] ;
     X [ i ] = Time [ i + 1 ] ;
   }
   Array_LR ( X , Y ) ;
   for ( i = 0 ; i < r ; i ++ ) { SetArrow ( 170 , Blue , " arr " + i , X [ i ] , Y [ i ])  }

doğrulama için ekli komut dosyası

Dosyalar:
 
Prival писал (а) >>
İşte seçeneğim

tamam Serezha! Bu fonksiyonun iki versiyonu olsun.

Sürümüm, yerleşik OBJ_REGRESSION grafik nesnesiyle bire bir olduğu için iyidir. Birinin bu nesneden fiyat alması gerekiyorsa, o zaman benim işlevim bu konuda yardımcı olacaktır, ama sizinki - ne yazık ki ... Ama başka bir şey için kullanılabilir ... Teşekkürler!

Neden: