어떤 경우에 표시기에 로봇 코드의 일부를 유지하는 것이 합리적입니까? - 페이지 14

 
Integer :

본질적으로 EMA 계산 코드를 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 :
그건 그렇고, Dmitry, 당신은 똑같이 정확하지 않은 솔루션을 제공했습니다. 그것은 고문에 관한 것이었습니다.


나는 아직 모든 창문을 씻지 않았고 중단했습니다 ....

아니오, 아니오, 정상적인 예가 제공됩니다. 왜 인위적으로 사물을 복잡하게 만드는가? 내 코드의 "장난감"이 무엇인지 이해하지 못했습니까?

 
드미트리, 나는 경쟁에 전혀 관심이 없습니다. 일반 프로그래머의 성능에서 두 옵션 중 어느 것이 더 빠른지 알고 싶습니다. 또한, 어느 정도 표준 사용자 지정 지표 와 동일한 계산 방식을 사용합니다. 그리고 당신의 경쟁은 "방수 화약을 발명"하는 누군가와 끝날 수 있으며, 이것은 그가 좋은 프로그래머라고 말할 뿐 Expert Advisor의 계산이 더 빠르다는 것은 아닙니다(또는 그 반대의 경우도 마찬가지입니다).
 
hrenfx :


나는 아직 모든 창문을 씻지 않았고 중단했습니다 ....

아니오, 아니오, 정상적인 예가 제공됩니다. 왜 인위적으로 사물을 복잡하게 만드는가? 내 코드의 "장난감"이 무엇인지 이해하지 못했습니까?


계산 값과 표준 EMA를 비교하기만 하면 됩니다. 당신은 볼 것이다
 
granit77 :
Dmitry, 나는 일반적으로 경쟁에 관심이 없습니다. 일반 프로그래머의 성능에서 두 옵션 중 어느 것이 더 빠른지 알고 싶습니다. 또한, 어느 정도 표준 사용자 지정 지표와 동일한 계산 방식을 사용합니다. 그리고 당신의 경쟁은 "방수 화약을 발명"하는 누군가와 끝날 수 있으며, 이것은 그가 좋은 프로그래머라고 말할 뿐 Expert Advisor의 계산이 더 빠르다는 것은 아닙니다(또는 그 반대의 경우도 마찬가지입니다).

보시다시피 속도는 말할 것도 없고 실제로 실제로 적용 가능한 Expert Advisor에서 EMA를 계산하는 완전히 올바른 방법을 아직 제공한 사람은 없습니다.
 
Vinin :

계산 값과 표준 EMA를 비교하기만 하면 됩니다. 당신은 볼 것이다

글쎄, 이것들은 실제로 요점을 따지는 것이 아니라 시작점에 따라 다릅니다. 동일한 표시기의 경우 첫 번째 막대는 정확히 동일합니다. 그러나 불필요한 논쟁을 시작하지 않기 위해 이제 가장 간단한 변경을 할 것입니다.

 
Vinin :

계산 값과 표준 EMA를 비교하기만 하면 됩니다. 당신은 볼 것이다

내가 계수에 실수를 한 것일 수도 있고, 지금 확인하겠습니다. 그러나 원칙은 이것으로 변경되지 않습니다.
 
Integer :

연결이 끊어진 후 오류가 발생합니다. 시간 프레임이 낮을수록 오류가 커집니다.

아니요, 그렇지 않습니다. 코드에서 볼 수 있듯이 신호 계산 프로세스(마지막 막대 또는 지정된 nMax 막대만)는 prevVals[0] 매개변수에 의해 제어됩니다. 0이면 nMax 막대로 계산하여 복원합니다. prevVals[0]의 값은 다른 코드에 의해 조작됩니다.

그러나 주저하지 말고 요점으로 가십시오. 위의 두 가지 옵션이 있는데 테스터 에서 어느 것이 더 빠릅니까? 그래서

 

빨강 - 광산, 맨 위에 파랑 - 터미널에 내장되어 있습니다.

사유: