[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 247

 
YES. Die Zwischenfelder sollten die gleichen sein wie die Hauptfelder. Die Optionen scheinen vorgeschlagen worden zu sein.
 
Swan >> :

aber es ist ratsam, dies zu überprüfen)

Die Diskrepanz ist auf die Verwendung von Arrays ohne Verschiebung zurückzuführen.


Ich danke Ihnen vielmals. Ich habe den Trick durch Ihren Link herausgefunden. Warnung. Meine Herren, die Situation war, dass ich BUFFERS unter iMAONArray() verwendet. Und die Puffer wurden in init() initialisiert. Als ich einen visuellen Test durchführte, war die anfängliche Größe der Balken gering. Und alle Arrays werden mit kleiner Größe initialisiert!!! Ich habe die Initialisierungsgröße auf mindestens 6000 Elemente erhöht. Und das war's! Die visuelle Prüfung des EA bestätigte, dass die Berechnung der Indikatoren korrekt war. Ha, das ist ein Deal. Nun gilt es, die Taktverzögerung zu testen. Ich frage mich, ob die Werte der Indikatoren unterschiedlich sein werden. Aber das werden wir am Montag sehen. Wenn jemand Vorschläge hat, wie man die Bearbeitungszeit verkürzen kann und die Felder nicht so groß werden, sondern die Berechnung kürzer als sechs Monate ausfallen kann, kann er sie gerne äußern, denn wer nichts tut, macht keine Fehler.

Bitte nehmen Sie meinen Fall in eine der FAQ auf.


Es klappt endlich!

Neue Version der Funktion:

//-----------------------------------------------------------------------------
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);                                      
}
Herzlichen Dank für Ihre Unterstützung. Sie können den Indikator auf jede beliebige Weise verwenden. Es ist allerdings ein bisschen langsam. :)))
 

Scheint zu funktionieren

//--------------------------------------------------------------------
// 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);                          
}
 
Schauen Sie sich das an, es hat das jpg-Bild nicht komprimiert. Das png ist allerdings viel leichter.
 
Vinin >> :

>> Es scheint zu funktionieren.


Ihre Version ist schneller als meine neue Version. In EA fliegt es so! :))) Aber ich verstehe nicht, dass die Linien nicht gezeichnet werden, wenn man sie nach der visuellen Prüfung wieder auf das Diagramm wirft. Können Sie mir sagen, was das Problem sein könnte?
 
IlyaA писал(а) >>

Ihre Version ist schneller als meine neue Version. In EA fliegt es so! :))) Aber ich verstehe nicht, dass die Linien nicht gezeichnet werden, wenn man sie nach der visuellen Prüfung wieder auf das Diagramm wirft. Können Sie mir sagen, was das Problem sein könnte?

Ich habe es bereits korrigiert. Der obige Beitrag wurde geändert.

 
Vinin >> :

Ich habe es bereits korrigiert. >> der obige Beitrag wurde geändert.


Bitte erneut posten, irgendetwas funktioniert bei mir wieder nicht.
 
IlyaA писал(а) >>

Bitte noch einmal posten, irgendetwas funktioniert bei mir wieder nicht.
Dateien:
tsi.mq4  4 kb
 
Vinin >> :


Es gibt einen Trick: Wenn man es einfach auf ein Diagramm überträgt, zeichnet es nicht, aber wenn man es neu kompiliert, lernt es die Zahlen, d. h. wir beginnen, es zu sehen.
 
IlyaA писал(а) >>

Es gibt einen Trick: Wenn man es einfach auf ein Diagramm zieht, wird es nicht gezeichnet, aber wenn man es neu kompiliert, lernt es die Zahlen, d.h. wir beginnen, es zu sehen.

Ich werde mir das morgen noch einmal ansehen. Heute ist es spät. >> und ich bin müde.