Hangi durumlarda robot kodunun bir kısmını göstergede tutmak mantıklıdır? - sayfa 14

 
Integer :

Özünde, EMA hesaplama kodunu bir Uzman Danışmana aktaralım.


Arşivleri karıştırdım, işte eski seçeneklerimden biri. Bir uzmandan sökülmüş

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

Seni doğru anladım mı?

 
OneDepo :


Arşivlerde karıştırılmış, işte eski seçeneklerimden biri. Bir uzmandan sökülmüş

Seni doğru anladım mı?


Bağlantının kesilmesinden sonra bir hata olacaktır, zaman aralığı ne kadar düşükse, hata o kadar büyük olur.
 
Vinin :
Bu arada, Dmitry, aynı tam olarak doğru olmayan çözümü sağladın. Danışmanla ilgiliydi.


Henüz tüm camları yıkamadım, araya girdim ....

Hayır, hayır, normal bir örnek verilmiştir. Neden işleri yapay olarak karmaşıklaştıralım? Kodumun "oyuncağının" ne olduğunu anlamadım?

 
Dmitry, rekabetle hiç ilgilenmiyorum. Sıradan bir programcının performansında iki seçenekten hangisinin daha hızlı olduğunu bilmek istiyorum. Ayrıca, aşağı yukarı standart bir özel gösterge için ve aynı hesaplama şemasıyla. Ve rekabetiniz birisinin "su geçirmez barut icat etmesi" ile sonuçlanabilir ve bu sadece onun iyi bir programcı olduğunu söyler ve Expert Advisor'daki hesaplamanın daha hızlı olduğunu (veya tam tersini) söylemez.
 
hrenfx :


Henüz tüm camları yıkamadım, araya girdim ....

Hayır, hayır, normal bir örnek verilmiştir. Neden işleri yapay olarak karmaşıklaştıralım? Kodumun "oyuncağının" ne olduğunu anlamadım?


Sadece hesaplamanızın değerlerini ve standart EMA'yı karşılaştırın. Göreceksin
 
granit77 :
Dmitry, genellikle rekabetle ilgilenmiyorum. Sıradan bir programcının performansında iki seçenekten hangisinin daha hızlı olduğunu bilmek istiyorum. Ayrıca, aşağı yukarı standart bir özel gösterge için ve aynı hesaplama şemasıyla. Ve rekabetiniz birisinin "su geçirmez barut icat etmesi" ile sonuçlanabilir ve bu sadece onun iyi bir programcı olduğunu söyler ve Expert Advisor'daki hesaplamanın daha hızlı olduğunu (veya tam tersini) söylemez.

Gördüğünüz gibi, henüz hiç kimse bir Uzman Danışmanda EMA'yı hesaplamak için, gerçekte pratikte uygulanabilir, hızdan bahsetmiyorum bile tamamen doğru bir yöntem sağlamadı.
 
Vinin :

Sadece hesaplamanızın değerlerini ve standart EMA'yı karşılaştırın. Göreceksin

Pekala, bunlar nokta atışı değil aslında, hepsi başlangıç noktasına bağlı. Aynı gösterge için ilk çubuk tamamen aynı olacaktır. Ancak gereksiz bir tartışma başlatmamak için şimdi en basit değişiklikleri yapacağım.

 
Vinin :

Sadece hesaplamanızın değerlerini ve standart EMA'yı karşılaştırın. Göreceksin

Belki katsayılarda bir hata yaptım, şimdi kontrol edeceğim, ancak prensip bundan değişmeyecek.
 
Integer :

Bağlantının kesilmesinden sonra bir hata olacaktır, zaman aralığı ne kadar düşükse, hata o kadar büyük olur.

Hayır, olmayacak. Kodda görebileceğiniz gibi, sinyal hesaplama işlemi (yalnızca son çubuk veya belirtilen nMax çubukları) prevVals[0] parametresi tarafından kontrol edilir. 0 ise, nMax çubukları ile hesaplayarak geri yükleriz. prevVals[0] değeri diğer kod tarafından değiştirilir.

Ama ürkmeyelim, konuya gelelim. Yukarıda, test cihazında daha hızlı olan iki seçenek var mı? Böyle

 

Kırmızı - benim, üstte mavi - terminalde yerleşik.