Wann ist es sinnvoll, einen Teil des Robotercodes in einem Indikator zu behalten? - Seite 14

 
Integer:

Im Wesentlichen geht es darum, den EMA-Berechnungscode in den Expert Advisor zu übertragen.


Nachdem ich in den Archiven gestöbert habe, ist hier eine meiner alten Wahlmöglichkeiten. Ich habe es aus dem Expert Advisor herausgenommen.

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

Habe ich Sie richtig verstanden?

 
OneDepo:


Nachdem ich in den Archiven gestöbert habe, ist hier eine meiner alten Wahlmöglichkeiten. Ich habe es einem Experten entnommen.

Habe ich Sie richtig verstanden?


Nach einer Perforation der Verbindung kommt es zu einem Fehler, der umso größer ist, je kleiner der Zeitrahmen ist.
 
Vinin:
Übrigens, Dimitri, auch Sie haben eine falsche Lösung geliefert. Ich habe über den Expert Advisor gesprochen.


Ich habe noch nicht alle Fenster fertiggestellt, unterbrochen....

Nein, nein, das ist ein gutes Beispiel. Warum etwas künstlich kompliziert machen? Ich verstehe nur nicht, was an meinem Code "spielerisch" ist?

 
Dmitry, ich bin an dem Wettbewerb überhaupt nicht interessiert. Mich würde interessieren, welche der beiden Varianten von einem gewöhnlichen Programmierer schneller ausgeführt werden würde. Und für einen mehr oder weniger standardmäßigen benutzerdefinierten Indikator und mit demselben Berechnungsschema. Und bei Ihrer Konkurrenz kann es vorkommen, dass jemand "ein wasserdichtes Pulver erfindet", und das zeigt nur, dass er oder sie ein guter Programmierer ist, aber nicht, dass die Berechnung des EA schneller ist (oder umgekehrt).
 
hrenfx:


Ich habe noch nicht alle Fenster fertiggestellt, unterbrochen....

Nein, nein, das ist ein gutes Beispiel. Warum etwas künstlich kompliziert machen? Ich verstehe einfach nicht, worin die "Verspieltheit" meines Codes besteht?


Vergleichen Sie einfach die Werte Ihrer Berechnung und des Standard-EMA. Siehe
 
granit77:
Dmitry, ich bin an dem Wettbewerb überhaupt nicht interessiert. Mich würde interessieren, welche der beiden Varianten von einem gewöhnlichen Programmierer schneller ausgeführt werden würde. Und für einen mehr oder weniger standardmäßigen benutzerdefinierten Indikator und mit demselben Berechnungsschema. Und bei Ihrer Konkurrenz kann es vorkommen, dass jemand "ein wasserdichtes Pulver erfindet", und das zeigt nur, dass er oder sie ein guter Programmierer ist, aber nicht, dass die Berechnung des EA schneller ist (oder umgekehrt).

Wie wir sehen, hat bisher noch niemand eine völlig korrekte Methode zur Berechnung des EMA in EAs vorgelegt, die in der Praxis auch wirklich anwendbar ist, geschweige denn schneller.
 
Vinin:

Vergleichen Sie einfach die Werte Ihrer Berechnung und des Standard-EMA. Sie werden sehen

Nun, es ist nicht wirklich eine Gurke, es kommt nur darauf an, wo man anfängt. Für denselben Indikator ist der erste Balken genau derselbe. Aber um keinen unnötigen Streit anzufangen, werde ich jetzt die einfachsten Änderungen vornehmen.

 
Vinin:

Vergleichen Sie einfach die Werte Ihrer Berechnung mit dem Standard-EMA. Siehe

Vielleicht habe ich einen Fehler bei den Koeffizienten gemacht, ich werde sie jetzt überprüfen, aber das Prinzip wird sich nicht ändern.
 
Integer:

Nach der Perforation tritt ein Fehler auf, der umso größer ist, je kleiner der Zeitrahmen ist.

Nein, das wird es nicht. Sie können im Code sehen, dass die Signalberechnung (nur letzter Takt oder gegebene nMax-Takte) durch den Parameter prevVals[0] gesteuert wird. Wenn er 0 ist, wird die Berechnung mit nMax-Takten wiederhergestellt. Der Wert von prevVals[0] wird durch einen anderen Code gesteuert.

Aber lassen wir uns nicht ablenken, sondern kommen wir zur Sache. Es gibt zwei Optionen, welche ist im Tester schneller? Also

 

Der rote ist meiner, der blaue oben ist der im Terminal eingebaute.

Grund der Beschwerde: