P./S.: Imprimir em vez de Comentar em seu código não seria apenas um procedimento mais gentil. Os resultados impressos no OnInit() são mais fáceis de comparar, copiar e anexar aqui
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 experiências com a versão completa do indicador ou com a versão experimental?
Tanto lá como lá. Mas ainda não posso dizer com certeza qual é o problema: se é um bug ou não. Preciso encontrar condições suficientemente reprodutíveis.
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 é? )))
É fácil:
Um modelo com o indicador é salvo como padrão.tpl.
O símbolo do gráfico é aberto, o qual nunca foi aberto antes.
Como resultado, o indicador começa primeiro, e depois os dados são carregados. Tenho todo o conjunto de eventos em um pacote.
Tanto lá como lá. Mas ainda não posso dizer com certeza se se trata ou não de um bug. Precisamos encontrar condições suficientemente reprodutíveis.
Sua redação é um pouco infeliz. O que citei é de condições reprodutíveis.
Outra coisa é que sim, provavelmente o que estou descrevendo nos blocos I e IInão é um bug, mas peculiaridades de carregamento de dados quando o terminal reinicia .
E, em 1870, houve diferenças de repetição em relação ao que eu recebi em 1861º.
As combinações de mensagens (sucesso e erro 4111) mudaram um pouco. Por exemplo, se antes houvesse uma reprodução tão estável:
test 20180626 (GBPUSD,M5) Alert: Успешно
test 20180626 (GBPUSD,H1) Alert: Ошибка №4111
Agora, com o mesmo código, as mensagens de erro parecem ser mais pronunciadas:
test 20180626 (EURNZD,M5) Alert: Ошибка №4111
test 20180626 (EURNZD,H1) Alert: Ошибка №4111
test 20180626 (EURNZD,M5) Alert: Ошибка №4111
test 20180626 (EURNZD,H1) Alert: Ошибка №4111
test 20180626 (EURNZD,M5) Alert: Ошибка №4111
test 20180626 (EURNZD,H1) Alert: Ошибка №4111
test 20180626 (EURNZD,M5) Alert: Успешно
test 20180626 (EURNZD,H1) Alert: Ошибка №4111
E o bloco IIIdesse meu posto não é mais reproduzível no ano de 1870.
Nem poderia reproduzir na década de 1870 o que é descrito aqui:https://www.mql5.com/ru/forum/260815/page5#comment_7901728 Por último - talvez dependa de alguma forma do sistema operacional (como um palpite). Ou seja, este código de Vladimir funciona bem para mim, sem problemas.
Encontrei um problema com a função ChartNavigate. Fazendo algo errado ou há realmente um problema com a função. Escreva de volta se você já o usou com freqüência suficiente.
Portanto, o cerne do problema: ChartNavigate não desloca o gráfico Ao iniciar o terminal Se você chamar esta função no OnInit(). Especialmente várias vezes eu li a documentação. Em nenhum lugar se diz que a função não pode ser chamada na inicialização.
Código indicador para reprodução:
Passos a serem dados:
Desligar o autoplay do gráfico.
Anexar indicador ao gráfico. ChartNavigate acionará movendo a carta para a posição desejada.
Descarregue o terminal.
Carregue o terminal. O ChartNavigate não funcionará exibindo o gráfico sem uma compensação.
OK, se a função der um erro. Mas não. Todas as chamadas são bem sucedidas, mas é quando o terminal é recarregado que a carta não é deslocada.
Experimente as três variantes do indicador e veja o resultado de cada
1. ChartNavigate no final dos outros comandos gráficos
//+------------------------------------------------------------------+//| TryToSetChartSettings_Indicator.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"#property indicator_chart_window//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- отключим автопрокруткуChartSetInteger(0,CHART_AUTOSCROLL,false);
//--- установим отступ правого края графикаChartSetInteger(0,CHART_SHIFT,true);
//--- отобразим в виде свечейChartSetInteger(0,CHART_MODE,CHART_CANDLES);
//--- установить режим отображения тиковых объемовChartSetInteger(0,CHART_SHOW_VOLUMES,CHART_VOLUME_TICK);
//--- Прокрутим от правого края графика на 1000 баров влевоChartNavigate(0,CHART_END,-1000);
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//---//--- return value of prev_calculated for next callreturn(rates_total);
}
//+------------------------------------------------------------------+
2. ChartNavigate one - nenhum outro comando para o gráfico
//+------------------------------------------------------------------+//| TryToSetChartSettings_Indicator.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"#property indicator_chart_window//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
/*
//--- отключим автопрокрутку
ChartSetInteger(0,CHART_AUTOSCROLL,false);
//--- установим отступ правого края графика
ChartSetInteger(0,CHART_SHIFT,true);
//--- отобразим в виде свечей
ChartSetInteger(0,CHART_MODE,CHART_CANDLES);
//--- установить режим отображения тиковых объемов
ChartSetInteger(0,CHART_SHOW_VOLUMES,CHART_VOLUME_TICK);
*///--- Прокрутим от правого края графика на 1000 баров влевоChartNavigate(0,CHART_END,-1000);
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//---//--- return value of prev_calculated for next callreturn(rates_total);
}
//+------------------------------------------------------------------+
3. ChartNavigate antes de outros comandos gráficos
//+------------------------------------------------------------------+//| TryToSetChartSettings_Indicator.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"#property indicator_chart_window//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- Прокрутим от правого края графика на 1000 баров влевоChartNavigate(0,CHART_END,-1000);
//--- отключим автопрокруткуChartSetInteger(0,CHART_AUTOSCROLL,false);
//--- установим отступ правого края графикаChartSetInteger(0,CHART_SHIFT,true);
//--- отобразим в виде свечейChartSetInteger(0,CHART_MODE,CHART_CANDLES);
//--- установить режим отображения тиковых объемовChartSetInteger(0,CHART_SHOW_VOLUMES,CHART_VOLUME_TICK);
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//---//--- return value of prev_calculated for next callreturn(rates_total);
}
//+------------------------------------------------------------------+
E tente três variantes do indicador, veja o resultado de cada
1. ChartNavigate no final dos outros comandos do gráfico
Anexado ao gráfico M1 com a rolagem automática habilitada. O Autoscroll está desligado, o gráfico moveu 1000 barras para a esquerda.
Recarregou o terminal sem desconectar o indicador da tabela. O gráfico mostra a vela atual, sem deslocamento de 1000 barras para a esquerda. O autoscroll continua indisponível.
Eu repeti o passo 2 7 vezes seguidas. 3 vezes fora delas a transição para a esquerda de 1000 velas está completa, 4 vezes - a transição não está completa.
Quando eu não aperfeiçoei o comando "Aguardando atualização" aparece. Assim, pode-se concluir que o terminal rola à força o gráfico para as últimas citações ao carregar a história. E como isso acontece depois do OnInit(), obtemos um resultado inesperado.
2. ChartNavigate sozinho - nenhum outro comando para o gráfico
Como a rolagem automática não está automaticamente desabilitada nesta versão, eu a desabilitei manualmente e conectei o indicador. O gráfico moveu 1000 barras para a esquerda.
Reinicializou o terminal sem desconectar o indicador do gráfico.
Em 2 de 7 casos foi feita a rolagem. E em uma delas aconteceu em três etapas: exibir a história esperada, exibir a vela atual e exibir a história esperada. Parece que o OnInit() foi executado duas vezes: uma antes do histórico ter sido carregado e a segunda vez - depois.
3. ChartNavigate antes de outros comandos gráficos.
Eu habilitei a rolagem automática e anexei o indicador. A carta sacudiu e voltou para a vela atual. É de se esperar que a rolagem automática seja desativada após o comando de movimento de 1000 barras.
Reinicializou o terminal sem desconectar o indicador da carta (a carta exibe a vela atual).
Em todos os 7 casos, o gráfico exibiu a vela atual, a rolagem nem sequer piscou.
Se reiniciamos o terminal sem nenhum indicador na tabela com a rolagem automática desligada e exibindo em algum lugar na profundidade da história, então a cada reinício obtemos a exibição do lugar onde o terminal foi desligado. Acontece que em algum lugar durante a execução dos comandos de navegação há um movimento para a vela atual.
Anexado ao gráfico M1 com o autoscroll ligado. A rolagem automática foi desligada, o gráfico moveu 1000 barras para a esquerda.
Recarregou o terminal sem desconectar o indicador da tabela. O gráfico mostra a vela atual, sem deslocamento de 1000 barras para a esquerda. A rolagem automática continua indisponível.
Eu repeti o passo 2 7 vezes seguidas. 3 vezes fora delas a transição para a esquerda de 1000 velas está completa, 4 vezes - a transição não está completa.
Quando eu não aperfeiçoei o comando "Aguardando atualização" aparece. Assim, pode-se concluir que o terminal rola à força o gráfico para as últimas citações ao carregar a história. E como isso acontece depois do OnInit(), obtemos um resultado inesperado.
Sempre esqueço que sua mensagem/sugestão é lida de trás para frente. É como em uma velha brincadeira:
1917, outubro. Uma senhora, a neta de , a Decembrista, está sentada em sua própria casa em Nevsky. Ao ouvir um barulho na rua, ela pede a seu zelador que descubra o que está acontecendo em . - Menina, a revolução está aí! - O zelador retorna. -Oh, que maravilha! - Meu avô sonhava com uma revolução! Vá e descubra o que os revolucionários querem, meu caro amigo! - Eles não querem homens ricos, senhora", diz o zelador em seu retorno. - Estranho", diz a senhora pensativamente, "mas meu avô não queria que houvesse gente pobre!
Sempre esqueço que sua mensagem/sugestão será lida de trás para frente.
O que você quer dizer? Você escreveu que precisa testar o funcionamento dos três indicadores. Uma vez que o tópico é sobre recarregar o terminal e depois usar ChartNavigate, estes são os testes que foram feitos.
o problema é exatamente que o ChartNavigate nem sempre aciona quando o terminal inicia? Esta é a questão.
E também quando eu mudo meu perfil. Além disso, se o ChartNavigate( chart_id, CHART_BEGIN, shift ) conseguir por exemplo CHART_FIRST_VISIBLE_BAR, então o resultado será como se o ChartNavigate tivesse funcionado. Se o Expert Advisor for removido, na próxima vez que você iniciar o Expert Advisor (o mesmo ou diferente), o resultado da obtenção do CHART_FIRST_VISIBLE_BAR neste gráfico parecerá CHARTNavigate falhou.
Conclusão: operação de ChartNavigate extremamente inconsistente já em combinação com CHART_FIRST_VISIBLE_BAR
Tenho neste post:https://www.mql5.com/ru/forum/260815/page4#comment_7890492 detalhado as condições sob as quais o problema pode ser reproduzido. Isto foi capaz de se reproduzir com base em suas afirmações. Sobre o que escrevi aqui
Ou seja, uma pequena modificação das condições levou a uma reprodução constante do problema.
Você de alguma forma não percebeu isso
P./S.: Imprimir em vez de Comentar em seu código não seria apenas um procedimento mais gentil. Os resultados impressos no OnInit() são mais fáceis de comparar, copiar e anexar aqui
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 experiências com a versão completa do indicador ou com a versão experimental?
Tanto lá como lá. Mas ainda não posso dizer com certeza qual é o problema: se é um bug ou não. Preciso encontrar condições suficientemente reprodutíveis.
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 é? )))
É fácil:
Tanto lá como lá. Mas ainda não posso dizer com certeza se se trata ou não de um bug. Precisamos encontrar condições suficientemente reprodutíveis.
Sua redação é um pouco infeliz. O que citei é de condições reprodutíveis.
Outra coisa é que sim, provavelmente o que estou descrevendo nos blocos I e II não é um bug, mas peculiaridades de carregamento de dados quando o terminal reinicia .
E, em 1870, houve diferenças de repetição em relação ao que eu recebi em 1861º.
As combinações de mensagens (sucesso e erro 4111) mudaram um pouco. Por exemplo, se antes houvesse uma reprodução tão estável:
Agora, com o mesmo código, as mensagens de erro parecem ser mais pronunciadas:
E o bloco IIIdesse meu posto não é mais reproduzível no ano de 1870.
Nem poderia reproduzir na década de 1870 o que é descrito aqui:https://www.mql5.com/ru/forum/260815/page5#comment_7901728 Por último - talvez dependa de alguma forma do sistema operacional (como um palpite). Ou seja, este código de Vladimir funciona bem para mim, sem problemas.
Encontrei um problema com a função ChartNavigate. Fazendo algo errado ou há realmente um problema com a função. Escreva de volta se você já o usou com freqüência suficiente.
Portanto, o cerne do problema: ChartNavigate não desloca o gráfico Ao iniciar o terminal Se você chamar esta função no OnInit(). Especialmente várias vezes eu li a documentação. Em nenhum lugar se diz que a função não pode ser chamada na inicialização.
Código indicador para reprodução:
Passos a serem dados:
Experimente as três variantes do indicador e veja o resultado de cada
1. ChartNavigate no final dos outros comandos gráficos
2. ChartNavigate one - nenhum outro comando para o gráfico
3. ChartNavigate antes de outros comandos gráficos
E tente três variantes do indicador, veja o resultado de cada
1. ChartNavigate no final dos outros comandos do gráfico
2. ChartNavigate sozinho - nenhum outro comando para o gráfico
3. ChartNavigate antes de outros comandos gráficos.
Sempre esqueço que sua mensagem/sugestão é lida de trás para frente. É como em uma velha brincadeira:
1917, outubro. Uma senhora, a neta de
, a Decembrista, está sentada em sua própria casa em Nevsky. Ao ouvir um barulho na rua, ela pede a seu zelador que descubra o que está acontecendo em
.
- Menina, a revolução está aí! - O zelador retorna.
-Oh, que maravilha! - Meu avô sonhava com uma revolução!
Vá e descubra o que os revolucionários querem, meu caro amigo!
- Eles não querem homens ricos, senhora", diz o zelador em seu retorno.
- Estranho", diz a senhora pensativamente, "mas meu avô não queria que houvesse gente pobre!
Sempre esqueço que sua mensagem/sugestão será lida de trás para frente.
O que você quer dizer? Você escreveu que precisa testar o funcionamento dos três indicadores. Uma vez que o tópico é sobre recarregar o terminal e depois usar ChartNavigate, estes são os testes que foram feitos.
Por que, se o problema é que o ChartNavigate nem sempre funciona quando o terminal começa? A questão é exatamente essa.
o problema é exatamente que o ChartNavigate nem sempre aciona quando o terminal inicia? Esta é a questão.
E também quando eu mudo meu perfil. Além disso, se o ChartNavigate( chart_id, CHART_BEGIN, shift ) conseguir por exemplo CHART_FIRST_VISIBLE_BAR, então o resultado será como se o ChartNavigate tivesse funcionado. Se o Expert Advisor for removido, na próxima vez que você iniciar o Expert Advisor (o mesmo ou diferente), o resultado da obtenção do CHART_FIRST_VISIBLE_BAR neste gráfico parecerá CHARTNavigate falhou.
Conclusão: operação de ChartNavigate extremamente inconsistente já em combinação com CHART_FIRST_VISIBLE_BAR