[경고, 주제 닫힘!] 포럼을 어지럽히지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 당신 없이는 어디에도 없습니다. - 페이지 247

 
네. 중간 배열은 기본 배열과 동일하게 만들어야 합니다. 옵션이 제안하는 것 같았습니다.
 
Swan >> :

할 수 없습니다. 하지만 확인하는 것이 좋습니다)

불일치는 시프트 없이 배열을 사용하기 때문입니다.


매우 감사합니다. 나는 당신의 링크를 통해 트릭이 무엇인지 이해했습니다. 주목! 여러분, iMAONArray()에서 BUFFERS를 사용한 상황입니다. 그리고 버퍼는 init()에서 초기화되었습니다. 시각적 테스트를 실행했을 때 Bar의 초기 크기는 작았습니다. 그리고 모든 배열은 작은 크기로 초기화됩니다!!! 초기화 크기를 최소 6000개 요소로 늘렸습니다. 그리고 그게 다야! EA의 시각적 테스트는 지표 계산의 정확성을 확인했습니다. 하, 사업. 이제 막대의 지연을 확인해야 합니다. 지표 값이 달라지는지 궁금합니다. 그러나 우리는 월요일에 그것을 볼 것입니다. 누구든지 RAM을 절약하고 어레이를 너무 크게 만들지 않는 방법을 제안 할 수 있지만 계산이 반년 미만 지속되도록 제안 할 수 있다면 자유롭게 아이디어를 표현하십시오. 아무것도 하지 않는 사람은 실수하지 않습니다.

FAQ에 제 사례를 추가해주세요.


드디어 벌었다!

새로운 기능 옵션:

 //-----------------------------------------------------------------------------
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 ) ;                                      
}
지원해 주셔서 대단히 감사합니다. 원하는 대로 표시기를 사용하십시오. 사실, 그는 약간 느립니다. :)))
 

그것은 작동하는 것 같다

 //--------------------------------------------------------------------
// 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 ) ;                           
}
 
확인해 보세요. 하지만 그는 jpg 사진을 압축하지 않았습니다. 따라서 png의 무게는 훨씬 적습니다.
 
Vinin >> :

그것은 작동하는 것 같다


귀하의 버전이 내 새 버전보다 빠릅니다. 어드바이저에서는 일반적으로 그렇게 날아갑니다! :))) 그러나 시각적 테스트 후 차트에 다시 던져지면 선이 그려지지 않는지 이해할 수 없습니다. 무엇이 문제인지 짐작할 수 있습니까?
 
IlyaA писал(а) >>

귀하의 버전이 내 새 버전보다 빠릅니다. 어드바이저에서는 일반적으로 그렇게 날아갑니다! :))) 그러나 시각적 테스트 후 차트에 다시 던져지면 선이 그려지지 않는지 이해할 수 없습니다. 무엇이 문제인지 짐작할 수 있습니까?

나는 이미 그것을 고쳤다. 위의 글이 수정되었습니다.

 
Vinin >> :

나는 이미 그것을 고쳤다. 위의 글이 수정되었습니다.


다시 업로드하십시오. 무언가가 다시 렌더링되지 않습니다.
 
IlyaA писал(а) >>

다시 업로드하십시오. 무언가가 다시 렌더링되지 않습니다.
파일:
tsi.mq4  4 kb
 
Vinin >> :


트릭이 있습니다. 차트에서 꺼내기만 하면 그려지지 않고 다시 컴파일하면 숫자를 배우는 데 도움이 됩니다. 우리는 그것을 보기 시작했습니다.
 
IlyaA писал(а) >>

트릭이 있습니다. 차트에서 꺼내기만 하면 그려지지 않고 다시 컴파일하면 숫자를 배우는 데 도움이 됩니다. 우리는 그것을 보기 시작했습니다.

내일 한번 더 봐야겠다. 오늘은 너무 늦었다. 네, 피곤해요