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

 
Vinin >> :

每个案例都有自己的解决方案


让我把程序代码给你,以便公众进行建设性的批评(请不要对指标本身进行建设性的批评)。但首先是一个描述。这就是TSI(真实力指数)。它是基于1天的动量。这些增量被相应的平均数(21期)平滑了。现在,让我们添加一个缩放比例。要做到这一点,采取高-低之差,用相同的指数平均值(21期)来平滑它们。让我们把平滑动量除以平滑扩散。这个比率被一个短的指数平均数(5期)平滑化了。 我们获得了主线。现在让我们用对冲(EMA(, 5))来平滑主线,并为获得一条信号线而感到高兴。事实上,让我们再次欢欣鼓舞,因为我们有TSI--一个典型的趋势指标。在我的实现中,我还有3个缓冲区用于 "圆圈",我用它来标记主线和信号线的交叉点。先生们,让我们看看代码。

//--------------------------------------------------------------------
// 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()                         
{
    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+")");    
    
    ArrayResize(        mtm,        Bars);
    ArrayResize(        base,       Bars);
    ArrayResize(        mtmMA,      Bars);
    ArrayResize(        mtmS,       Bars);

    ArraySetAsSeries(   mtm,        true);
    ArraySetAsSeries(   base,       true);
    ArraySetAsSeries(   mtmMA,      true); 
    ArraySetAsSeries(   mtmS,       true);


    return(0);                                      
}

//-----------------------------------------------------------------------------
int start()                         
{    
    if ( HistoryLimit == 0) HistoryLimit = Bars;
    
    int Counted_bars            = IndicatorCounted();
    int i                       = MathMin(Bars - Counted_bars - 1, HistoryLimit); 
    while( i >= 0 ) {        
     
        mtm[ i]                  = Close[ i] - Close[ i+1];
        base[ i]                 = High[ i]  - Low[ i];
        mtmMA[ i]                = iMAOnArray( mtm,   0, LengthMtm,     0, MODE_EMA, i) * 100;
        mtmMA[ i]               /= iMAOnArray( base,  0, LengthMtm,     0, MODE_EMA, i);
        mtmS[ i]                 = iMAOnArray( mtmMA, 0, LengthSmooth,  0, MODE_EMA, i);
        tsi[ i]                  = mtmS[ i];
        ergodic[ i]              = iMAOnArray( mtmS,  0, LengthErgodic, 0, MODE_EMA, i); 
        
        if ( MathSgn( tsi[ i+1] - ergodic[ i+1]) != MathSgn( tsi[ i] - ergodic[ i]) )       
            cross[ i]           = ergodic[ i];
        else
            cross[ i]           = EMPTY_VALUE;
        
        i--;                       
    }
    
    return(0);                          
}


让我提醒你上诉的原因。如果你把指标拿到图表上,跳过几根蜡烛,再加上另一根同类的蜡烛,你和我都会得到指标值的分歧。在对EA进行视觉测试时画出这个指标,后来在图表中加入同样的指标,也有非常强烈的背离。你能用文章或个人经验来帮助我解决指标中的这类错误吗?谢谢你。
 
测试仪中缺少停止/播放按钮和速度滑块。该怎么做?
 
VAM_ >> :
测试器中缺少停止/播放按钮和速度滑块。该怎么做?

将测试仪的控制板抬高一点...使用鼠标左键...

 
Dmido >> :

大家好)。


我有一个专家顾问。我有一个专家顾问,它能够检测到大的趋势,并且在这些趋势上有很好的优势,但是我几乎不能覆盖无鱼市场上的滑点。

我的问题是:我如何写出缩放的信号?我的想法是这样的--当第一个位置上方有超过一个止损点,并且趋势显示出来时,我就会加仓。


我对单位本身感兴趣,它发出了一个交易的信号。我正在使用从标准MACD样本EA复制的代码。

如何纠正它,例如开长仓,然后一次性关闭开仓和长仓?


但交易像苍蝇一样成倍增加,其结果是一个 他妈的圣杯,有一千个开放的行业((((。


另一种方法是:目测实时监测EA的性能,并手动加注,这就是花岗岩(艺术),但它不是圣杯......

 
IlyaA >> :
        mtmMA[ i]                = iMAOnArray( mtm,   0, LengthMtm,     0, MODE_EMA, i) * 100;
        mtmMA[ i]               /= iMAOnArray( base,  0, LengthMtm,     0, MODE_EMA, i);

mtmMA - 应该有两个不同的数组。在划分时,最好检查是否与零不相等。


对于中间计算来说,使用缓冲器更为方便。

如果8个还不够,这里 有一个解决方案是

 
Swan >> :

mtmMA - 应该有两个不同的数组。在划分时,最好检查是否与零不相等。


对于中间计算来说,使用缓冲器更为方便。

如果8块钱不够,其中一个解决方案就在这里






谢谢你的评论。注意我们说的是高低差的平均值。它总是积极的。而平均数则加强了这一趋势。我想检查一下,但后来我想我会在日志中看到是否有什么。你认为除以0的错误会导致在不同时间段添加的图形出现分歧吗?
 
IlyaA >> :


谢谢你的评论。请注意,我们说的是高低差的平均值。它总是积极的。而平均数则加强了这一趋势。我想检查一下,但后来我想我会在日志中看到是否有什么。你认为除以0的错误会导致在不同时间段添加的图形出现分歧吗?

但最好是检查一下)

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

 
IlyaA писал(а)>>

让我给出程序代码,供公众进行建设性的批评(请不要对指标本身进行建设性的批评)。但首先是一个描述。这就是TSI(真实力指数)。它是基于1天的动量。这些增量被相应的平均数(21期)平滑了。现在,让我们添加一个缩放比例。要做到这一点,采取高-低之差,用相同的指数平均值(21期)来平滑它们。让我们把平滑动量除以平滑扩散。这个比率被一个短的指数平均数(5期)平滑化了。我们获得了主线。现在让我们用对冲(EMA(, 5))来平滑主线,并为获得一条信号线而感到高兴。事实上,让我们再次欢欣鼓舞,因为我们有TSI--一个典型的趋势指标。在我的实现中,我还有3个缓冲区用于 "圆圈",我用它来标记主线和信号线的交叉点。先生们,请把代码发给我。

让我提醒你地址的原因。如果你把指标拉到图表上,跳过几根蜡烛,再加上一个类似的指标,我们会得到一个指标值的分歧。在对EA进行视觉测试时画出这个指标,后来在图表中加入同样的指标,也有非常强烈的背离。你能用文章或个人经验来帮助我解决指标中的这类错误吗?谢谢你。

指示器是好的。如果在一个单独的循环中调用iMAOnArray(),你可以实现指标的正确操作,而不管其设置时间如何。

你需要将你的单循环分成三个循环。

iMAOnArray() 将更正确地工作。

 
Swan >> :

但最好是检查一下)

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

我不太明白没有转变意味着什么。你能不能加点字,谢谢?

 
IlyaA >> :

我不太明白没有转变意味着什么。请添加词语。

当新条形图出现时,缓冲数组被移位。索引被递增1,正常情况下不是。

上面的链接更详细地描述了它。

原因: