¿Cuándo tiene sentido mantener parte del código del robot en un indicador? - página 14

 
Integer:

En esencia, vamos a transferir el código de cálculo de la EMA al Asesor Experto.


Tras rebuscar en los archivos, he aquí una de mis antiguas elecciones. Lo sacó del Asesor Experto.

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);
}

¿Le he entendido bien?

 
OneDepo:


Tras rebuscar en los archivos, he aquí una de mis antiguas elecciones. Se lo sacó a un experto.

¿Le he entendido bien?


Habrá un error después de una perforación en la conexión, cuanto menor sea el plazo, mayor será el error.
 
Vinin:
Por cierto, Dimitri, tú también has aportado una solución incorrecta. Me refería al Asesor Experto.


Todavía no he terminado todas las ventanas, interrumpido....

No, no, es un buen ejemplo. ¿Por qué hacer algo artificialmente complicado? No entiendo qué hay de "juguetón" en mi código.

 
Dmitry, no me interesa en absoluto el concurso. Me interesa saber cuál sería más rápida de las dos variantes realizadas por un programador ordinario. Y para un indicador personalizado más o menos estándar y con el mismo esquema de cálculo. Y su competencia puede acabar con alguien "inventando un polvo hermético", y sólo indicará que es un buen programador, pero no que el cálculo del EA es más rápido (o viceversa).
 
hrenfx:


Todavía no he terminado todas las ventanas, interrumpido....

No, no, es un buen ejemplo. ¿Por qué hacer algo artificialmente complicado? No entiendo, ¿cuál es el "juego" de mi código?


Sólo tienes que comparar los valores de tu cálculo y la EMA estándar. Ver
 
granit77:
Dmitry, no me interesa en absoluto el concurso. Me interesa saber cuál sería más rápida de las dos variantes realizadas por un programador ordinario. Y para un indicador personalizado más o menos estándar y con el mismo esquema de cálculo. Y su competencia puede acabar con alguien "inventando un polvo hermético", y sólo indicará que es un buen programador, pero no que el cálculo del EA es más rápido (o viceversa).

Como podemos ver, hasta ahora nadie ha proporcionado un método totalmente correcto para calcular la EMA en los EAs que sea aplicable en la práctica en la realidad, y mucho menos más rápido.
 
Vinin:

Sólo tienes que comparar los valores de tu cálculo y la EMA estándar. Verás

Bueno, en realidad no es un problema, todo depende de por dónde se empiece. Para el mismo indicador la primera barra será exactamente la misma. Pero para no iniciar una discusión innecesaria, ahora haré los cambios más sencillos.

 
Vinin:

Basta con comparar los valores de su cálculo con la EMA estándar. Ver

Puede que me haya equivocado con los coeficientes, los comprobaré ahora, pero el principio no cambiará.
 
Integer:

Habrá un error después de la perforación, cuanto menor sea el plazo, mayor será el error.

No, no lo hará. Puede ver en el código que el proceso de cálculo de la señal está controlado (sólo la última barra o las barras nMax dadas) por el parámetro prevVals[0]. Si es 0, restablecemos el cálculo por barras nMax. El valor de prevVals[0] está controlado por otro código.

Pero no nos desviemos, vayamos al grano. Hay dos opciones arriba, ¿cuál es más rápida en el probador? Así que

 

El rojo es el mío, el azul de arriba es el que lleva incorporado el terminal.

Razón de la queja: