IsConnected() - página 3

 

Desculpe, mas por que não deveria funcionar:

int start()

{

    while ( !IsStopped() )
    {
        IsConnectedBefore = IsConnectedNow;
        IsConnectedNow = IsConnected();
      ....

     }

}   

Assim, minha EA está sempre em movimento e não precisa de nenhum carrapato.

 

Tudo em torno da PostMessageA() foi publicado apenas como uma resposta à frase "call start() from init()", antes neste tópico. Eu não podia deixar isto ficar sem comentários. "call start() from init()" é claramente errado em tantos níveis e, portanto, eu tive que comentar e também fornecer uma solução adequada para alcançar o mesmo, ou seja, forçar uma call of start() de dentro do init() mesmo nos finais de semana.


Para o problema de iniciar o MT4 em um estado desconectado, ele não oferece uma solução. Embora eu também não entenda qual poderia ser o caso de uso disto, já que é a conexão que entra e sai enquanto o próprio metatrader deve ser facilmente mantido em funcionamento 24 horas por dia, 7 dias por semana, sem interrupção. E mesmo quando for reiniciada no fim de semana, com a PostMessageA() init() ela retomará imediatamente o ciclo no início() assim que a conexão voltar após o reinício, mesmo sem um tique e depois continuará funcionando para sempre até o próximo reinício (acidental).

 
sunshineh:

Desculpe, mas por que não deveria funcionar:

Assim, minha EA está sempre em movimento e não precisa de nenhum carrapato.


yep, Porque você não reiniciou o terminal Enquanto você não tiver conexão com a Internet, mas se você reiniciar o terminal enquanto não tiver uma conexão com a Internet o AE não chega ao loop sem um tick, não importa o que você faça, mesmo que você use PostMessageA() ou chame Start () do init(), a única maneira de fazer isso é com um script, porque os scripts estão rodando Independente se tick ou não
 

De qualquer forma, obrigado a todos por tentarem ajudar. Decidi sujar um pouco minhas mãos e executar um programa externo para executar o roteiro, fim da história.
Independentemente disso, a função IsConnected() Ainda me faz rir, se uma coisa tão simples ele não cobre

 
7bit:

Tudo em torno da PostMessageA() foi publicado apenas como uma resposta à frase "call start() from init()", antes neste tópico. Eu não podia deixar isto ficar sem comentários. "call start() from init()" é claramente errado em tantos níveis e, portanto, eu tive que comentar e também fornecer uma solução adequada para alcançar o mesmo, ou seja, forçar uma call of start() de dentro do init() mesmo nos finais de semana.


Para o problema de iniciar o MT4 em um estado desconectado, ele não oferece uma solução. Embora eu também não entenda qual pode ser o caso de uso disto, já que é a conexão que entra e sai enquanto o próprio metatrader deve ser facilmente mantido funcionando 24 horas por dia, 7 dias por semana, sem interrupção. E mesmo quando for reiniciada no fim de semana, com a PostMessageA() init() ela retomará imediatamente o ciclo no início() assim que a conexão voltar após o reinício, mesmo sem um tique e depois continuará funcionando para sempre até o próximo reinício (acidental).


Obrigado por sua interjeição 7Bit, é útil conhecer métodos melhores, tenho executado uma EA com sucesso, como descrevi acima, numa tentativa de resolver um problema que estava me causando problemas significativos. O terminal poderia perder regularmente a conexão, mas por uma razão desconhecida não conseguiria recuperá-la. Levei a fazer uma nova leitura manual dos servidores no terminal antes de voltar a conectá-lo. Inicialmente eu pensava que era apenas uma casualidade de tempo, mas muitas vezes para ser casualidade, eu podia esperar uma hora, não recuperar a conexão e então a instância em que eu clicava em nova varredura, ele se reconectava. Minha solução era testar continuamente o estado da conexão... se ela perdesse a conexão, dar-lhe-ia 5 minutos para reconectar o grito dos telhados em alers, e-mails e logs de que está acontecendo e depois fecharia o terminal e reiniciaria. Isso funcionou na maioria das vezes. De tempos em tempos, havia um problema de conexão legítimo e como a EA não inicializará sem conexão, estou preso em um buraco. Procurei métodos para resolver isso, todos os quais são métodos fora do MT4 e, portanto, fora de minhas capacidades atuais de TI. Fortunatley, mudei de corretor e não tive nenhum problema com meu provedor atual... portanto, trabalhar mais nisto está em baixo na lista de prioridades.

Mas pode acontecer que a conexão se perca e a MT4 não consiga reconectar quando a conexão está de fato disponível. Um reinício de terminal não faseia meus EA, mas sentar sem uma conexão por uma hora sim!

V

 
Viffer:

Fortunatley, eu mudei de corretor e não tive nenhum problema com meu atual fornecedor... por isso, trabalhar mais sobre isso está em baixo na lista de prioridades.

Ainda não vi isso com meu corretor, então isso pode realmente acontecer apenas com alguns corretores. A conexão às vezes se perde por alguns segundos, uma ou duas vezes por dia, mas sempre se reconecta imediatamente.


Para rapidamente hackear uma aplicação externa que possa monitorar e controlar remotamente outra aplicação do Windows (clicando nos botões, elogios do menu, etc.) recomendo AutoIT. É uma linguagem fácil de aprender como o BASIC, que é muito centrada exatamente neste tipo de coisas.

 
7bit:

Ainda não vi isso com meu corretor, portanto, pode realmente acontecer apenas com alguns corretores. A conexão às vezes se perde por alguns segundos, uma ou duas vezes por dia, mas sempre se reconecta imediatamente.


Para rapidamente hackear uma aplicação externa que possa monitorar e controlar remotamente outra aplicação do Windows (clicando nos botões, elogios do menu, etc.) recomendo AutoIT. É uma linguagem fácil de aprender como o BASIC, que é muito centrada exatamente neste tipo de coisas.

Obrigado por isso, vou procurá-lo

V

 
qjol:

a função IsConnected() Ainda me faz rir, se uma coisa tão simples ele não cobre

Pensei que o problema era que o MT4 atrasava o init() após um reinício até estar totalmente conectado?


O que isso tem a ver de repente com IsConnected()? IsConnected() parece funcionar como pretendido. Ele retornará verdadeiro quando conectado e falso quando desconectado. Não vejo o que há de tão risível nisso.

 
7bit:

Pensei que o problema era que o MT4 atrasava o init() após um reinício até estar totalmente conectado?


O que isso tem a ver de repente com IsConnected()? IsConnected() parece funcionar como pretendido. Ele retornará verdadeiro quando conectado e falso quando desconectado. Não vejo o que há de tão risível nisso.


porque

se (!IsConnected()) deve retornar falso & Desde que não venha um novo tick IsConnected() não pode ser verificado Por causa disso, é por isso que me faz rir

 
qjol:

Desde que não venha um novo tick IsConnected() não pode ser verificado Por causa disso, é por isso que me faz rir

Pode ser verificado, basta executar a verificação em um loop infinito. como iniciar este loop ao iniciar o terminal durante uma interrupção de conexão é um problema completamente à parte. Uma vez que você tenha seu loop funcionando, ele fará o que é esperado.

Seu problema não tem nada a ver com a função IsConnected(). Com o mesmo argumento, você também pode reclamar da função Print() ou Alert() ou qualquer outra função que você não possa chamar porque não pôde iniciar o código inteiro em primeiro lugar por alguma razão completamente diferente.