ロボットコードの一部をインジケータに保持する意味があるのはどんな場合ですか? - ページ 14

 
Integer:

要するに、EMAの計算コードをExpert Advisorに移し替えましょうということです。


アーカイブを探し回って、私が古くから選んでいるのがこちらです。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);
}

私はあなたのことを正しく理解していたでしょうか?

 
OneDepo:


アーカイブを探し回って、私が古くから選んでいるのがこちらです。専門家から取り寄せた。

ちゃんと理解できたかな?


接続のパーフォレーション後に誤差が発生し、時間軸が低いほど誤差が大きくなります。
 
Vinin:
ところで、Dimitriさんも間違った解答をされていますね。Expert Advisorの話でした。


まだ全ての窓が完成していないので、中断して...。

いやいや、いい例でしょう。なぜ、人為的に複雑なものを作るのか?私のコードのどこが "おもちゃっぽい "のかが理解できないのですが?

 
ドミトリー、私はコンテストにはまったく興味がないんだ。普通のプログラマーが行う2つのバリエーションで、どちらが速いのか知りたいですね。また、多かれ少なかれ標準的なカスタムインジケーターで、同じ計算スキームの場合。そして、あなたの競争相手は「水垢離粉を発明した人」で終わるかもしれませんし、その人が優れたプログラマーであることを示すだけで、EAの計算が速いということではありません(その逆もしかり)。
 
hrenfx:


まだすべての窓が完成していないので、中断していますが......。

いやいや、いい例でしょう。なぜ、人為的に複雑なものを作るのか?ただ、理解できないのは、私のコードの「遊び心」とは何なのか、ということです。


計算した値と標準的なEMAを比較するだけです。参照
 
granit77:
ドミトリー、私はコンテストにはまったく興味がないんだ。普通のプログラマーが行う2つのバリエーションで、どちらが速いのか知りたいですね。また、多かれ少なかれ標準的なカスタムインジケーターで、同じ計算スキームの場合。そして、あなたの競争相手は「水垢離粉を発明した人」で終わるかもしれませんし、その人が優れたプログラマーであることを示すだけで、EAの計算が速いということではありません(その逆もしかり)。

このように、EAにおけるEMAの計算方法については、高速化はおろか、現実に適用できる完全に正しい方法は今のところ誰も提示していません。
 
Vinin:

計算した値と標準的なEMAを比較するだけです。を見ることができます。

まあ、ピクルスというより、どこから手をつけるかによりますが。同じインディケータでは、最初のバーは全く同じになります。しかし、余計な議論をしないためにも、これからは最もシンプルな変更にします。

 
Vinin:

計算した値を標準のEMAと比較するだけです。参照

係数を間違えたかもしれないので、これから確認しますが、原理は変わりません。
 
Integer:

パーフォレーション後に誤差が生じ、時間軸が短いほど誤差は大きくなる。

いいえ、そうではありません。このコードでは、prevVals[0]パラメータによって、シグナル計算 プロセスが制御されていることがわかります(最後のバーまたは与えられたnMaxバーのみ)。0の場合、nMaxバーによる計算を復元する。prevVals[0]の値は別のコードで制御される。

しかし、脇道にそれずに本題に入りましょう。上記の2つのオプションがありますが、テスターでは どちらが速いでしょうか?だから

 

赤いのが私のもので、上の青いのが端末に内蔵されているものです。