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

 

프로그램 속성(#property) 참조 :

tester_indicator

string

Имя пользовательского индикатора в формате " имя_индикатора.ex5". Необходимые для тестирования индикаторы определяются автоматически из вызова функций iCustom() , если соответствующий параметр задан константной строкой. Для остальных случаев (использование функции IndicatorCreate() или использование неконстантной строки в параметре, задающем имя индикатора) необходимо данное свойство

tester_file

string

Имя файла для тестера с указанием расширения, заключенное в двойные кавычки (как константная строка). Указанный файл будет передан тестеру в работу. Входные файлы для тестирования, если необходимы, должны указываться всегда

tester_library

string

Имя библиотеки с расширением, заключенное в двойные кавычки. Библиотека может быть как с расширением dll, так и с расширением ex5. Необходимые для тестирования библиотеки определяются автоматически. Однако, если какая-либо библиотека используется пользовательским индикатором, то необходимо использовать данное свойство

 
고맙습니다.
 

XAUUSD 데모 계정 의 틱 차트(마켓 리뷰)에는 지속적인 재설정이 있습니다.

그리고 또한:

"세부 정보"를 열고 빈 공간을 클릭하십시오.

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете - Документация по MQL5
 
gumgum :

XAUUSD 데모 계정 의 틱 차트(마켓 리뷰)에는 지속적인 재설정이 있습니다.

그리고 또한:

"세부 정보"를 열고 빈 공간을 클릭하십시오.

영구 재설정이 무엇을 의미하는지 완전히 명확하지 않습니다.

어떤 OS, OS 및 터미널의 비트 수는 무엇입니까?

 
Rosh :

설명서 가 말하기 때문에 가르치십시오. - 기술 지표 :

즉, 지표가 처음 실행될 때( 처음 으로 새 기간으로 전환 할 때) 지표 값이 아직 계산되지 않았기 때문에 prev_calculated=0입니다. 이 기간 으로 돌아갈 때 핸들이 아직 살아 있기 때문에 지표가 새로 생성되지 않으며 결과적으로 기존 핸들을 기반으로 차트에서 이미 존재하는 지표가 계산됩니다. 따라서 prev_calculated!=0

나는 내 말을 받아들일 준비가 되어 있었지만 마음이 바뀌었다. 내가 외적으로 얻은 결과는 모든 것이 항상 매끄럽지 않고 일부 예외가 있다고 말하지만 지금은 이러한 예외가 핸들과 관련이 있는지 아니면 다른 개그인지 이해가 되지 않습니다.

" 참고: OnCalculate 함수가 0 값을 반환하면 클라이언트 터미널의 DataWindow에 표시기 값이 표시되지 않습니다. " 서둘러 확신합니다. 결과를 내 머리 속에 문서화하고 효과를 직접 해석합니다. 표시기의 값은 그려지지 않을 뿐만 아니라 전체 표시기의 작업이 중지되고 명령 대기열이 정지되며 후속 명령의 처리를 기다리는 것이 불가능합니다. 여기, 사실, 이전 게시물에서 간략하게 보고한 내용이 있습니다.

이미 언급했듯이 코드에는 핸들을 포함하지 않는 Copy ... 명령이 많이 있습니다(즉, CopyBuffer 를 제외한 모든 것). if '체크를 통과하고 복사 결과가 <= 0이면 동일한 리턴 (0)을 수행한 후 " 지표 값이 표시되지 않음 "이며 일반적으로 표시기에 완전한 마비가 있습니다.

나는 너무 게으르지 않다. 수반되는 일반적인 마비와 함께 기본 비렌더링은 터미널의 논스틱 모드(즉, 주말 또는 오프라인)에서 관찰된다. 아무도 주말에 표시기를 디버그하고, 불필요한 제스처를 만들고, 시간 프레임을 실행하고, 인위적으로(수동으로) 첫 번째 그림을 시작하기를 원하지 않기 때문에 이것을 중요하지 않은 순간으로 간주하지 마십시오. 디버깅 뿐만 아니라...

솔직히 말해서, 나는 친절하게 제공된 링크를 문서의 예제에 연결할 만큼 똑똑하지 않았습니다. 문서에서는 기존 문제와 함께 이미 존재하는 핸들(및 제공된 다른 답변)에 대한 참조 수를 늘리는 것에 대해 설명합니다. 제 생각에는 다리가 전혀 자라지 않습니다.

다음 조건에서 첨부된 코드를 재생해 보십시오. 코드에 미리 정의된 시간 프레임이 D1 이고, 터미널의 현재 시간 프레임이 D1 이고, 터미널이 오프라인 상태입니다. 지정된 현재 시간 프레임의 차트에 지표를 놓으면 로깅 결과가 즉시 전문가 탭에 나타납니다.

이제 터미널을 완전히 언로드하고 다시 시작한 다음 D1 이외의 시간 프레임으로 전환합니다. 표시기 던지기 - 외부적으로는 다른(반드시 D1 은 아님) 시간 프레임으로 전환할 때까지 변경 사항이 발생하지 않습니다.

이 불쾌한 기능 때문에 미완성 지표와 함께 좋은 아이디어가 사라집니다.

개발자는 표시기에서 이 동작에 대한 설명을 찾을 것이라고 확신하지만 핸들에 미리 정의된 TF의 데이터가 모든 면에서 완벽하게 그려지고 사용자가 현재 해당 TF에 있을 때 그리고 켜져 있는 경우 불공평합니다. 다른 하나는 불필요한 제스처를 취하도록 강요됩니다. 나는 외부 표시기의 핸들을 사용할 때 시간 프레임 작업에서 평등을 지지하며 나머지 TF는 아무 죄도 없었습니다.

추신: 그래서... 그만. 이제 다시 확인했습니다. CopyHigh 는 여기에서 이 마비에도 영향을 미치지 않는 것으로 나타났습니다. 이제 나는 아무것도 이해하지 못합니다. 모든 의혹은 OnInit 에서 핸들에 급격히 떨어졌습니다 ...

PPS: 두 번째 코드 샘플을 추가했습니다. 응답하지 않더라도.

파일:
paralich.mq5  3 kb
paralich2.mq5  2 kb
 

문제의 경계를 찾았습니다.

주석 처리:

   SetIndexBuffer ( 0 ,FractalUpBuffer, INDICATOR_DATA );
   PlotIndexSetInteger ( 0 , PLOT_ARROW , 217 );
   PlotIndexSetInteger ( 0 , PLOT_ARROW_SHIFT ,ArrowShift);

- 그러면 문제가 사라지지만 SetIndexBuffer 를 통한 버퍼 바인딩의 일시적인 부정확성을 분명히 나타냅니다. 그리고 이것은 이미 SetIndexBuffer 사용을 포기 하고 제어된 버퍼의 크기를 수동으로 조작해야 할 필요성을 나타냅니다.

또한 첨부된 예제 는 BarsCalculated ( 핸들 )가 사전 정의된 값과 일치하지 않는 한 현재 TF에서 호출된 표시기 을 시간 에 계산할 수 없거나 기본적으로 계산하려는 의지가 없음을 분명히 보여줍니다. 처음 (대부분 이 옵션). 이 경우 값은 <=0, 반환 (0) 및 결과적으로 stopper가 됩니다.

 
alexvd :

영구 재설정이 무엇을 의미하는지 완전히 명확하지 않습니다.

어떤 OS, OS 및 터미널의 비트 수는 무엇입니까?

W7 및 MT5 64비트.

예시:

XAUUSD는 지속적으로 처음으로 재설정됩니다.(XAGUSD는 비교를 위해 제공되었습니다)

 
x100intraday :

문제의 경계를 찾았습니다.

주석 처리:

- 그러면 문제가 사라지지만 SetIndexBuffer 를 통한 버퍼 바인딩의 일시적인 부정확성을 분명히 나타냅니다. 그리고 이것은 이미 SetIndexBuffer 사용을 포기 하고 제어된 버퍼의 크기를 수동으로 조작해야 할 필요성을 나타냅니다.

또한 첨부된 예 는 BarsCalculated ( 핸들 )가 사전 정의된 것과 일치하지 않는 한 현재 TF에서 호출된 표시기의 값을 적시에 계산할 수 없음을 분명히 보여줍니다. 이 경우 값은 <=0, 반환 (0) 및 결과적으로 stopper가 됩니다.

첫 번째 예(두 번째 예는 보지 않았습니다)에 따르면 paralich 표시기에 기능이 있습니다.

 //+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool FillArraysFromBuffers( double &up_arrows[], datetime &up_times[], int ind_handle, int amount)
  {
   if ( CopyBuffer (ind_handle, 0 , 0 ,amount,up_arrows)< 0 ) return ( false );
   else CopyTime ( _Symbol , PERIOD_D1 , 0 ,amount,up_times);

   return ( true );
  }

따라서 지표가 D1에 있고 H1 시간 프레임에서 지표 버퍼로 데이터를 복사하려고 한다고 상상해 보십시오. 요소 수가 일치하지 않습니다. 나는 당신의 문제가 바로 여기에 있다고 생각합니다. 데이터를 복사하기 전에 검사가 없습니다.

다른 기간에서 데이터를 가져오는 지표의 예는 각 기술 지표에 대한 도움말에서 찾을 수 있습니다. 예: https://www.mql5.com/ru/docs/indicators/iama :

 //--- узнаем количество рассчитанных значений в индикаторе
   int calculated= BarsCalculated (handle);
   if (calculated<= 0 )
     {
       PrintFormat ( "BarsCalculated() вернул %d, код ошибки %d" ,calculated, GetLastError ());
       return ( 0 );
     }
//--- если это первый запуск вычислений нашего индикатора или изменилось количество значений в индикаторе iAMA
//--- или если необходимо рассчитать индикатор для двух или более баров (значит что-то изменилось в истории)
   if (prev_calculated== 0 || calculated!=bars_calculated || rates_total>prev_calculated+ 1 )
     {
       //--- если массив iAMABuffer больше, чем значений в индикаторе iAMA на паре symbol/period, то копируем не все 
       //--- в противном случае копировать будем меньше, чем размер индикаторных буферов
       if (calculated>rates_total) values_to_copy=rates_total;
       else                        values_to_copy=calculated;
     }
   else
     {
       //--- значит наш индикатор рассчитывается не в первый раз и с момента последнего вызова OnCalculate())
       //--- для расчета добавилось не более одного бара
      values_to_copy=(rates_total-prev_calculated)+ 1 ;
     }
Документация по MQL5: Технические индикаторы / iAMA
Документация по MQL5: Технические индикаторы / iAMA
  • www.mql5.com
Технические индикаторы / iAMA - Документация по MQL5
 
x100intraday :

다음 조건에서 첨부된 코드를 재생해 보십시오. 코드에 미리 정의된 시간 프레임이 D1 이고, 터미널의 현재 시간 프레임이 D1 이고, 터미널이 오프라인 상태입니다. 현재 시간이 지정된 차트에 지표를 놓으면 전문가 탭에 로깅 결과 가 즉시 나타납니다.

그리고 일반적으로 많은 메시지를 받지 않기 위해 로깅 대신 디버깅을 사용하려고 했습니까? 메타에디터 도움말프로그램 개발디버깅
 
Rosh :

따라서 지표가 D1에 있고 H1 기간의 데이터를 지표 버퍼 로 복사하려고 한다고 상상해 보십시오. 요소 수가 일치하지 않습니다. 나는 당신의 문제가 바로 여기에 있다고 생각합니다. 데이터를 복사하기 전에 확인이 없습니다.

먼저 Copy...- 함수를 사용하여 값을 복사할 때 배열 오버플로가 발생하지 않는 경우 클라이언트 터미널의 Expert Advisors에서 " Array out of range "라는 오버플로 오류 메시지가 발생하는지 먼저 설명하겠습니다. 성공적인 컴파일 후 표시기 작동 중에 이미 이러한 메시지가 생성되는 것을 기억하지만 정확히 무엇을 말할 수는 없습니다. 제 생각에는 이것은 복사용이 아닙니다... - 기능이 전혀 없지만 존재하지 않는 인덱스에 액세스하거나...

둘째, 검증 부족에 대한 귀하의 가설이 완전히 옳지 않다는 것을 서둘러 말씀드립니다. 잘못 구성된 if-else 필터에 대해서만 이야기할 수 있지만 완전한 부재에 대해서는 이야기할 수 없습니다. 이미 그것에 대해 수십 번 이상 비틀 거렸습니다. 최근에 나는 여기나 "Dummies"에서 현재 시간과 다른 시간 프레임에 대한 rates_total 아날로그에 대해 질문했지만 누구에게서도 답을 받지 못했습니다. 사실 Rates_total 은 현재 시간 프레임의 매개변수 중 하나지만 저에게는 완전히 쓸모가 없습니다. 다른 많은 시간 프레임과 함께 작업하기 때문입니다. 어떻게든 가끔 사전 정의된 시간 프레임 중 하나에서 자신을 발견하더라도 여전히 사용합니다. 계산 대신 rate_total TF- 범용 계산 = BarsCalculated ( 핸들 ). 내가 큰 실수를 하고 있을지도 모르지만 이 작업에 대해 Rates_total 의 이점을 보지 못합니다.

셋째, 나는 시니어 타임프레임에 있을 때 주니어 타임프레임의 값을 성공적으로 복사하고 재배포할 수 있으며 그 반대의 경우도 마찬가지 임을 오랫동안 확인할 수 있었습니다. 제가 며칠 전에 드린 예는 아주 적지만, 모든 것이 다 있습니다. 두 개의 서로 다른 TF의 요소 수 사이의 불일치는 결핍과 초과의 두 가지 유형일 수 있습니다. 첫 번째 옵션은 끔찍하지 않지만 두 번째 옵션에서 오버플로가 있는지 확인하고 문제가 발생하면 제한하려고 합니다. 논리적으로, 표시기는 오버플로의 경우에만 Copy 기능의 누락 검사로 인해 혼미에 빠지지만 다른 TF에서 복사한 막대가 의 막대 수보다 적은 경우에도 혼미에 빠집니다. 현재 것.

넷째, 표시기는 현재 일주일 동안 구워지고 검증되었으며 명백한 오류(컴파일 중 또는 작동 중)를 제공하지 않으며 암시적인 문제만 남습니다. 그 중 하나는 특정 TF에 대한 초기 비도면입니다. M1 으로 다시 전환하면 계산 시간이 급격히 증가합니다(처음으로 모든 것이 2-3초 이내에 계산됨). 표시기가 계산에 갇힌 것 같습니다(눈사태 같은 메모리 누수?) CopyBuffer 를 사용하여 복사된 요소 수를 전체 기록 대신 최대 200개로 제한했지만 상황이 바뀌지는 않았습니다. M1 의 오프라인과 다른 모든 곳에서 계산은 처음과 같이 항상 빠릅니다. 온라인에서는 상황이 극적으로 변합니다(분명히 문제는 모든 틱에서 무언가를 전달하는 바로 조건부 필터에 있습니다. 다시 그리기의 빈도는 새로운 - 0 - 막대 그리기에 따라 다르며 핸들 중 하나에서 미리 지정된 가장 낮은 TF보다 더 빈번할 수 없기 때문에 그래야 합니다. 작지만 불쾌한 문제에서: 마우스 휠로 차트를 스크롤하려는 가장 작은 시도는 모든 프랙탈을 비물질화하고 계산되고 다시 그려질 때까지 기다려야 합니다(새 막대가 없었지만 다시 계산할 것이 없는 것 같습니다).