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

 
Ihor Herasko:

P./S.: Por via das dúvidas, gostaria de esclarecer que não comecei a ver o que acontece se o terminal é carregado depois de muito tempo (ou seja, quando muitas barras novas devem aparecer depois que o terminal for descarregado).

 
Alexey Viktorov:

Dina, ele está trabalhando para você? Estou lutando há 2-3 horas (só hoje, sem contar os testes de ontem) tentando obter uma versão não funcional do OnInit, mas sem sucesso. Tudo sempre funciona como deveria. Se eu colocar o indicador em dois gráficos e reiniciar o terminal, ele funciona apenas no gráfico que estava ativo no momento do fechamento e da abertura do terminal. No segundo, o gráfico não ativo não funciona. Mas isto, em minha opinião, é compreensível, não há renderização gráfica e não há gráfico em si, apesar do fato de que os dados são recebidos.

Sim, Alexei, funciona. Eu escrevi sobre isso aqui. Aparentemente, ele se perdeu visualmente em minhas citações de outros cargos.

 
Dina Paches:

Diga-me, por favor, antes de descarregar o terminal, você repõe o gráfico nos preços mais recentes?

Não, eu não tenho. Porque essa é a questão. Deixe-me dizer-lhe em detalhes por que tudo isso é necessário. Um 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.

Por que eu pergunto:

Eu usei seu código para ver como funcionaria em minha situação. No início eu pensei que estava reproduzindo o problema que você descreve. Mais tarde entendi que não. Se a tabela for restaurada aos últimos preços antes de ser descarregada, ela funciona de acordo com o código quando o terminal é carregado. Se eu não voltar aos últimos preços antes de descarregar, o gráfico permanecerá onde estava antes de descarregar.

Observação interessante. Verifiquei por conta própria e, infelizmente, nada mudou. Eu ainda recebo os preços mais frescos na recarga.

Sugiro que você "sincronize seus relógios". Estou testando tudo isso no build 1861. Qual é a sua construção?

 
Alexey Viktorov:

Dina, isso funciona para você? Estou lutando há 2-3 horas (só hoje, sem contar os testes de ontem) tentando conseguir uma versão não funcional do OnInit, mas tudo isso sem sucesso. Tudo sempre funciona como deveria. Se eu colocar o indicador em dois gráficos e reiniciar o terminal, ele funciona apenas no gráfico que estava ativo no momento do fechamento e da abertura do terminal. No segundo, o gráfico não ativo não funciona. Mas isto, em minha opinião, é compreensível, não há renderização gráfica e não há gráfico em si, apesar do fato de que os dados são recebidos.

Coloque-o em dois gráficos. Infelizmente, ambos trabalham da mesma forma - os preços mais recentes são exibidos na recarga.

Que construção você tem?

 
Acabou sendo ainda mais divertido do que eu pensava. Mudou o código para OnCalculate (fez um único gatilho, não para chamá-lo em cada carrapato ), mas a imagem não mudou. Ou seja, mesmo em OnCalculate ao iniciar o terminal ChartNavigate não é acionado...
 
Alexey Viktorov:

... Apenas uma peculiaridade foi notada: se eu colocar o indicador em dois gráficos e reiniciar o terminal, ele funcionará apenas no gráfico que estava ativo no momento em que eu fechei e abri o terminal. No segundo, o gráfico não ativo não funciona. Mas isto, em minha opinião, é compreensível, não há renderização gráfica e não há gráfico em si, apesar do fato de que os dados são recebidos.

Eu mesmo não pensei em experimentar dessa maneira. Agora, tais experiências foram feitas (também com a ajuda do código de Igor).

Ao fazer isso, consegui acabar com... que reproduzisse o problema que ele descreveu.

 
Ihor Herasko:

...

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

Eu também tenho 1861. Mas graças a Alexey Viktorov eu consegui reproduzir o problema descrito por você ao instalar via OnInit(). /* antes disso, acontece que, como eu vi seus postos/.

Ordem de ação: Como você já descreveuaqui.

I. Mas antes de descarregar o terminal, mudei os gráficos para os preços mais frescos.

E eu defino o indicador em dois gráficos de um par, com prazos diferentes (GBPUSD M5 e GBPUSD H1).

Meus resultados são os resultados dessas experiências:

1. eu primeiro defini o indicador no gráfico GBPUSD M5, depois - no GBPUSD H1. Depois disso, tendo mudado os gráficos para barras frescas, fechei o terminal quando o gráfico GBPUSD H1 estava ativo (ou seja, um período de tempo mais longo estava ativo). Sob tais condições, se eu abrir o terminal novamente, a carta é deslocada quando eu a abro , nas barras especificadas por seu código.

Entretanto, se fecharmos o terminal com o gráfico ativo de GBPUSD M5 (ou seja, o tempo mais baixo está ativo) e depois reabrirmos o terminal, então, após o carregamento do terminal, não ocorrem turnos em nenhum dos dois gráficos. Os gráficos se abrem em barras frescas. Ao mesmo tempo, para um deles eu tenho sucesso, para o outro - um erro:

test 2018 06 26 (GBPUSD,M5)     Alert: Успешно
test 2018 06 26 (GBPUSD,H1)     Alert: Ошибка №4111

Ao realizar experimentos nos itens 1 e 2, após reiniciar o terminal e ver os resultados, apaguei este indicador dos gráficos e depois o instalei novamente.


3. Quando eu fiz as mesmas experiências, mas sem reinstalar o indicador cada vez, após reiniciar o terminal, não há deslocamento do gráfico após reiniciar o terminal. Independentemente de estar ativo com um período de tempo maior ou menor. Os gráficos se abrem em barras frescas. As mensagens são as mesmas do ponto 2(sucesso e erro 4111)

II. Além disso, experimentei a instalação simultânea do indicador nos mesmos dois gráficos, mas sem devolver esses gráficos antes de descarregar o terminal para barras frescas.

Os resultados que tenho: se eu fechar/abrir em um período de tempo maior, o gráfico do período de tempo maior é onde estava antes de fechar. O mais baixo (não ativo) está no mais fresco.

Se você abrir/fechar em um prazo mais baixo, o mais baixo será aberto nas barras mais frescas. As mensagens são as mesmas que em 2(sucesso e erro 4111).


III. O problema surgiu agora com o seguinte:

  • Esqueci de desativar a rolagem automática do gráfico antes de instalar o indicador;
  • Quando percebi, apaguei o indicador e o instalei novamente.

Após esta reinicialização do indicador, a mudança não ocorreu, mas o alerta foi bem sucedido:

test 2018 06 26 (GBPUSD,M5)     Alert: Успешно

Entretanto, se antes de tal reinstalação do indicador a rolagem automática foi desativada não apenas agora, mas algum tempo depois, então o problema não foi detectado.


De alguma forma.

Parece que você deve escrever para o Service Desk.

 
Dina Paches:

Dá um sucesso para um e um erro para o outro:

Isso é uma surpresa! Eu ainda não consegui obter um erro do ChartNavigate. Mas isso é alguma coisa.

No centro do problema, aparentemente, estou começando a entender o que está acontecendo.

Ao chamar ChartNavigate( ) pela primeira vez em OnInit() ou em OnCalculate(), é altamente provável que nem todos os dados do gráfico tenham tido tempo de serem carregados ainda. Entretanto, o ChartNavigate() já funcionou e funcionou com sucesso (naquele momento). Os dados são então carregados e exibidos no gráfico, o que leva a um completo redesenho e deslocamento do gráfico para seu início. Como resultado, vemos o gráfico como se ele não tivesse sido deslocado por ChartNavigate() de forma alguma.

Portanto, a fim de deslocar o gráfico com sucesso, precisamos de alguma forma determinar que os dados do gráfico não serão mais exibidos (devido à paginação do histórico). Somente após estabelecer este fato é que o ChartNavigate() pode ser chamado de ChartNavigate().

 
Ihor Herasko:

...

Portanto, a fim de deslocar o gráfico com sucesso, deve ser determinado de alguma forma que os dados do gráfico não devem mais ser exibidos (devido à paginação do histórico). Somente após estabelecer este fato é que o ChartNavigate() pode ser chamado de ChartNavigate().

Você está certo, provavelmente. Ao reiniciar o terminal, ele pode se tornar relevante. Também, enquanto experimentava, estava interessado em habilitar/desabilitar a rolagem automática em combinação com (ou sem) reiniciar o ndicador. Uma conseqüência do que descrevi no bloco III, no final deste post. Mas ainda não estou investigando isso com mais detalhes. Tenho que resolver minhas próprias questões urgentes. Portanto, por enquanto, vou passar adiante.

 
Ihor Herasko:

Coloque-o em dois gráficos. Infelizmente, ambos trabalham da mesma forma - os preços mais recentes são exibidos na recarga.

Que construção você tem?

Fórum sobre comércio, sistemas automatizados de comércio e testes estratégicos

ChartNavigate sobre a inicialização

Alexey Viktorov, 2018.06.25 15:10

Eu também tenho 1861. Só conseguiu reproduzi-la uma vez. Todas as outras tentativas funcionaram bem.