Características da linguagem mql5, subtilezas e técnicas - página 239

 
Anatoli Kazharski #:

Como posso saber se um símbolo tem dados, para que eu não o deixe na janela [Market Watch] se não tiver?

SymbolInfoTick.

 
fxsaber #:

SymbolInfoTick.

Tentei essa opção. Infelizmente, ela não funciona. Se um símbolo for adicionado à janela [Market Watch] pela primeira vez, ainda não há dados sobre ele e SymbolInfoTick retorna valores nulos.

Também testei as funções CopyXXX, mas elas não têm um tempo limite e o processo de espera pelos dados do servidor dura cerca de 45 segundos, o que é muito longo.

Preciso de uma maneira rápida de descobrir se um caractere é inutilizável. Estou me referindo a casos como este:


//---

Esses símbolos não têm dados no servidor e precisam de uma maneira de identificá-los para que não sejam adicionados à janela [Visão geral do mercado] ou removidos da lista, caso sejam.

P.S. Talvez haja alguma maneira de remover o bloqueio de remoção de símbolos da lista na janela[ Market Watch]?

 
Anatoli Kazharski #:

Tentei essa opção. Infelizmente, ela não funciona. Se um símbolo for adicionado à janela [Market Watch] pela primeira vez, ainda não há dados sobre ele e SymbolInfoTick retorna valores nulos.

É fácil obter símbolos funcionais manualmente.

  1. Adicione todos os símbolos à Observação do mercado com apenas alguns cliques.
  2. Em alguns segundos, os ticks neles serão recebidos.
  3. Classificação por hora com um clique do mouse.
  4. Excluir uma das caudas da lista obtida usando a tecla Del.
Tudo isso levará até meio minuto.
 
Anatoli Kazharski #:

Tentei essa opção. Infelizmente, ela não funciona. Se um símbolo for adicionado à janela [Market Watch] pela primeira vez, ainda não há dados sobre ele e SymbolInfoTick retorna valores nulos.

Também testei as funções CopyXXX, mas elas não têm tempo limite e o processo de espera pelos dados do servidor dura cerca de 45 segundos, o que é muito longo.

Preciso de uma maneira rápida de descobrir se um caractere é inutilizável. Estou me referindo a casos como este:


//---

Esses símbolos não têm dados no servidor e precisam de uma maneira de identificá-los para que não sejam adicionados à janela [Market Watch] ou removidos da lista, caso sejam.

P.S. Talvez haja alguma maneira de remover o bloqueio de remoção de símbolos da lista na janela[Market Watch]?

Estou lutando contra isso há cerca de 6 anos e peço aos desenvolvedores que coloquem as coisas em ordem aqui.

Infelizmente, esse problema não foi resolvido e, no momento, há situações em que o terminal trava quando alguém acessa um instrumento financeiro pela primeira vez.

 
Anatoli Kazharski #:

Como posso saber se um símbolo tem dados, para que eu não o deixe na janela [Market Watch] se não tiver?

Eu uso essa verificação em um loop:

Mas, depois disso, não consigo remover manualmente os símbolos da janela [Market Watch], nem um por um nem todos de uma vez, enquanto o Expert Advisor está no gráfico:


Tente verificar a hora da última cotação.

SymbolInfoInteger(name, SYMBOL_TIME);

Se for 0, não há dados.

Acabei de verificar os gráficos abertos.

2024.01.05 10:38:43.783 !00 (GBPUSD,H1) USDCAD 2024.01.05 09:38:51
2024.01.05 10:38:43.783 !00 (GBPUSD,H1) NZDUSD 2024.01.05 09:38:51
2024.01.05 10:38:43.783 !00 (GBPUSD,H1) USDCAD 2024.01.05 09:38:51
2024.01.05 10:38:43.783 !00 (GBPUSD,H1) EURGBP 2024.01.05 09:38:49
2024.01.05 10:38:43.783 !00 (GBPUSD,H1) GBPUSD 2024.01.05 09:38:49
2024.01.05 10:38:43.783 !00 (GBPUSD,H1) POZ3 1970.01.01 00:00:00
2024.01.05 10:38:43.783 !00 (GBPUSD,H1) EDH4 1970.01.01 00:00:00
2024.01.05 10:38:43.783 !00 (GBPUSD,H1) BRZ3 1970.01.01 00:00:00
 
É possível obter dados adicionais alternando entre servidores. Não sei se isso é possível de ser implementado por meio de código.
 
Nauris Zukas #:
É possível obter dados adicionais alternando entre servidores. Não sei se é possível implementar isso por meio do código.

Se por "entre servidores" você quer dizer "entre corretoras", então dificilmente, a menos que você tente brincar com perfis.

Mas se eu realmente precisasse alternar entre diferentes servidores de uma corretora (a Open tinha muitas, a Finam tinha duas), eu o faria por meio do iptables/nftables e meus scripts bash. Mas é mais fácil para mim aqui, pois tenho o Linux.

 
JRandomTrader #:

Se por "entre servidores" você quer dizer "entre corretores".


.

 
Nauris Zukas #:


Sim, em princípio, isso é possível.

Mas, como não há como descobrir o nome e o IP do servidor no programa MQL, você terá que descobri-los manualmente, alternando entre os servidores e verificando para qual IP a conexão está indo.

Em seguida, é possível, fazendo alterações na configuração do firewall, proibir a conexão com algum servidor (aqui é necessário fazer o rejacking de pacotes, não descartá-los para evitar o tempo limite), forçando o MT a mudar para outro.

Novamente, não é difícil para mim fazer isso no Linux, mas não consigo imaginar como fazê-lo no Windows.

 
Alexey Viktorov #:

Tente verificar a hora da última citação.

Se for 0, não há dados.

Acabei de verificar os gráficos abertos.

Isso também se aplica a um caso semelhante:

Tentei essa opção. Infelizmente, ela não se encaixa. Se um símbolo for adicionado à janela [Market Watch] pela primeira vez, ainda não há dados sobre ele e SymbolInfoTick retorna valores nulos.

Se os ticks forem raros, todos esses símbolos serão excluídos.

fxsaber #:

É fácil obter símbolos funcionais manualmente.

  1. Adicione todos os símbolos ao Market Watch com apenas alguns cliques.
  2. Em alguns segundos, os ticks neles serão recebidos.
  3. Classificação por hora com um clique do mouse.
  4. Excluir uma das caudas da lista obtida usando a tecla Del.
Tudo isso levará até meio minuto.

Não. Você precisa de um sistema totalmente automático.

Vladimir Pastushak #:

Estou lutando com isso há 6 anos e peço aos desenvolvedores que coloquem ordem aqui.

Infelizmente, esse problema não foi resolvido e, no momento, há situações em que o terminal desliga quando alguém acessa um instrumento financeiro pela primeira vez.

Notei isso somente ao chamar as seguintes funções:

  • Bars()
  • iBars()
  • SeriesInfoInteger(símbolo, PERIOD_M1, SERIES_BARS_COUNT)

//---

Desenvolvedores do terminal:

1. excluem a possibilidade de adicionar símbolos sem dados no servidor de negociação.

2. Possibilitar a desativação do bloqueio de exclusão de símbolo na janela [Market Watch] ou corrigi-lo se for um bug. Agora isso só pode ser feito reiniciando o terminal.

3. Para funções como CopyXXX , adicionar um parâmetro opcional adicional para definir o tempo limite (tempo máximo de espera pelos dados do servidor).

Não consigo reproduzir isso no momento. Até o momento, ele funciona sem atrasos. Mas parece que em alguns casos isso pode acontecer.

4. corrigir o erro de espera infinita ao usar as funções Bars(), iBars(), SeriesInfoInteger(symbol, PERIOD_M1, SERIES_BARS_COUNT) nos casos em que

  • não há conexão com o servidor
  • não há dados sobre o símbolo

Uma tentativa de excluir o programa do gráfico pode fazer com que o terminal fique suspenso por vários minutos.

5. Corrigir o erro de espera infinita ao usar funções se não houver conexão com o servidor:

  • SeriesInfoInteger(símbolo, PERIOD_M1, SERIES_FIRSTDATE)
  • SeriesInfoInteger(símbolo, PERIOD_M1, SERIES_LASTBAR_DATE)
  • SeriesInfoInteger(símbolo, PERIOD_M1, SERIES_SERVER_FIRSTDATE)

Nesse caso, você também pode adicionar um parâmetro opcional adicional para definir o tempo limite (tempo máximo de espera pelos dados do servidor).

//---

P.S. Até agora, optei pela variante com a verificação de dados com funções como CopyXXX. Mas vou observar se o problema descrito acima aparecerá novamente.