초기화 시 ChartNavigate - 페이지 2

 
Ihor Herasko :

그리고 진드기가 없으면 주말? 그런 다음 타이머를 연결해야 합니다.

그리고 결국 한 가지 질문을 해결해야 합니다. 성공적인 ChartNavigate 처리 사실을 결정하는 방법은 무엇입니까? true를 반환한다는 사실은 "보여주기 위해"일 뿐이며 실제 작업에 어떤 식으로든 도움이 되지 않습니다.

제가 위에 어드바이저에 올렸던 코드를 확인하셔야 합니다...

 
Vladimir Karputov :

제가 위에 어드바이저에 올렸던 코드를 확인하셔야 합니다...

그리고 고문은 어떻습니까?

 
Ihor Herasko :

그리고 고문은 어떻습니까?

확인이 필요합니다...

 //+------------------------------------------------------------------+
//|                                                  Test EA.mq5.mq5 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
//--- input parameters
input bool redraw= true ;
input ENUM_CHART_POSITION position= CHART_BEGIN ;
//---
long count= 0 ;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
   count= 0 ;
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
   Comment ( "" );
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   count++;
//Comment(count);
   if (count== 9 || count== 19 )
     {
       ResetLastError ();
       if (position== CHART_BEGIN )
        {
         if ( ChartNavigate ( ChartID (), CHART_BEGIN , 100 ))
             Print ( "Успешно. redraw " ,redraw, ". position " , EnumToString (position));
         else
             Print ( "Ошибка №" , GetLastError (), ". redraw " ,redraw, ". position " , EnumToString (position));
        }
       if (position== CHART_END )
        {
         if ( ChartNavigate ( ChartID (), CHART_END ,- 100 ))
             Print ( "Успешно. redraw " ,redraw, ". position " , EnumToString (position));
         else
             Print ( "Ошибка №" , GetLastError (), ". redraw " ,redraw, ". position " , EnumToString (position));
        }
       if (redraw)
         ChartRedraw ();
     }
//--- получим номер самого первого видимого на графике бара (нумерация как в таймсерии) 
   long first_bar= ChartGetInteger ( 0 , CHART_FIRST_VISIBLE_BAR , 0 );
//--- добавим символ переноса строки 
   string comm= "\r\n" ;
//--- дополним коментарий 
   comm=comm+ "Первый бар на графике имеет номер " + IntegerToString (first_bar)+ "\r\n" ;
//--- выведем комментарий 
   Comment (comm);
  }
//+------------------------------------------------------------------+
파일:
Test_EA.mq5  6 kb
 

Vladimir Karputov :

여기에 이러한 표시기가 있습니다. 특히 9틱의 지연, 두 가지 유형의 차트 이동 및 강제 다시 그리기 플래그(켜기/끄기)를 설정했습니다.

당신은 초보자가 아닙니다. 왜 오해하는거야? 왜 Renat Fatkhullin의 말을 무시합니까?

코드 에서(What is here , what is here ) 각 틱에 대한 주석을 생성하여 각 틱에서 차트를 강제로 다시 그립니다.


즉, 입력 매개변수의 플래그가 활성화 또는 비활성화되었는지 여부에 관계없이.


그리고 이 경우 입력 매개변수에 플래그를 포함하면 C hartRedraw ()를 통해 추가로 다시 그리기만 발생합니다.

즉, 유용하기보다는 주석을 생성하여 이미 존재하는 사람들에게 추가 부하를 생성합니다.

추신.:

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

오류, 버그, 질문

레나트 팻쿨린 , 2017.12.05 02:51

...

MT5에서 주석 기능은 명시적으로 차트가 다시 그려지도록 합니다...

차이점은 바로 이것입니다.


Comment를 호출한 후 MT4에서 ChartRedraw()가 강제 실행되면 동작은 여전히 MT5와 같지 않습니다. Metatrader 4의 ChartRedraw()는 주석 값을 무시하고 마지막 프레임에서 차트를 업데이트할지 여부를 자체적으로 결정합니다. 물론 차트 데이터 무효화를 일으키는 초당 수백 개의 따옴표가 없는 경우 ChartRedraw는 "변경되지 않은 차트를 그리는 이유"를 결정하고 프레임 그리기를 건너뜁니다.

Metatrader 5도 동일한 시스템을 가지고 있지만 무조건 렌더링을 우선시하는 경우가 더 많습니다.

터미널은 그래픽 응용 프로그램이며 초당 수백 프레임을 전달할 수 있으며 성능을 향상시키기 위해 디스플레이 절약 모드에서 작동합니다.


따라서 벤치마크를 수행할 때 추가 결론은 다음과 같습니다.

  • ChartRedraw 호출은 차트의 실제 그림으로 간주할 수 없습니다.

  • 당신은 항상 "프레임이 그려진 이유"와 "단말이 프레임을 다시 그리기로 결정하도록 시장의 내부 그림을 무효화합니까?"라는 진술을 알고 증명해야합니다.

  • 벤치마크 중에 여러 가지 결론을 내릴 수는 없습니다.

  • MT5에는 차트의 개체를 변경하는 데 더 정확한 시스템이 있으며 읽기/쓰기 명령을 혼합한 결과를 명확하게 이해해야 합니다.
    읽기/쓰기 명령을 혼합하지 말고 대량 읽기 및 대량 쓰기 명령을 별도로 수행하는 것이 좋습니다.

  • 벤치마크에서 차트를 자주 다시 그리면 결과가 그래픽 카드에 크게 의존하게 됩니다.
    실제로 일부 테스트에서는 알고리즘이나 기능이 아니라 그래픽 카드를 테스트할 수 있습니다. 랩톱과 데스크톱 컴퓨터에서의 테스트는 단순히 3-5배 느린 비디오 카드 때문에 여러 배 다른 결과를 보여줄 수 있습니다.

이러한 실수는 항상 이루어집니다.


 

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

초기화 시 ChartNavigate

블라디미르 카르푸토프 , 2018.06.25 18:52

확인이 필요합니다...

...
void OnTick ()
  {
//---
   count++;
//Comment(count);
   if (count== 9 || count== 19 )
     {
       ResetLastError ();
       if (position== CHART_BEGIN )
        {
         if ( ChartNavigate ( ChartID (), CHART_BEGIN , 100 ))
             Print ( "Успешно. redraw " ,redraw, ". position " , EnumToString (position));
         else
             Print ( "Ошибка №" , GetLastError (), ". redraw " ,redraw, ". position " , EnumToString (position));
        }
       if (position== CHART_END )
        {
         if ( ChartNavigate ( ChartID (), CHART_END ,- 100 ))
             Print ( "Успешно. redraw " ,redraw, ". position " , EnumToString (position));
         else
             Print ( "Ошибка №" , GetLastError (), ". redraw " ,redraw, ". position " , EnumToString (position));
        }
       if (redraw)
         ChartRedraw ();
     }
//--- получим номер самого первого видимого на графике бара (нумерация как в таймсерии) 
   long first_bar= ChartGetInteger ( 0 , CHART_FIRST_VISIBLE_BAR , 0 );
//--- добавим символ переноса строки 
   string comm= "\r\n" ;
//--- дополним коментарий 
   comm=comm+ "Первый бар на графике имеет номер " + IntegerToString (first_bar)+ "\r\n" ;
//--- выведем комментарий 
   Comment (comm);
  }
//+------------------------------------------------------------------+

P./S.: 두 번째 코드에 추가: 텍스트 항목을 업데이트하고 동일한 댓글을 통해 게시하기 전에 데이터가 변경되었는지 확인하십시오. 그렇지 않은 경우 텍스트 및 출판물의 업데이트를 연기하는 것이 좋습니다.

즉, 이 경우 차트의 첫 번째 막대의 번호가 변경되었는지 여부

 
Vladimir Karputov :

확인이 필요합니다...

음. 무엇을 위한 것인지 잘 이해가 되지 않습니다. 알겠습니다. 설치되었습니다. CHART_BEGIN 및 CHART_END 모드에서 확인되었습니다. 모든 것이 명시된 대로 작동합니다. 재부팅 후 모든 것이 정상입니다.

또는 목발을 사용하는 경향이 있습니다. ChartNavigate 이후 차트의 첫 번째 막대 번호를 확인하고, 그렇지 않은 경우 ChartNavigate를 다시 실행해야 합니다.

네, 출력은 물론 저도 생각했습니다. 그러나 터미널의 이러한 기능에 대해 끊임없이 기억하는 것은 이미 지루합니다. 이것이 버그일 가능성이 있습니다.

 
Dina Paches :

P./S.: 두 번째 코드에 추가: 텍스트 항목을 업데이트하고 동일한 댓글을 통해 게시하기 전에 데이터가 변경되었는지 확인하십시오. 그렇지 않은 경우 텍스트 및 출판물의 업데이트를 연기하는 것이 좋습니다.

즉, 이 경우 차트의 첫 번째 막대의 번호가 변경되었는지 여부

물론 정보를 주셔서 감사합니다. 하지만 여기서 성능에 대해 이야기하는 것은 아닙니다. 논의 중인 문제는 약간 다른 평면에 있으며 문제의 징후를 확인하기 위한 테스트 코드일 뿐입니다))

 
Ihor Herasko :

물론 정보를 주셔서 감사합니다. 하지만 여기서 성능에 대해 이야기하는 것은 아닙니다. 논의 중인 문제는 약간 다른 평면에 있으며 문제의 징후를 확인하기 위한 테스트 코드일 뿐입니다))

물론이죠. 그러나 당신이 인용한 내 다른 게시물 을 참조하십시오.

P./S.: 할인하지 마세요. 나는 그것이 수반하는 것을 알고 그러한 코드를 가지고 있으며 더 이상 시작하지 않을 것입니다. 내 기술은 국가 소유가 아닙니다.

 
Ihor Herasko :

음. 무엇을 위한 것인지 잘 이해가 되지 않습니다. 알겠습니다. 설치되었습니다. CHART_BEGIN 및 CHART_END 모드에서 확인되었습니다. 모든 것이 명시된 대로 작동합니다. 재부팅 후 모든 것이 정상입니다.

또는 목발을 사용하는 경향이 있습니다. ChartNavigate 이후 차트의 첫 번째 막대 번호를 확인하고, 그렇지 않은 경우 ChartNavigate를 다시 실행해야 합니다.

네, 출력은 물론 저도 생각했습니다. 그러나 터미널의 이러한 기능에 대해 끊임없이 기억하는 것은 이미 지루합니다. 이것이 버그일 가능성이 있습니다.

예전에는 내비게이션이 있었다. 이제 특별 점검이 있습니다.


추가됨: 댓글에 주의를 기울이지 마세요 :)

 
Vladimir Karputov :

예전에는 내비게이션이 있었다. 이제 특별 점검이 있습니다.


추가됨: 댓글에 주의를 기울이지 마세요 :)

에서 무엇을? 내가 말도 안 되는 글을 쓰거나 인용했습니까?