Quando faz sentido manter parte do código do robô em um indicador? - página 14

 
Integer:

Em essência, vamos transferir o código de cálculo EMA para o Expert Advisor.


Tendo pesquisado nos arquivos, esta é uma das minhas antigas escolhas. Tirei-o do Expert Advisor.

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

Eu o entendi corretamente?

 
OneDepo:


Tendo pesquisado nos arquivos, esta é uma das minhas antigas escolhas. Tirei-o de um especialista.

Eu o entendi corretamente?


Haverá um erro após uma perfuração em conexão, quanto menor o prazo, maior será o erro.
 
Vinin:
A propósito, Dimitri, você também forneceu uma solução incorreta. Eu estava falando do Conselheiro Especialista.


Eu ainda não terminei todas as janelas, interrompido....

Não, não, é um bom exemplo. Por que tornar algo artificialmente complicado? Eu simplesmente não entendo o que é "brinquedo" no meu código?

 
Dmitry, não estou de modo algum interessado no concurso. Estou interessado em saber o que seria mais rápido entre as duas variantes realizadas por um programador comum. E para um indicador personalizado mais ou menos padrão e com o mesmo esquema de cálculo. E sua concorrência pode acabar com alguém "inventando um pó impermeável", e isso só indicará que ele ou ela é um bom programador, mas não que o cálculo da EA é mais rápido (ou vice-versa).
 
hrenfx:


Ainda não terminei todas as janelas, interrompido....

Não, não, é um bom exemplo. Por que tornar algo artificialmente complicado? Eu simplesmente não entendo, qual é a "ludicidade" do meu código?


Basta comparar os valores de seu cálculo e o EMA padrão. Ver
 
granit77:
Dmitry, não estou de modo algum interessado no concurso. Estou interessado em saber o que seria mais rápido entre as duas variantes realizadas por um programador comum. E para um indicador personalizado mais ou menos padrão e com o mesmo esquema de cálculo. E sua concorrência pode acabar com alguém "inventando um pó impermeável", e isso só indicará que ele ou ela é um bom programador, mas não que o cálculo da EA é mais rápido (ou vice-versa).

Como podemos ver, até agora ninguém forneceu um método totalmente correto para calcular EMA em EAs que seja aplicável na prática na realidade, e muito menos mais rápido.
 
Vinin:

Basta comparar os valores de seu cálculo e o EMA padrão. Você vai ver

Bem, não é realmente um pickle, tudo depende de onde você começa. Para o mesmo indicador, a primeira barra será exatamente a mesma. Mas para não iniciar um argumento desnecessário, vou agora fazer as mudanças mais simples.

 
Vinin:

Basta comparar os valores de seu cálculo com o EMA padrão. Ver

Posso ter cometido um erro com os coeficientes, vou verificá-los agora, mas o princípio não vai mudar.
 
Integer:

Haverá um erro após a perfuração, quanto menor o prazo, maior o erro.

Não, não vai. Você pode ver no código que o processo de cálculo do sinal é controlado (somente última barra ou dadas barras nMax) pelo parâmetro prevVals[0]. Se for 0, restabelecemos o cálculo por barras nMax. O valor de prevVals[0] é controlado por outro código.

Mas não nos desviemos, vamos direto ao assunto. Há duas opções acima, o que é mais rápido no testador? Então

 

O vermelho é meu, o azul acima é o que está embutido no terminal.

Razão: