Quando ha senso mantenere parte del codice del robot in un indicatore? - pagina 14

 
Integer:

In sostanza, trasferiamo il codice di calcolo dell'EMA a Expert Advisor.


Dopo aver rovistato negli archivi, ecco una delle mie antiche scelte. L'ho tolto dall'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);
}

Ho capito bene?

 
OneDepo:


Dopo aver rovistato negli archivi, ecco una delle mie antiche scelte. L'ho preso da un esperto.

Ho capito bene?


Ci sarà un errore dopo una perforazione nella connessione, più basso è il lasso di tempo, più grande è l'errore.
 
Vinin:
A proposito, Dimitri, anche tu hai fornito una soluzione errata. Stavo parlando dell'Expert Advisor.


Non ho ancora finito tutte le finestre, interrotto....

No, no, è un buon esempio. Perché rendere qualcosa artificialmente complicato? Non capisco cosa ci sia di "giocoso" nel mio codice?

 
Dmitry, non sono affatto interessato al concorso. Sono interessato a sapere cosa sarebbe più veloce delle due varianti eseguite da un programmatore ordinario. E per un indicatore personalizzato più o meno standard e con lo stesso schema di calcolo. E la vostra concorrenza potrebbe finire con qualcuno che "inventa una polvere impermeabile", e ciò indicherà solo che lui o lei è un buon programmatore, ma non che il calcolo dell'EA è più veloce (o viceversa).
 
hrenfx:


Non ho ancora finito tutte le finestre, interrotto....

No, no, è un buon esempio. Perché rendere qualcosa artificialmente complicato? Non capisco, cos'è la "giocosità" del mio codice?


Basta confrontare i valori del tuo calcolo e l'EMA standard. Vedere
 
granit77:
Dmitry, non sono affatto interessato al concorso. Sono interessato a sapere cosa sarebbe più veloce delle due varianti eseguite da un programmatore ordinario. E per un indicatore personalizzato più o meno standard e con lo stesso schema di calcolo. E la vostra concorrenza potrebbe finire con qualcuno che "inventa una polvere impermeabile", e ciò indicherà solo che lui o lei è un buon programmatore, ma non che il calcolo dell'EA è più veloce (o viceversa).

Come possiamo vedere, finora nessuno ha fornito un metodo completamente corretto per calcolare l'EMA negli EA che sia applicabile in pratica nella realtà, e tanto meno più veloce.
 
Vinin:

Basta confrontare i valori del vostro calcolo e l'EMA standard. Vedrete

Beh, non è proprio un sottaceto, tutto dipende da dove si comincia. Per lo stesso indicatore la prima barra sarà esattamente la stessa. Ma per non iniziare una discussione inutile, farò ora i cambiamenti più semplici.

 
Vinin:

Basta confrontare i valori del vostro calcolo con l'EMA standard. Vedere

Forse ho fatto un errore con i coefficienti, li controllerò ora, ma il principio non cambierà.
 
Integer:

Ci sarà un errore dopo la perforazione, più basso è il lasso di tempo, più grande è l'errore.

No, non lo farà. Potete vedere nel codice che il processo di calcolo del segnale è controllato (solo l'ultima barra o nMax barre date) dal parametro prevVals[0]. Se è 0, ripristiniamo il calcolo per nMax barre. Il valore di prevVals[0] è controllato da un altro codice.

Ma non divaghiamo, andiamo al punto. Ci sono due opzioni sopra, quale è più veloce nel tester? Così

 

Quello rosso è il mio, quello blu sopra è quello incorporato nel terminale.