초기화 시 ChartNavigate - 페이지 5

 
Ihor Herasko :

아니, 난 돌아오지 않을거야. 그것이 바로 요점이기 때문입니다. 이 모든 것이 무엇을 위한 것인지 조금 더 말씀드리겠습니다. 상인은 테스터처럼 차트를 사용합니다. 표시기는 추정되는 현재 시간의 오른쪽에 있는 실제 차트의 일부를 숨깁니다(사실, 이 시간은 역사의 어딘가에 있습니다). F12 키를 누르면 온라인 차트의 다음 캔들이 표시되는 등입니다. 따라서 인디케이터가 부착된 터미널을 다시 시작하면 정확히 트레이더가 조사를 완료한 위치로 차트 위치를 반환하지 않는 것입니다. 결과적으로 터미널이 차트 표시를 마지막 실제 캔들로 전환하기 때문에 그는 빈 차트를 얻습니다. 그리고 이것은 터미널이 완전히 다른 장소에서 언로드되었다는 사실에도 불구하고.

흥미로운 관찰입니다. 나는 그것을 직접 확인했다 - 아아, 아, 아무것도 바뀌지 않았습니다. 마찬가지로 재부팅하면 최신 가격이 표시됩니다.

시계를 확인하는 것이 좋습니다. 이 모든 것을 빌드 1861에서 테스트 중입니다. 어느 것이 있습니까?

아마도 다음과 같은 줄을 추가하십시오.

   ChartSetInteger ( 0 , CHART_AUTOSCROLL , false );
   ChartSetInteger ( 0 , CHART_SHIFT , false );
   ChartNavigate ( 0 , CHART_END , 0 );

그리고 나서 교대?

아니면 아무데도 움직이지 마세요. 이것도 문제 없이 작동합니다.

 ChartNavigate ( 0 , CHART_CURRENT_POS , 0 )

어느 막대에서 터미널이 닫혔는지, 이 막대에서 열렸습니다.

그러나 이 옵션은 차트를 비활성 창에 유지합니다. 아아 그리고 아. 이 코드가 없어도 그래프는 그대로 유지됩니다.

 
Alexey Viktorov :

아마도 다음과 같은 줄을 추가하십시오.

그리고 나서 교대?

예, 정식 버전에는 모든 것이 있습니다. 터미널을 다시 시작하지 않고 작업하면 모든 것이 정상입니다. 그러나 재부팅하면 이러한 문제가 발생합니다. 또한 목발 솔루션조차도 항상 도움이되는 것은 아닙니다. 나는 더 탐구할 것이다.

 
Ihor Herasko :

예, 정식 버전에는 모든 것이 있습니다. 터미널을 다시 시작하지 않고 작업하면 모든 것이 정상입니다. 그러나 재부팅하면 이러한 문제가 발생합니다. 또한 목발 솔루션조차도 항상 도움이되는 것은 아닙니다. 나는 더 탐구할 것이다.

그러나 터미널을 다시 시작하는 것도 실험했습니다. 무엇이 문제가 될 수 있습니까? 업데이트를 다운로드했지만 지금은 업데이트를 취소했습니다. 당신도 업그레이드 할 수 있습니까?
 
Alexey Viktorov :
그러나 터미널을 다시 시작하는 것도 실험했습니다. 무엇이 문제가 될 수 있습니까? 업데이트를 다운로드했지만 지금은 업데이트를 취소했습니다. 당신도 업그레이드 할 수 있습니까?

1865 빌드로 업데이트되었습니다. 문제가 여전히 존재합니다.

또한 차트에 데이터를 완전히 로드하고 ChartNavigate()를 사용하여도 차트가 필요한 곳에 일정 시간 동안 표시되지만 새 틱으로 여전히 가장 최근 막대로 돌아가는 것으로 나타났습니다. 자동 스크롤 버튼이 꺼져 있고 다른 표시기가 사용되지 않습니다.

차트를 수동으로 이동하면 이와 같은 일이 발생하지 않습니다. 완전한 혼란 속에 있는 동안. 내일도 새로운 마음으로 계속 탐험을 하고, 어딘가에서 엉망이 되었을 수도 있습니다.

 
MetaTrader 5 x64 build 1870 started (MetaQuotes Software Corp.)
Windows 10 (build 17134 ) x64, IE 11 , UAC, Intel Core i3- 3120 M  @ 2.50 GHz, Memory: 4720 / 8077 Mb, Disk: 301 / 464 Gb, GMT+ 2
C:\Users\barab\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075

스크립트. CHART_CURRENT_POS 에서만 안정적으로 작동합니다. CHART_BEGIN 및 양수 "Shift", 그리고 CHART_END 및 음수 "Shift"를 사용하면 차트가 최신 가격으로 이동하지 않거나 자동 스크롤 버튼이 활성화된 느낌으로 점프(자체적으로 되감기)합니다.

 //+------------------------------------------------------------------+
//|                                                       Test_1.mq5 |
//|                              Copyright © 2018, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2018, Vladimir Karputov"
#property link        "http://wmua.ru/slesar/"
#property version    "1.000"
#property script_show_inputs
//--- input parameters
input ENUM_CHART_POSITION   InpPosition = CHART_CURRENT_POS ;     // Chart Position  
input int                   InpShift    = - 1 ;                   // Shift
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
//---
   ResetLastError ();
//--- получим номер самого первого видимого на графике бара (нумерация как в таймсерии) 
   int chart_first_visible_bar=ChartFirstVisibleBar();
   if (chart_first_visible_bar==- 1 )
       return ;
//--- 
   string comm= "До: Первый бар на графике имеет номер " + IntegerToString (chart_first_visible_bar);
//--- выведем комментарий 
   Print (comm);
   if ( ChartNavigate ( ChartID (),InpPosition,InpShift))
       Print ( "ChartNavigate " , EnumToString (InpPosition), "," ,InpShift, " успешно" );
   else
       Print ( "Ошибка №" , GetLastError (), ", " , EnumToString (InpPosition));
//--- получим номер самого первого видимого на графике бара (нумерация как в таймсерии) 
   chart_first_visible_bar=ChartFirstVisibleBar();
   if (chart_first_visible_bar==- 1 )
       return ;
//--- 
   comm= "После: Первый бар на графике имеет номер " + IntegerToString (chart_first_visible_bar);
//--- выведем комментарий 
   Print (comm);
  }
//+------------------------------------------------------------------------------+ 
//| Gets the index of the first visible bar on chart.                            | 
//| Indexing is performed like in timeseries: latest bars have smallest indices. | 
//+------------------------------------------------------------------------------+ 
int ChartFirstVisibleBar( const long chart_ID= 0 )
  {
//--- prepare the variable to get the property value 
   long result=- 1 ;
//--- reset the error value 
   ResetLastError ();
//--- receive the property value 
   if (! ChartGetInteger (chart_ID, CHART_FIRST_VISIBLE_BAR , 0 ,result))
     {
       //--- display the error message in Experts journal 
       Print ( __FUNCTION__ + ", Error Code = " , GetLastError ());
     }
//--- return the value of the chart property 
   return (( int )result);
  }
//+------------------------------------------------------------------+

하나

 
Ihor Herasko :

1865 빌드로 업데이트되었습니다. 문제가 여전히 존재합니다.

또한 차트에 데이터를 완전히 로드하고 ChartNavigate()를 사용하여도 차트가 필요한 곳에 일정 시간 동안 표시되지만 새 틱으로 여전히 가장 최근 막대로 돌아가는 것으로 나타났습니다. 자동 스크롤 버튼이 꺼져 있고 다른 표시기가 사용되지 않습니다.

차트를 수동으로 이동하면 이와 같은 일이 발생하지 않습니다. 완전한 혼란 속에 있는 동안. 내일도 새로운 마음으로 계속 탐험을 하고, 어딘가에서 엉망이 되었을 수도 있습니다.

모든 것이 제자리에 있기를 바라는 것이 아니라 동일한 빌드를 갖기 위해 업데이트할 것을 제안했습니다.

Igor, 당신은 지표의 정식 버전에서 실험을 합니까, 아니면 실험용으로 실험을 합니까?

방금 터미널 다시 시작, 빌드 1865를 반복했는데 모든 것이 명확하게 해결되었습니다. 이 메시지를 작성하고, 때때로 차트를 보고, 차트 창을 전환합니다... 하지만 들어오는 틱 및 전환에도 불구하고 이동된 차트는 이전과 동일하게 유지됩니다.

전체 코드는 다음과 같습니다.

 #property indicator_chart_window
#property indicator_plots 0
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- indicator buffers mapping
   ChartSetInteger ( 0 , CHART_AUTOSCROLL , false );
   ChartSetInteger ( 0 , CHART_SHIFT , false );
   ChartNavigate ( 0 , CHART_END , 0 );
   if ( ChartNavigate ( 0 , CHART_END , - 100 ))
       Comment ( "Успешно" );
   else
       Comment ( "Ошибка №" , GetLastError ());   
   //ChartRedraw(ChartID());
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
//---
//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+

void OnDeinit ( const int reason)
{
 Comment ( "" );
} /********************************************************************/
어떤 이유로 한 터미널은 이런 식으로 작동하고 다른 터미널은 그렇지 않다고 생각합니다.
 
Alexey Viktorov :

모든 것이 제자리에 있기를 바라는 것이 아니라 동일한 빌드를 갖기 위해 업데이트할 것을 제안했습니다.

Igor, 당신은 지표의 정식 버전에서 실험을 합니까, 아니면 실험용으로 실험을 합니까?

방금 터미널 다시 시작, 빌드 1865를 반복했는데 모든 것이 명확하게 해결되었습니다. 이 메시지를 작성하고, 때때로 차트를 보고, 차트 창을 전환합니다... 하지만 들어오는 틱 및 전환에도 불구하고 이동된 차트는 이전과 동일하게 유지됩니다.

다음은 전체 코드입니다.

어떤 이유로 한 터미널은 이런 식으로 작동하고 다른 터미널은 그렇지 않다고 생각합니다.

역사가 전혀 없는 상징을 보려고

 
Artyom Trishkin :

역사가 전혀 없는 상징을 보려고

그것을 하는 방법?

주제의 첫 번째 메시지에 있는 설명에 따르면 이것은 열려 있는 차트에 걸려 있는 표시기로 이미 기록이 로드되었음을 의미합니다. 그래서? 우리는 표시기를 걸고, 터미널을 닫고, 터미널을 실행합니다 . --- 기록은 어디로 갈 수 있습니까? 그녀가 이미 그곳에 있었다면...

둘째, EURMXN 기호를 열었습니다. 터미널을 보지 않고 무엇인지 알 수 있습니까? )))

 
Alexey Viktorov :

그것을 하는 방법?

주제의 첫 번째 메시지에 있는 설명에 따르면 이것은 열려 있는 차트에 걸려 있는 표시기로 이미 기록이 로드되었음을 의미합니다. 그래서? 우리는 표시기를 걸고, 터미널을 닫고, 터미널을 실행합니다 . --- 기록은 어디로 갈 수 있습니까? 그녀가 이미 그곳에 있었다면...

둘째, EURMXN 기호를 열었습니다. 터미널을 보지 않고 무엇인지 알 수 있습니까? )))

아니, 할 수 없어...

아마도 과거 데이터를 로드하면 차트가 끝으로 이동한다는 의미입니다.

이것을 시도하십시오: 표시기를 분 TF에 놓고 터미널을 닫고 1시간 후에 엽니다. 터미널이 누락된 분을 로드하기 시작합니다. 일정은 어떻게 됩니까? 움직일까요?

 

좋은 소식입니다!!!

H1, H4 기간의 차트를 열어서 확인했습니다. 이제 M1, M5, M30에서 실험을 시작했습니다 ... 작동하지 않습니다 !!!

H1이나 H4로 갈아타고 새로운 시간이 와도 문제 없습니다. 어제 또는 오늘 더 일찍 또는 어제와 오늘 모두 ... 요점은 아니지만 시간 변경에 도달했습니다.