什么时候在指标中保留部分机器人代码才有意义? - 页 14

 
Integer:

从本质上讲,让我们把EMA计算代码转移到专家顾问。


在翻阅了档案后,这里有我的一个古老的选择。把它从专家顾问中拿出来。

int GetSignal (int nMax, int shift, double& prevVals[])
//  prevVals[3] - [0] требуется для быстрого расчета SMA.
//                [1] пред. порог перехода
//                [2] пред. пред. порог перехода
{
    int j, k, pos;
    double currMA, sum;

    ///////////////////////////////////////////////////////
    //  Restore 
    if (prevVals[0] < 0.1) {

        pos = nMax;
        sum = 0;
        for(k = 0; k < paramMAperiod; k++, pos--) {
            sum += vPrice(paramMAprice, pos);
        }
        prevVals[0] = sum/paramMAperiod;

        for ( ; shift < pos; pos--) {
            currMA = (vPrice(paramMAprice, pos) + (paramMAperiod-1)*prevVals[0])/paramMAperiod;
            prevVals[0] = currMA;

            j = 0.5+MathAbs(prevVals[1]-currMA)/Point;
            if (j >= paramMAporog) {
                prevVals[2] = prevVals[1];
                prevVals[1] = currMA;
            }
        }
    }
    ///////////////////////////////////////////////////////

    pos = shift;
    currMA = (vPrice(paramMAprice, pos) + (paramMAperiod-1)*prevVals[0])/paramMAperiod;
    prevVals[0] = currMA;

    ///////////////////////////////////////////////////////
    pos = 0;
    j = 0.5+MathAbs(prevVals[1]-currMA)/Point;
    if (j >= paramMAporog) {

        if (prevVals[2] > prevVals[1] && prevVals[1] < currMA)
            pos = -1;

        if (prevVals[2] < prevVals[1] && prevVals[1] > currMA)
            pos = 1;

        prevVals[2] = prevVals[1];
        prevVals[1] = currMA;
    }

    if (IsOptimization() == false) {
        string szName = "ArrTest_";
        szName = szName+gObject;
        ObjectCreate(szName, OBJ_ARROW, 0, Time[shift], prevVals[1]);
        ObjectSet   (szName, OBJPROP_ARROWCODE, 159);
        ObjectSet   (szName, OBJPROP_COLOR,     Gold);
        gObject++;
   }
   return(pos);
}

我对你的理解是否正确?

 
OneDepo:


在翻阅了档案后,这里有我的一个古老的选择。从一个专家那里拿出来的。

我对你的理解正确吗?


在连接打孔后会有误差,时间越短,误差越大。
 
Vinin:
顺便说一句,迪米特里,你也提供了一个不正确的解决方案。我说的是专家顾问。


我还没有完成所有的窗户,中断....。

不,不,这是个好例子。为什么要人为地把事情弄得很复杂?我只是不明白我的代码有什么 "玩具性"?

 
德米特里,我对这个比赛一点都不感兴趣。我很想知道,由一个普通的程序员来执行这两种变体,哪一种会更快。而对于一个或多或少标准的自定义指标,并采用相同的计算方案。而你的竞争最终可能是有人 "发明了一种不漏水的粉末",这只能说明他或她是一个好的程序员,但不能说明EA的计算速度更快(反之亦然)。
 
hrenfx:


还没有完成所有的窗户,中断....。

不,不,这是个好例子。为什么要人为地把事情弄得很复杂?我只是不明白,我的代码的 "玩法 "是什么?


只要比较你的计算值和标准EMA就可以了。见
 
granit77:
德米特里,我对这个比赛一点都不感兴趣。我很想知道,由一个普通的程序员执行的两种变体中,哪一种会更快。而对于一个或多或少标准的自定义指标,并采用相同的计算方案。而你的竞争最终可能是有人 "发明了一种不漏水的粉末",这只能说明他或她是一个好的程序员,但不能说明EA的计算速度更快(反之亦然)。

我们可以看到,到目前为止,还没有人提供一个完全正确的计算EMA的方法,在现实中实际适用,更不用说更快了。
 
Vinin:

只要比较你的计算值和标准EMA就可以了。你会看到

嗯,这并不是真正的腌制,这完全取决于你从哪里开始。对于相同的指标,第一个条形图将是完全相同的。但为了不引起不必要的争论,我现在将进行最简单的修改。

 
Vinin:

只要将你的计算值与标准EMA进行比较即可。见

我可能犯了一个系数的错误,我现在要检查一下,但原理不会改变。
 
Integer:

打孔后会有误差,时间越短,误差越大。

不,它不会。你可以在代码中看到,信号的计算 过程是由参数prevVals[0]控制的(只有最后一个棒或给定的nMax棒)。如果它是0,我们就按nMax条数恢复计算。prevVals[0]的值由另一个代码控制。

但我们不要偏离主题,让我们进入正题。上面有两个选项,在测试器中 哪个更快?所以

 

红色的是我的,上面的蓝色的是内置在终端的。