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

 

아주 유익한 강의...

그리고 참가자의 자원과 잠재력을 알고 있으므로 진드기의 속도와 "삼키기"를 측정할 것을 도발적으로 제안합니다.

1) 고문

2) 1밀리초 스크립트의 빈도로 반복됨

3) 칠면조

4) 타사 DDE 수신기.

저와 같은 초보자 지지자에게도 유용할 것입니다.

;)

 

밤을 보면:

파일:
experts.zip  1 kb
 

5센트를 더하겠습니다.

지표 코드가 Expert Advisor에 완전히 배치되는 Expert Advisors의 작업 속도는 종종 사용자 지정 지표 호출을 사용하는 상대방보다 3배 빠릅니다. 이것은 지표 계산이 매우 어려운 옵션에 해당됩니다. 이러한 계산이 매우 쉽다면 차이가 없을 것입니다. EMA 표시기는 그러한 측정에 사용하기에는 너무 원시적인 계산을 가지고 있습니다. 이 사이트의 마지막 기사 중 하나에서 JMA 지표 계산이 매우 어려운 EA의 변형을 게시했습니다. 표시기 호출이 없는 코드가 있는 변형은 3배 더 빠르게 작동합니다.

저는 개인적으로 누구에게도 증명하고 싶은 생각이 전혀 없고, 제 눈으로 직접 본 결론을 단언컨데, 물론 끝없이 하지는 않습니다. 최신 빌드 MT4에서 이 사진이 어떻게든 다르게 보이기 시작했습니다. 그리고 MT5에서도 처음에는 모든 것이 완전히 비슷했습니다. 그러나 나는 그러한 세부 사항을 추적하지 않으므로 이제 모든 것이 정확히 동일하게 유지되었다고 말할 수 없습니다.

 

GODZILLA :

이 사이트의 마지막 기사 중 하나에서 JMA 지표 계산이 매우 어려운 EA의 변형을 게시했습니다. 표시기 호출이 없는 코드가 있는 변형은 3배 더 빠르게 작동합니다.

여기 ? 결론은 간단합니다. 3가지 옵션이 있습니다.

1. 표시기 호출이 없는 코드가 잘못 작성되어 있을 가능성이 없습니다.

2. 지표가 비효율적으로 작성되었습니다.

3. 주어진 수치는 현실을 반영하지 않습니다.

 
GODZILLA :

5센트를 더하겠습니다.

지표 코드가 Expert Advisor에 완전히 배치되는 Expert Advisors의 작업 속도는 종종 사용자 지정 지표 호출을 사용하는 상대방보다 3배 더 빠릅니다. 이것은 지표 계산이 매우 어려운 옵션에 해당됩니다. 이러한 계산이 매우 쉽다면 차이가 없을 것입니다. EMA 지표는 그러한 측정에 사용하기에는 너무 원시적인 계산을 가지고 있습니다. 이 사이트의 마지막 기사 중 하나에서 JMA 지표 계산이 매우 어려운 EA의 변형을 게시했습니다. 표시기 호출이 없는 코드가 있는 변형은 3배 더 빠르게 작동합니다.

저는 개인적으로 누구에게도 증명하고 싶은 생각이 전혀 없고, 제 눈으로 직접 본 결론을 단언컨데, 물론 끝없이 하지는 않습니다. 최신 빌드 MT4 이 사진이 어떻게 든 다르게 보이기 시작했습니다. 그리고 MT5에서도 처음에는 모든 것이 완전히 비슷했습니다. 그러나 나는 그러한 세부 사항을 추적하지 않으므로 이제 모든 것이 정확히 동일하게 유지되었다고 말할 수 없습니다.


날 웃게 하지마 지표를 작성하는 방법을 아직 배우지 않았을 뿐입니다.

이 이단 이후:

 //---- ЭМУЛЯЦИЯ ИНДИКАТОРНЫХ БУФЕРОВ
  int NewSize = iBars(symbol, timeframe);
  //----  Проверка на смену нулевого бара
  if ( ArraySize (Ind_Buffer0) < NewSize)
    {
      //---- Установить прямое направление индексирования в массиве 
      ArraySetAsSeries (Ind_Buffer0, false);
      ArraySetAsSeries (Ind_Buffer1, false);
      ArraySetAsSeries (Ind_Buffer2, false);
      //---- Изменить размер эмулируемых индикаторных буферов 
      ArrayResize (Ind_Buffer0, NewSize); 
      ArrayResize (Ind_Buffer1, NewSize); 
      ArrayResize (Ind_Buffer2, NewSize); 
      //---- Установить обратное направление индексирования в массиве 
      ArraySetAsSeries (Ind_Buffer0, true);
      ArraySetAsSeries (Ind_Buffer1, true);
      ArraySetAsSeries (Ind_Buffer2, true); 
    } 
//----

일반적으로 이 주제에 대한 의견을 자제할 수 있습니다.

 

오해 #1: IndicatorCounted() 없이 할 수 있습니다

터키:

 #property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Red

extern double Alpha = 0.9 ;

double EMA[];

int init()
{
   SetIndexBuffer ( 0 , EMA);
   return ( 0 );
}

int start()
{
   int toCount = MathMin ( Bars - 1 , Bars - IndicatorCounted());
   if (toCount == Bars - 1 ) EMA[ Bars - 1 ] = Open[ Bars - 1 ];
   for ( int i = toCount - 1 ; i >= 0 ; i--)
   {
      EMA[i] = ( 1 - Alpha)*Open[i] + Alpha*EMA[i + 1 ];
   }
   return ( 0 );
}

그것 없이는 hrenfx 원칙에 따라

 #property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Yellow

extern double Alpha = 0.9 ;

double EMABuffer[];

double GetPrice( int Shift )
{
   return (Open[Shift]);
}

double EMA;

int init()
{
   EMA = GetPrice( Bars - 1 );

   SetIndexBuffer ( 0 , EMABuffer);
   return ( 0 );
}

double GetEMA()
{
   static int PrevTime = 0 ;

   if (PrevTime == Time[ 0 ])
       return (EMA);

   int i = iBarShift( Symbol (), Period (), PrevTime) - 1 ;

   PrevTime = Time[ 0 ];
   while (i >= 0 )
   {
      EMA = EMA * Alpha + ( 1 - Alpha) * GetPrice(i);
      EMABuffer[i] = EMA;
      i--;
   }
   return (EMA);
}

void start()
{
  GetEMA();
}

다음으로 우리는 칠면조를 차트에 던지고 기계 작동 중 통신 손실을 에뮬레이트합니다. 결과:


 

네 저도 좀 조사해봤습니다. 물론, 사실, 플랫폼 개발자의 똥을 어지럽히는 것은 말도 안되지만 그게 요점이 아닙니다.

내 Expert Advisor를 지표로 전환했습니다. 당신과 마찬가지로 나는 고문의 지표와 고문의 지표가 동일한 결과를 보여야한다고 확신했습니다. 왜냐하면. 둘 다 틱에서 "트리거"됩니다. 그러나 어떻게 든 그들은 다르게 작동합니다. 연결이 나타난 후 첫 번째 눈금의 EA는 EA에서 수신한 표시기와 완전히 다르게 동작합니다. 자신을 확인할 수 있습니다.

위의 스크린샷은 연결 해제 후 Expert Advisor(Expert Advisor의 표시기가 아님)가 iCustom과 비교되는 것을 볼 수 있는 스크린샷입니다. 거기에서 연결은 문제 없이 끊어집니다.

 

연결이 끊어진 후 첫 번째 틱에서 표시기가 즉시 작동하지 않는다고 가정합니다. 보다 정확하게는 표시기가 IndicatorCounted() 함수의 실행을 기다립니다. 그리고 이 기능은 (연결에 따라) 몇 초까지 실행될 수 있습니다. 저것들. 그러한 계획:

  1. 연결 해제 후 첫 번째 틱.
  2. 표시기가 시작되었습니다.
  3. IndicatorCounted()가 한동안 실행 중입니다(Indicator의 본문에 IndicatorCounted()가 없는 경우에도 표시기 시작 직후인 것 같습니다).
  4. 결과를 받은 후 거래 환경이 업데이트됩니다.
  5. 그리고 표시기는 마치 첫 번째 틱이 아니라 IndicatorCounted() 결과 이전의 마지막 틱에서 시작된 것처럼 코드 실행을 시작합니다.

추신: 226번째 빌드에서 테스트 중입니다.

     
    "올인원" Expert Advisors의 절대적인 신뢰성을 위해서는 함수의 맨 처음에 EMPTY 표시기 및 RefreshRates() 호출을 시작해야 합니다. 이것은 이미 다운로드된 기록에 해당하는 첫 번째 틱에서 기록의 스와핑(중단 후)과 Expert Advisor의 실행을 보장합니다.
     
    hrenfx :
    "올인원" Expert Advisors의 절대적인 신뢰성을 위해서는 함수의 맨 처음에 EMPTY 표시기 및 RefreshRates() 호출을 시작해야 합니다. 이것은 이미 다운로드된 기록에 해당하는 첫 번째 틱에서 기록의 스와핑(중단 후)과 Expert Advisor의 실행을 보장합니다.


    이 추측에 대한 연구 및 검증을 게시할 수 있습니까?

    흠... 그렇다면 다운로드를 보장하는 옵션은 거의 없습니다.

    터미널과 Expert Advisor가 시작될 때 히스토리 스왑 문제에 대한 해결책이 없었던 ForexTools의 분기를 보았습니다.