[UYARI, KONU KAPALI!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde. - sayfa 247

 
EVET. Ara diziler, ana dizilerle aynı şekilde yapılmalıdır. Seçenekler öneriyor gibiydi.
 
Swan >> :

yapamamak. ama kontrol etmekte fayda var)

tutarsızlık, dizilerin kayma olmadan kullanılmasından kaynaklanmaktadır.


Çok teşekkürler. Hilenin ne olduğunu linkinizden anladım. Dikkat! Beyler, durum şuydu ki, iMAONArray() altında BUFFERS kullandım. Ve arabellekler init() içinde başlatıldı. Görsel testler yaptığımda, Barların ilk boyutu küçüktü. Ve tüm diziler küçük boyuta başlatıldı!!! Başlatma boyutunu minimum 6000 öğeye çıkardım. Ve bu kadar! EA'nın görsel testi, göstergelerin hesaplanmasının doğruluğunu onayladı. Ha, iş. Şimdi çubukların gecikmesini kontrol etmeye devam ediyor. Acaba gösterge değerleri farklı olacak mı? Ama bunu pazartesi göreceğiz. Herhangi biri RAM'den nasıl tasarruf edileceğini önerebilir ve dizileri çok büyük yapmaz, ancak hesaplamanın yarım yıldan az sürmesi için - herhangi bir fikri ifade etmekten çekinmeyin, çünkü. hiçbir şey yapmayan yanılmaz.

Lütfen durumumu bazı SSS'lere ekleyin.


Sonunda kazanıldı!

Yeni özellik seçeneği:

 //-----------------------------------------------------------------------------
int init ( )                         
{
    SetIndexBuffer ( 0 , tsi ) ;                                 // Назначение массива буферу
    SetIndexBuffer ( 1 , ergodic ) ;                             // Назначение массива буферу
    SetIndexBuffer ( 2 , cross ) ;                               // Назначение массива буферу
    
    SetIndexStyle ( 0 , DRAW_LINE ,        STYLE_SOLID , 1 ) ;    // Стиль линии DRAW_HISTOGRAM STYLE_SOLID
    SetIndexStyle ( 1 , DRAW_LINE ,        STYLE_SOLID , 1 ) ;    // Стиль линии        
    SetIndexStyle ( 2 , DRAW_ARROW ,       STYLE_SOLID , 0 ) ;    // Стиль линии
    SetIndexArrow ( 2 , 161 ) ;
    
    SetIndexLabel ( 0 , "TSI" ) ;
    SetIndexLabel ( 1 , "Ergodic" ) ;
    SetIndexLabel ( 2 , "Cross" ) ;
    IndicatorShortName ( "TSI(" + LengthMtm + "," + LengthSmooth + "," + LengthErgodic + ")" ) ;    
    
    int BigBars                     = MathMax ( Bars , 6000 ) ;
    
    ArrayResize (        mtm ,        BigBars ) ;
    ArrayResize (        base ,       BigBars ) ;
    ArrayResize (        mtmMA ,      BigBars ) ;
    ArrayResize (        mtmS ,       BigBars ) ;

    ArraySetAsSeries (   mtm ,        true ) ;
    ArraySetAsSeries (   base ,       true ) ;
    ArraySetAsSeries (   mtmMA ,      true ) ; 
    ArraySetAsSeries (   mtmS ,       true ) ;


    return ( 0 ) ;                                      
}
Desteğiniz için çok teşekkür ederiz. Göstergeyi istediğiniz gibi kullanın. Doğru, biraz yavaş. :)))
 

işe yarıyor gibi görünüyor

 //--------------------------------------------------------------------
// TSI.mq4 
// Предназначен для использования в качестве трендового индикатора
//--------------------------------------------------------------------

#property indicator_separate_window         // indicator_chart_window, indicator_separate_window
#property indicator_buffers     3            // Количество буферов
#property indicator_color1      Red         // Цвет первой линии Red Blue Lime 
#property indicator_color2      Blue        // Цвет второй линии
#property indicator_color3      Yellow
#property indicator_level1      - 20
#property indicator_level2       20
//#property indicator_minimum   -100
//#property indicator_maximum    100

extern int LengthMtm             = 21 ;
extern int LengthSmooth         = 5 ;
extern int LengthErgodic         = 5 ;
extern int HistoryLimit         = 2000 ;

double tsi [ ] , ergodic [ ] , cross [ ] ;            // Объявление массивов (под буферы индикатора)
double mtm [ ] , base [ ] , mtmMA [ ] , mtmS [ ] ;


//-----------------------------------------------------------------------------
int MathSgn ( double Value = 0.0 )
{
     if ( Value < 0 ) return ( - 1 ) ; else return ( 1 ) ;
}

//-----------------------------------------------------------------------------
int init ( )                          
{
     IndicatorBuffers ( 7 ) ;
     SetIndexBuffer ( 0 , tsi ) ;                                  // Назначение массива буферу
     SetIndexBuffer ( 1 , ergodic ) ;                              // Назначение массива буферу
     SetIndexBuffer ( 2 , cross ) ;                                // Назначение массива буферу
    
     SetIndexBuffer ( 3 , mtm ) ;
     SetIndexBuffer ( 4 , base ) ;
     SetIndexBuffer ( 5 , mtmMA ) ;
     SetIndexBuffer ( 6 , mtmS ) ;
        
     SetIndexStyle ( 0 , DRAW_LINE ,          STYLE_SOLID , 1 ) ;      // Стиль линии DRAW_HISTOGRAM STYLE_SOLID
     SetIndexStyle ( 1 , DRAW_LINE ,          STYLE_SOLID , 1 ) ;      // Стиль линии        
     SetIndexStyle ( 2 , DRAW_ARROW ,        STYLE_SOLID , 0 ) ;      // Стиль линии
     SetIndexArrow ( 2 , 161 ) ;
    
     SetIndexLabel ( 0 , "TSI" ) ;
     SetIndexLabel ( 1 , "Ergodic" ) ;
     SetIndexLabel ( 2 , "Cross" ) ;


     IndicatorShortName ( "TSI(" + LengthMtm + "," + LengthSmooth + "," + LengthErgodic + ")" ) ;     
    
     return ( 0 ) ;                                       
}

//-----------------------------------------------------------------------------
int start ( )                          
{     
     if ( HistoryLimit = = 0 ) HistoryLimit = Bars ;
    
     int Counted_bars             = IndicatorCounted ( ) ;
     int i , limit                 = MathMin ( Bars - Counted_bars - 1 , HistoryLimit ) ; 
     double tmp ;
     for ( i = limit ; i > = 0 ; i - - ) {
        mtm [ i ]                    = Close [ i ] - Close [ i + 1 ] ;
        base [ i ]                  = High [ i ]    - Low [ i ] ;
   }
     for ( i = limit ; i > = 0 ; i - - ) {
        mtmMA [ i ]                  = iMAOnArray ( mtm ,    0 , LengthMtm ,      0 , MODE_EMA , i ) * 100 ;
        tmp                     = iMAOnArray ( base ,    0 , LengthMtm ,      0 , MODE_EMA , i ) ;
        mtmS [ i ] = 0 ;
         if ( tmp > 0 )   mtmMA [ i ]    / = tmp ;
        mtmS [ i ]                  = iMAOnArray ( mtmMA , 0 , LengthSmooth ,    0 , MODE_EMA , i ) ;
        tsi [ i ]                    = mtmS [ i ] ;
   }
   for ( i = limit ; i > = 0 ; i - - ) {
        ergodic [ i ]                = iMAOnArray ( mtmS ,    0 , LengthErgodic , 0 , MODE_EMA , i ) ; 
        
         cross [ i ]            = EMPTY_VALUE ;
         if ( MathSgn ( tsi [ i + 1 ] - ergodic [ i + 1 ] ) ! = MathSgn ( tsi [ i ] - ergodic [ i ] ) )        
            cross [ i ]            = ergodic [ i ] ;


        
     }
    
     return ( 0 ) ;                           
}
 
Şuna bir bakın, ancak jpg resmini sıkıştırmadı. Yani png çok daha hafiftir.
 
Vinin >> :

işe yarıyor gibi görünüyor


Senin versiyonun benim yeni versiyonumdan daha hızlı. Danışmanda genellikle böyle uçar! :))) Ama anlamıyorum, görsel testten sonra tekrar çizelgeye atılırsa, çizgiler çizilmez. Sorunun ne olabileceğini tahmin edebilir misiniz?
 
IlyaA писал(а) >>

Senin versiyonun benim yeni versiyonumdan daha hızlı. Danışmanda genellikle böyle uçar! :))) Ama anlamıyorum, görsel testten sonra tekrar çizelgeye atılırsa, çizgiler çizilmez. Sorunun ne olabileceğini tahmin edebilir misiniz?

düzelttim zaten Yukarıdaki mesaj değiştirilmiştir.

 
Vinin >> :

düzelttim zaten Yukarıdaki mesaj değiştirilmiştir.


Yeniden yükleyin, lütfen, bir şey benim için tekrar oluşturmuyor.
 
IlyaA писал(а) >>

Yeniden yükleyin, lütfen, bir şey benim için tekrar oluşturmuyor.
Dosyalar:
tsi.mq4  4 kb
 
Vinin >> :


Bir numara var, sadece bir grafikten çektiğinizde çizmiyor ve yeniden derleme, sayıları öğrenmesine yardımcı oluyor, yani. onu görmeye başlıyoruz.
 
IlyaA писал(а) >>

Bir numara var, sadece bir grafikten çektiğinizde çizmiyor ve yeniden derleme, sayıları öğrenmesine yardımcı oluyor, yani. onu görmeye başlıyoruz.

Yarın bir daha bakacağım. Bugün çok geç. Evet yorgunum