ChartNavigate durante a inicialização - página 5

 
Ihor Herasko:

Não, não estou. Porque essa é exatamente a questão. Deixe-me dizer-lhe um pouco mais sobre o que se trata. O comerciante usa a tabela como se fosse um testador. O indicador esconde uma parte do gráfico real à direita da hora supostamente atual (na verdade, desta vez está em algum lugar da história). Pressionando F12 exibe a próxima vela no gráfico online, etc. Portanto, é ao reiniciar o terminal com o indicador anexado que ele não devolve a posição do gráfico ao local onde o trader terminou seus estudos. Como resultado, ele recebe uma carta vazia porque o terminal repõe a carta para a última vela real. E isto apesar do fato de que o terminal foi descarregado em um local completamente diferente.

Uma observação interessante. Eu mesmo o verifiquei - infelizmente, nada mudou. Eu ainda recebo os preços mais frescos na recarga.

Sugiro que "sincronizemos nossos relógios". Estou testando tudo isso no build 1861. Qual é a sua construção?

Talvez você devesse adicionar tais linhas na frente

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

e depois mudá-lo?

Ou simplesmente, não o transfira para lugar algum. Funciona sem problemas também.

ChartNavigate(0, CHART_CURRENT_POS, 0)

Em que bar eu fechei o terminal, e no qual ele abriu.

No entanto, esta variante também mantém a tabela na janela inativa. Ai de mim. O gráfico permanece no lugar mesmo sem este código.

 
Alexey Viktorov:

Talvez acrescentar linhas como esta na frente

e depois mudá-lo depois?

Sim, a versão completa tem tudo isso. Se você trabalha sem reiniciar o terminal, tudo está bem. Mas o reinício leva a tais problemas. E mesmo a solução da muleta nem sempre ajuda. Vou investigar mais a fundo.

 
Ihor Herasko:

Sim, a versão completa tem tudo isso. Se você trabalha sem reiniciar o terminal, tudo está bem. Mas o reinício leva a problemas como este. E mesmo a solução da muleta nem sempre ajuda. Vou investigar mais a fundo.

Mas também já fiz experiências com o reinício do terminal. Qual pode ser o problema? Recebi a atualização baixada, mas cancelei a atualização por enquanto. Talvez você devesse atualizar também?
 
Alexey Viktorov:
Mas eu também experimentei reiniciar o terminal. Qual poderia ser o problema? Recebi a atualização baixada, mas até agora cancelei a atualização. Talvez você devesse atualizar também?

Melhorado para 1865. O problema permanece.

Além disso, verificou-se que mesmo após o carregamento completo dos dados no gráfico e usando ChartNavigate() o gráfico é exibido onde necessário por algum tempo, mas com um novo tick ele ainda volta para a última barra. O botão de autoscroll é desativado e nenhum outro indicador é utilizado.

Se você mover a tabela manualmente, nada como isto acontece. Por enquanto, estou sem saber o que fazer. Vou investigar isso amanhã quando tiver olhos frescos para ver se fiz asneira em algum lugar.

 
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

Roteiro. Somente comCHART_CURRENT_POS ela é estável. Com CHART_BEGIN e "Shift" positivo, assim como com CHART_END e "Shift" negativo, o gráfico ou não se move ou salta (rola-se) para os preços mais recentes: sensação de que o botão de auto-rolamento está habilitado.

//+------------------------------------------------------------------+
//|                                                       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);
  }
//+------------------------------------------------------------------+

1

Arquivos anexados:
 
Ihor Herasko:

Melhorado para 1865. O problema permanece.

Além disso, verificou-se que mesmo após o carregamento completo dos dados no gráfico e usando ChartNavigate() o gráfico é exibido onde necessário por algum tempo, mas com um novo tick ele ainda volta para a última barra. O botão de autoscroll é desativado e nenhum outro indicador é utilizado.

Se você mover a tabela manualmente, nada como isto acontece. Por enquanto, estou sem saber o que fazer. Amanhã vou investigar novamente com novos olhos para ver se fiz asneira em algum lugar.

Sugeri atualizar não na esperança de que tudo se encaixe, mas a fim de ter as mesmas construções.

Igor, você está fazendo experimentos com a versão completa do indicador ou com a versão experimental?

Acabei de recarregar o terminal com o build 1865 e tudo estava bem. Estou escrevendo esta mensagem, olhando periodicamente a tabela, troco as janelas da tabela... Mas o gráfico deslocado permanece inalterado, apesar dos tiquetaques de entrada e da mudança.

Aqui está o código completo

#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("");
}/********************************************************************/
Por alguma razão, não acredito que um terminal funcione desta maneira e outro funcione daquela maneira.
 
Alexey Viktorov:

Sugeri a atualização não na esperança de que tudo se encaixasse, mas para que as construções fossem as mesmas.

Igor, você está fazendo experimentos com a versão completa do indicador ou com uma versão experimental?

Acabei de recarregar o terminal com o build 1865 e tudo estava bem. Escrevo esta mensagem, olho periodicamente para o gráfico, troco as janelas do gráfico... Mas o gráfico deslocado permanece inalterado, apesar dos tiquetaques de entrada e da mudança.

Aqui está o código completo

De alguma forma, não acredito que um terminal funcione desta maneira e o outro não.

Tente olhar para um símbolo que não tem história alguma

 
Artyom Trishkin:

Tente procurar um símbolo que não tenha nenhuma história

Como fazer isso?

De acordo com a descrição no primeiro borne do fio, é um indicador, está pendurado em um gráfico aberto - isso significa que o histórico já está carregado. Certo? Pendurar o indicador, fechar o terminal, iniciar o terminal, --- para onde pode ir o histórico? Se já lá estivesse...

Em segundo lugar, eu abri o símbolo EURMXN. Sem olhar no terminal, você pode dizer o que é? )))

 
Alexey Viktorov:

Como fazer isso?

De acordo com a descrição no primeiro borne do fio, é um indicador, está pendurado em um gráfico aberto - isso significa que o histórico já está carregado. Certo? Pendurar o indicador, fechar o terminal, iniciar o terminal, --- para onde pode ir o histórico? Se já lá estivesse...

O segundo foi abrir o símbolo EURMXN. Sem olhar no terminal, você pode dizer o que é? )))

Não, eu não posso...

O que eu quis dizer foi que provavelmente o carregamento de dados históricos faz com que o gráfico mude em direção ao seu fim.

Tente isto: coloque o indicador em um minuto de tempo, feche o terminal e abra-o após uma hora - o terminal começa a carregar os minutos que faltam - o que acontecerá com o gráfico? Será que ele vai mudar?

 

Isso é novidade!!!

Eu tinha as cartas do período H1, H4 abertas e as usei para testes. Agora começou a experimentar em M1, M5, M30... não está funcionando!!!

Mudando para H1 ou H4 não há problema, mesmo que haja uma nova hora. Isto foi testado ontem ou hoje cedo ou ambos ontem e hoje. não é a questão, mas fui apanhado na mudança da hora.