Discussão do artigo "Comunicando-se com o MetaTrader 5 utilizando pipes nomeados sem DLLs" - página 3
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Acho que a questão da comunicação entre terminais tem uma pequena proporção de aplicação.
Mas a comunicação com sistemas externos é mais importante e aplicável. É para isso que o canal seguro foi aberto.
Ninguém está discutindo isso, quero dizer, a declaração de que era para isso. Mas o problema é como ele foi implementado. Afinal de contas, os sistemas externos não são necessariamente escritos em C, mas podem ser criados em diferentes linguagens de programação. E é possível conectar-se ao terminal por meio de um canal nomeado em muitas linguagens de programação apenas como um cliente por meio de operações de arquivo. Mas a tecnologia escolhida foi cliente-servidor, ou seja, de modo que dois clientes não se encontrem se houver uma lacuna entre eles sem uma ponte - gateway. Ou seja, deveria ter sido fornecida a tecnologia cliente-cliente ou um gateway. E foi assim que aconteceu, como na fábula do avô Krylov "A raposa e as uvas":
Mesmo que o olho veja,Mas o olho não pode ver.
© I. Krylov
Foi necessário observar como outras pessoas realizaram uma conexão semelhante com sistemas externos. Por exemplo: VMWare, MS SQL Server, MySQL, modems externos e assim por diante. Sua parte de servidor é implementada internamente. E é muito conveniente conectar-se sem nenhuma ajuda, mesmo por meio de um canal nomeado, ou via TCP/IP e outros canais de comunicação. E você pode até escolher, por exemplo, por meio de um canal nomeado, mas remotamente via TCP/IP com a ajuda do utilitário "Named Pipe TCP Proxy". Ou seja, os usuários não precisam criar nenhum dispositivo adicional, mas apenas escolher o aplicativo cliente mais adequado e imediatamente se conectar e trabalhar.
Leve em consideração que a MQL5 é um ambiente de aplicativo seguro, e claramente um ambiente de cliente, no qual não é razoável criar funções de servidor.
Não tenho certeza de que a funcionalidade do servidor foi declarada. A funcionalidade do cliente foi planejada e implementada.
Acho que criei o código para o gateway. Ainda não o testei. Vou baixar e instalar o MinGW e ver o que está errado.
MinGW instalado, configurado e anexado ao NetBeans.
A ideia de criar um gateway full-duplex a partir de dois canais de servidor e redirecionar informações para clientes de um canal para outro não funcionou. Se um subprocesso do servidor lê um canal e o segundo envia algo para ele, o full duplex não funciona (pelo menos no Windows XP), porque às vezes o subprocesso que lê do canal intercepta mensagens do subprocesso que grava no mesmo canal e retorna as informações de volta.
Se você remover um dos subprocessos, a transmissão será feita por simplex de cliente para cliente sem nenhum problema.
No entanto, nem tudo está perdido, pois há também um modo sobreposto, ou seja, quando não são criados dois, mas apenas um canal, e vários clientes se conectam a ele simultaneamente. Nesse caso, o servidor não precisa ler informações do canal o tempo todo, porque tudo se baseia em eventos. Ou seja, se algum cliente enviar informações para o canal, o servidor lê seu evento e extrai a mensagem transmitida de lá. E para redirecionar as informações recebidas para o segundo cliente, isso já é uma questão de técnica. Estou no processo de criar uma implementação desse tipo.
É isso aí. Eu desisti. Estou cansado de mexer no código C++ e até mesmo na API do Win. Não tanto de codificar, mas de vasculhar informações dispersas no MSDN para tentar entender como tudo deve funcionar. Como não tenho experiência, enviei todo esse material para o Service Work. Consulte Refazer o código C++ em um gateway full duplex bidirecional
Talvez alguém mais experiente possa lidar facilmente com essa tarefa? Não descarto que o motivo das falhas seja o fato de eu não ter conseguido descobrir as configurações dos canais nomeados. Ou seja, é possível que nessas mesmas configurações você precise escrever algo corretamente e tudo poderá funcionar. Até o momento, não consegui fazer nada além do modo simplex e iniciá-lo.
Decidi tentar fazer amizade entre o MQL e o AutoIt por meio de pipelines.
Em resumo, apenas um rake e em qualquer lugar :)
Bem, consegui transferir para o AutoIt com um pouco de sorte, apenas os primeiros 4 bytes tiveram que ser descartados, pois há algum "lixo". O que é esse "lixo"?
Em seguida, tentei transferir para o MQL, o que é ainda mais divertido - não aparece nada. Ou talvez eu não esteja organizando a transferência corretamente.... Talvez todo o problema esteja nesses 4 bytes?
O que você pode me dizer?
Decidi tentar fazer amizade entre o MQL e o AutoIt por meio de pipelines.
Em resumo, apenas um rake e em qualquer lugar :)
Bem, consegui transferir para o AutoIt com um pouco de sorte, apenas os primeiros 4 bytes tiveram que ser descartados, pois há algum "lixo". O que é esse "lixo"?
Em seguida, tentei transferir para o MQL, o que é ainda mais divertido - não aparece nada. Ou talvez eu não esteja organizando a transferência corretamente.... Talvez todo o problema esteja nesses 4 bytes?
O que você pode me dizer?
Então, você também está lá dentro?
Não, estou bem aqui). Então, foi assim:
MQL5
AutoIt
Essa parte da transferência de MQL para AutoIt. Ela funciona da seguinte forma.
Com uma string de Func ReadMsg($hPipe)
Eu como os primeiros 4 bytes e tudo funciona.
Pergunta: o que esses primeiros 4 bytes contêm?
Eu corro os primeiros 4 bytes e tudo funciona.
Pergunta: o que esses primeiros 4 bytes contêm?
Renat, quando está planejado fazer pips no MT4?