오류, 버그, 질문 - 페이지 3030

 
Andrey Dik :

우리는 0을 반환하여 아직 아무 것도 계산하지 않았으며 다음 막대에서 precalc가 1만큼 증가하지 않을 것이라고 선언합니다.

즉, return(rates_total)을 반환할 때까지 상위 TF에서 데이터를 요청하기 시작한 막대에 있을 것입니다.

도움말에서: " 함수를 호출할 때 prev_calculated 매개변수에는 이전 호출 에서 OnCalculate() 함수 반환 한 값이 포함되어 있습니다 ."
 
mktr8591 :
도움말에서: " 함수를 호출할 때 prev_calculated 매개변수에는 이전 호출 에서 OnCalculate() 함수 반환 한 값이 포함되어 있습니다 ."

예, 많은 것들이 도움말에 작성되어 있지만 항상 명확하지는 않습니다. 불행히도 (개발자에 대한 책망이 아님) 공부하고, 연구하고, 공부해야합니다. 하지만. 이 지점이 존재하는 이유는 증명서나 상식에 어긋나는 일이 가끔 발견되기 때문입니다. A100은 우리의 영웅입니다. 아무도 자신의 의지로 오르지 않는 곳도 오르기 때문입니다.))

 
Сергей Таболин :

1. 모두 덕분에 지표에 대해 좀 더 이해하게 되었습니다 )))

2. Andrey, 누군가가 (나를 포함하여) 당신의 조작을 이해하지 못한다면 이것은 단지 한 가지 의미입니다. 당신은 그림을 올바르게 그리지 못하고 있습니다! 더 정확하게는-많은 사람들이 이해하지 못하는 방식으로 그립니다 ...

진실이 더 중요합니다. 불행히도 이것이 모든 사람에게 항상 명확한 것은 아닙니다.

 

Andrey Dik :

우리는 0을 반환하여 아직 아무 것도 계산하지 않았으며 다음 막대에서 precalc가 1만큼 증가하지 않을 것이라고 선언합니다.

그런 다음 return(rates_total)은 rate_total만큼 prev_calc를 증가시켜야 합니까?

 
Andrey Dik :

우리는 0을 반환하여 아직 아무 것도 계산하지 않았으며 다음 막대에서 precalc가 1만큼 증가하지 않을 것이라고 선언합니다.

계산 자체를 재설정하고 0으로 재설정한다고 불평함)

 
Andrey Dik :

매 틱마다가 아니라 한 번만 새 막대를 계산할 수 있습니다.

우리는 감당할 수 없기 때문에 터미널은 "이전 TF"에서 온라인으로 기록 데이터를 생성하지 않습니다.

여기에서는 일반적으로 다음과 같은 가정이 필요합니다.

- 또는 지표 내부에 OHLC를 직접 구축합니다.

- 또는 터미널이 독립적으로 OHLC를 구축합니다.


후자의 경우 터미널이 일반적으로 시간 프레임이 상호 작용하는 방식, 누가 " 새 막대 " 이벤트에서 어떤 일이 발생하는지의 배수인지를 인식하지 못한다는 점을 고려해야 합니다. 그러나 터미널이 필요한 시간 프레임을 구축하도록 해야 합니다. 자신의


두 번째 지표에서 다음 코드를 시도하십시오.

 int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
{
   double buff [];
   if (prev_calculated == 0 )
   {
       if ( iBars ( Symbol (), OldTF) != BarsCalculated (Handle))
      {
         Print ( "Индикатор на периоде " , OldTF, " ещё не рассчитан" );
         return 0 ;
      }
   }
   else
   {
       if (rates_total == prev_calculated)
      {
         if ( CopyBuffer (Handle, 0 , 0 , 1 , buff)< 0 ) return 0 ;
         return rates_total;
      }
   }

   ulong t = GetMicrosecondCount ();

...... далее без изменений
 
Andrei Trukhanovich :

계산 자체를 재설정하고 0으로 재설정한다고 불평함)

Andrey, 코드를 실행하십시오. 제발... 시작하지 마세요. 응? 난 당신과 싸울 수 없습니다.

 
Igor Makanu :

우리는 감당할 수 없기 때문에 터미널은 "이전 TF"에서 온라인으로 기록 데이터를 생성하지 않습니다.

여기에서는 일반적으로 다음과 같은 가정이 필요합니다.

- 또는 지표 내부에 OHLC를 직접 구축합니다.

- 또는 터미널이 독립적으로 OHLC를 구축합니다.


후자의 경우 터미널이 일반적으로 TF가 상호 작용하는 방식, 누가 " 새 막대 " 이벤트에서 무엇을 하고 어떤 일이 일어나는지 알지 못한다는 점을 고려해야 합니다.


두 번째 지표에서 다음 코드를 시도하십시오.

당신의 코드는 매 틱마다 계산을 깨뜨릴 것입니다. 저는 관심도 없고 실행조차 하지 않을 것입니다. 사용된 모든 표시기의 모든 눈금이 아니라 사용된 모든 표시기에 대해 각 막대에 대해 한 번만 계산을 수행하면 됩니다.

 
Andrey Dik :

당신의 코드는 매 틱마다 계산을 깨뜨릴 것입니다. 저는 관심도 없고 실행조차 하지 않을 것입니다. 사용된 모든 표시기의 모든 눈금이 아니라 사용된 모든 표시기에 대해 각 막대에 대해 한 번만 계산을 수행하면 됩니다.

내 코드는 다음과 같이 작성한 표시기 번호 1만 " 모든 틱 에서 타작"합니다.

 if (rates_total == prev_calculated) return rates_total;

이렇게 하면 터미널이 "선임 TF"를 독립적으로 구축할 수 있습니다.

저에게는 "이전 시간대"의 기록을 동기화할 때 코드에서 발생하는 표시기 1번의 완전한 재계산을 수행하는 것보다 "저렴합니다"

 
Andrey Dik :

Andrey, 코드를 실행하십시오. 제발... 시작하지 마세요. 응? 난 당신과 싸울 수 없습니다.

바꾸다

 if ( SeriesInfoInteger ( Symbol (), OldTF, SERIES_SYNCHRONIZED ))
   {
       if ( iBars ( Symbol (), OldTF) != BarsCalculated (Handle))
      {
         Print ( "Индикатор на периоде " , OldTF, " ещё не рассчитан" );
         return 0 ;
      }
   }
   else 
   {
     Print ( "Период " , OldTF, " не синхронизирован." );
     return 0 ;
   }

 if ( SeriesInfoInteger ( Symbol (), OldTF, SERIES_SYNCHRONIZED ))
   {
       if ( iBars ( Symbol (), OldTF) != BarsCalculated (Handle))
      {
         Print ( "Индикатор на периоде " , OldTF, " ещё не рассчитан" );
         return prev_calculated;
      }
   }
   else 
   {
     Print ( "Период " , OldTF, " не синхронизирован." );
     return prev_calculated;
   }

그리고 테스트.