[警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 - ページ 247

 
はい。中間配列は主配列と同じであることが望ましい。オプションが提案されているようです。
 
Swan >> :

が、確認することをお勧めします)

このズレは、シフトなしの配列を使用したことによるものです。


ありがとうございました。あなたのリンクでコツがわかりました。警告皆さん、iMAONArray()の下でBUFFERSを使用している状況でした。そして、バッファはinit()で初期化されました。ビジュアルテストを行ったところ、Barsの初期サイズが小さかった。そして、すべての配列は小さいサイズで初期化されます !!!!初期化サイズを最小6000要素に増やしました。と、いうことでした。EAのビジュアルテストでは、指標の計算が正しく行われていることを確認しました。ははは、決まりましたね。あとは、バーディレイでのテストです。指標の値も違ってくるのかな。しかし、月曜日にはわかるだろう。もし、運用時間を短縮するために、アレイをあまり大きくせず、半年より短い時間で計算する方法があれば、どんなアイデアでも自由に表現してください。

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 >> :

>> うまくいっているようです。


あなたのバージョンは、私の新しいものよりも速いです。EAではこんな風に飛ぶんだ!:)))しかし、視覚テストの後、再びチャートに投げると、線が引かれないのが理解できない。何が問題なのか、ご提案いただけますか?
 
IlyaA писал(а)>>

あなたのバージョンは、私の新しいものよりも速いです。EAではこんな風に飛ぶんだ!:)))しかし、目視テストの後、再度チャート上に投げると線が引かれないのが解せません。何が問題なのか、教えてください。

すでに修正済みです。 上記投稿を変更しました。

 
Vinin >> :

すでに修正済みです。 >>上の投稿を変更しました。


再投稿してください、何かがまた私のためにレンダリングされていません。
 
IlyaA писал(а)>>

何かまたレンダリングがうまくいかないので、再投稿をお願いします。
ファイル:
tsi.mq4  4 kb
 
Vinin >> :


コツがあって、チャートに出しただけでは描画されないのですが、リコンパイルすることで数字を学習させる、つまり見え始めるんです。
 
IlyaA писал(а)>>

コツがあって、チャートで抜くだけだと描かないのですが、リコンパイルすると数字を覚えてくれる、つまり見えるようになるんです。

明日、もう一度見てみます。今日は遅いですね。>>で、疲れました。