[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 247

 
是。中间数组应与主数组相同。这些选项似乎已经被建议了。
 
Swan >> :

但最好是检查一下)

这种差异是由于使用了没有移位的数组。


非常感谢你。我通过你的链接想出了这个窍门。警告。先生们,情况是我在iMAONArray()下使用了BUFFERS。而缓冲区在init()中被初始化了。当我进行视觉测试时,Bars的初始尺寸很小。而且所有的数组都以小尺寸初始化!!!我把初始化大小增加到最小6000个元素。就这样了!对EA的视觉测试证实了指标的计算是正确的。哈,那是一个交易。现在,它仍然是对酒吧延迟的测试。我想知道这些指标的数值是否会有所不同。但我们将在周一看到。如果有人有任何建议,以节省操作时间,不使阵列那么大,而使计算时间短于半年--请随时表达任何想法,因为不做事的人不会犯错。

请将我的案例添加到一些常见问题中。


它终于起作用了!

新版本的功能。

//-----------------------------------------------------------------------------
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 писал(а)>>

有一个技巧,当你只是把它拉出来放在图表上时,它不会画出来,但重新编译它有助于它学习数字,也就是说,我们确实开始看到它。

我明天会再看一下。今天已经很晚了。>>而且我很累。

原因: