[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 247

 
OUI. Les tableaux intermédiaires doivent être les mêmes que les tableaux principaux. Les options semblent avoir été suggérées.
 
Swan >> :

mais il est conseillé de vérifier)

L'écart est dû à l'utilisation de tableaux sans décalage.


Merci beaucoup. J'ai trouvé l'astuce grâce à votre lien. Attention. Messieurs, la situation est que j'ai utilisé des BUFFERS sous iMAONArray(). Et les tampons ont été initialisés dans init(). Lorsque j'ai effectué un test visuel, la taille initiale des barres était petite. Et tous les tableaux sont initialisés avec une petite taille ! !! J'ai augmenté la taille de l'initialisation à 6000 éléments minimum. Et c'est tout ! Un test visuel de l'EE a confirmé que le calcul des indicateurs était correct. Ha, c'est un marché. Il reste maintenant à tester sur le délai de la barre. Je me demande si les valeurs des indicateurs seront différentes. Mais nous verrons lundi. Si quelqu'un a des suggestions pour économiser le temps d'opération et ne pas rendre les tableaux si grands, mais pour que le calcul soit plus court que la moitié d'une année, n'hésitez pas à exprimer vos idées, car celui qui ne fait rien ne fait pas d'erreur.

Veuillez ajouter mon cas à une FAQ.


Ça marche enfin !

Nouvelle version de la fonction :

//-----------------------------------------------------------------------------
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);                                      
}
Merci beaucoup pour votre soutien. Vous pouvez utiliser l'indicateur comme bon vous semble. C'est un peu lent, cependant. :)))
 

Il semble que cela fonctionne

//--------------------------------------------------------------------
// 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);                          
}
 
Regarde, ça n'a pas compressé l'image jpg. Le png est cependant beaucoup plus léger.
 
Vinin >> :

>> Il semble que cela fonctionne.


Votre version est plus rapide que la mienne. En EA, ça vole comme ça ! :))) Mais je ne comprends pas, si après le test visuel on le lance à nouveau sur le graphique, les lignes ne sont pas tracées. Pouvez-vous suggérer ce qui pourrait être le problème ?
 
IlyaA писал(а) >>

Votre version est plus rapide que la mienne. En EA, ça vole comme ça ! :))) Mais je ne comprends pas, si on le jette à nouveau sur le graphique après un test visuel, les lignes ne sont pas tracées. Pouvez-vous suggérer ce qui pourrait être le problème ?

Je l'ai déjà corrigé. Le message ci-dessus a été modifié.

 
Vinin >> :

Je l'ai déjà corrigé. >> le message ci-dessus a été modifié.


S'il vous plaît ré-afficher, quelque chose ne rend pas pour moi à nouveau.
 
IlyaA писал(а) >>

Veuillez le réafficher, il y a quelque chose qui ne rend pas pour moi encore une fois.
Dossiers :
tsi.mq4  4 kb
 
Vinin >> :


Il y a une astuce, quand vous le sortez sur un graphique, il ne dessine pas, mais le recompiler l'aide à apprendre les chiffres, c'est-à-dire que nous commençons à le voir.
 
IlyaA писал(а) >>

Il y a une astuce, lorsque vous le sortez sur un graphique, il ne dessine pas, mais la recompilation l'aide à apprendre les chiffres, c'est-à-dire que nous commençons à le voir.

Je regarderai à nouveau demain. Il est tard aujourd'hui. >> et je suis fatigué.

Raison: