Quand est-il judicieux de conserver une partie du code du robot dans un indicateur ? - page 14

 
Integer:

En substance, transférons le code de calcul de l'EMA à l'Expert Advisor.


Après avoir fouillé dans les archives, voici un de mes anciens choix. Je l'ai retiré du conseiller expert.

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

Vous ai-je bien compris ?

 
OneDepo:


Après avoir fouillé dans les archives, voici un de mes anciens choix. Je l'ai prise à un expert.

Est-ce que je vous ai bien compris ?


Il y aura une erreur après une perforation dans la connexion, plus le délai est faible, plus l'erreur est importante.
 
Vinin:
Au fait, Dimitri, vous avez également fourni une solution incorrecte. Je parlais du conseiller expert.


Je n'ai pas encore fini toutes les fenêtres, interruptions.....

Non, non, c'est un bon exemple. Pourquoi rendre quelque chose artificiellement compliqué ? Je ne comprends pas ce que mon code a de "jouet" ?

 
Dmitry, je ne suis pas du tout intéressé par le concours. Je suis intéressé de savoir ce qui serait le plus rapide des deux variantes réalisées par un programmeur ordinaire. Et pour un indicateur personnalisé plus ou moins standard et avec le même schéma de calcul. Et votre concurrence peut se retrouver avec quelqu'un qui "invente une poudre étanche", et cela indiquera seulement que cette personne est un bon programmeur, mais pas que le calcul de l'EA est plus rapide (ou vice versa).
 
hrenfx:


Je n'ai pas encore fini toutes les fenêtres, interruptions.....

Non, non, c'est un bon exemple. Pourquoi rendre quelque chose artificiellement compliqué ? Je ne comprends pas, en quoi consiste le "caractère ludique" de mon code ?


Il suffit de comparer les valeurs de votre calcul et l'EMA standard. Voir
 
granit77:
Dmitry, je ne suis pas du tout intéressé par le concours. Je suis intéressé de savoir ce qui serait le plus rapide des deux variantes réalisées par un programmeur ordinaire. Et pour un indicateur personnalisé plus ou moins standard et avec le même schéma de calcul. Et votre concurrence peut se retrouver avec quelqu'un qui "invente une poudre étanche", et cela indiquera seulement que cette personne est un bon programmeur, mais pas que le calcul de l'EA est plus rapide (ou vice versa).

Comme nous pouvons le constater, jusqu'à présent, personne n'a fourni une méthode entièrement correcte pour le calcul de l'EMA dans les EA qui soit applicable en pratique dans la réalité, et encore moins plus rapide.
 
Vinin:

Il suffit de comparer les valeurs de votre calcul et l'EMA standard. Vous verrez

Eh bien, ce n'est pas vraiment un cornichon, tout dépend d'où l'on commence. Pour le même indicateur, la première barre sera exactement la même. Mais pour ne pas entamer une discussion inutile, je vais maintenant apporter les changements les plus simples.

 
Vinin:

Il suffit de comparer les valeurs de votre calcul avec l'EMA standard. Voir

J'ai peut-être fait une erreur avec les coefficients, je vais les vérifier maintenant, mais le principe ne changera pas.
 
Integer:

Il y aura une erreur après la perforation, plus le délai est court, plus l'erreur est importante.

Non, ça ne le sera pas. Vous pouvez voir dans le code que le processus de calcul du signal est contrôlé (seulement la dernière barre ou les nMax barres données) par le paramètre prevVals[0]. S'il est égal à 0, on rétablit le calcul par nMax barres. La valeur de prevVals[0] est contrôlée par un autre code.

Mais ne nous laissons pas distraire, allons droit au but. Il y a deux options ci-dessus, laquelle est la plus rapide dans le testeur? Alors

 

Le rouge est le mien, le bleu au-dessus est celui qui est intégré au terminal.

Raison: