
Simulação de mercado (Parte 10): Sockets (IV)
Introdução
No artigo anterior Simulação de mercado (Parte 09): Sockets (III), expliquei a última etapa que precisávamos para que pudéssemos criar um mini chat. Isto para que você pudesse começar a explorar o funcionamento de soquetes, fazendo uso da linguagem MQL5. Apesar de isto ser algo bastante interessante, e que poderá vir a ser utilizada no futuro. Isto aqui na aplicação de replay / simulador, já que ainda não me decidi como será, ou melhor dizendo, de que forma realmente farei a implementação do sistema de ordens. O uso de soquetes, muitas vezes é apenas uma alternativa, bastante viável para transferir informações entre aplicações diferentes. E até mesmo entre plataformas operacionais diferentes. Ou seja, você consegue transferir dados de um sistema Windows para um MacOS, ou mesmo Linux sem de fato precisar conhecer o sistema de origem ou destino. Por conta disto, podemos até mesmo usar sistema aparentemente mais modesto para construir algo mais elaborado. Como no caso de usar um conjunto de Raspberry, para efetuar fatorações dedicadas. Mas isto vai além do escopo desta série de artigos. A ideia principal aqui, é preparar você, caro leitor para a próxima etapa de desenvolvimento, que o replay / simulador irá de fato passar.
Porém, no artigo Simulação de mercado (Parte 06): Transferindo informações do MetraTrader 5 para o Excel mostrei como você poderia transferir informações entre o MetaTrader 5 e o Excel. E por que o Excel ? O motivo é didático. Já que poderíamos fazer uso de qualquer outro programa. No entanto, usando o Excel, talvez ficaria mais interessante de explicar o que de fato era desejado fazer. Isto por que, é muito comum fazer uso do RTD ou de um DDE para transferir dados ao Excel. Mas, este tipo de comunicação sempre se dá de forma unidirecional. Ou seja, apenas podemos enviar dados para o Excel e nunca ler dados que foram calculados nele de forma rápida. Isto para que o MetaTrader 5, possa vir a fazer uso de tais dados. Pense nas possibilidades que isto abriria. Você poderia usar um Expert Advisor, simples, e no Excel colocar toda a lógica de cálculos a fim de poder controlar o Expert Advisor. Isto faria com que o Expert Advisor viesse a ser capaz de operar de forma, completamente automatizada. E os ajustes e modificações, não necessitariam ter que passar pelo MQL5. Você poderia fazer isto diretamente dentro do VBA. Talvez isto possa lhe parecer muito complicado, ou mesmo inalcançável. Mas se você tiver o conhecimento adequado, e disposição para estudar, notará que é algo até relativamente simples de ser feito. Porém, é preciso estudar e se dedicar a esta tarefa.
Muito bem, isto nos leva a um outro ponto. Um sistema RTD nada mais é do que um soquete. Porém ele é configurado de forma que a comunicação somente se dará em uma direção. Mas com o conhecimento que foi explicado nos três últimos artigos, onde falamos especificamente sobre soquetes. Começa a ficar mais claro que podemos fazer as coisas de uma maneira um pouco mais elaborada. Novamente, farei uso do Excel aqui, apenas por motivos didáticos. Na verdade, você poderia utilizar qualquer programa, aplicação, ou método para fazer a mesma coisa. No entanto, antes de realmente mostrar, o real motivo de eu estar explicando estas coisas. Quero que você compreenda as possibilidades que existem. Isto para se obter os mesmos resultados que serão vistos no futuro.
Porém aqui vamos fazer algo um pouco mais elaborado. Na verdade, acredito que muitos desconheçam o que irei de fato apresentar brevemente aqui. O assunto é muito interessante, porém extremamente longo. Por isto sugiro que você dê uma olhada nas referências que deixarei no final do artigo. Elas poderão lhe ajudar muito. Mesmo por que, o que faremos uso aqui, ainda está em fase de desenvolvimento. Mas nem por isto, não merece ser aprendido e estudado.
Como não quero, pelo menos ainda, adicionar Dlls ao código feito em MQL5. Aqui iremos de fato ver algo bastante curioso. Farei a coisa aos poucos, apresentando devagar o que será feito. Isto para que você, caro leitor, consiga acompanhar e entender como faremos o Excel se comunicar com o MetaTrader 5.
Isto sem fazer uso do que foi visto em: Simulação de mercado (Parte 06): Transferindo informações do MetraTrader 5 para o Excel, pois apesar daquela técnica funcionar. Ela de fato não é tão manobrável. Nos forçando a fazer algumas coisas, que ao usarmos soquetes se tornam desnecessárias. Então no final, a intenção será mostrar como transferir dados do Excel para o MetaTrader 5 e vice-versa.
Começando a usar Python nas tarefas
Espera um pouco. Você não disse, a pouco, que faríamos uso do Excel ? Pensei que iriamos de fato programar em VBA. Que história é esta de usar Python ? Calma meu caro leitor. De fato, iremos fazer uso do Excel. Mas não vamos programar as coisas diretamente em VBA. De certa forma, poderíamos até usar VBA a fim de construir a comunicação entre o Excel e o MetaTrader 5. Porém, se este caminho fosse tomado, ficaríamos travados no que estes dois programas poderiam fazer. Ou seja, se você desejasse usar um outro programa no lugar do Excel, a fim de ajudar o MetaTrader 5 em suas operações de mercado. Você logo teria que reconstruir todo o conjunto de comunicação. Porém, ao fazer uso do Python, como uma camada intermediária por assim dizer, as coisas ficam mais flexíveis. Mesmo por que, Python é mais simples de se fazer certas coisas. Nos ajudando bastante, sendo que você poderia até mesmo ignorar o Excel, e deixar tudo dentro do Python mesmo. Mas aqui não quero fazer isto. Quero realmente fazer uso do Excel por um motivo que será melhor entendido no futuro. Então precisamos do Python. O que de fato vamos fazer aqui, pode ser visto na imagem logo abaixo.
Observe o seguinte: O Python está no centro da imagem, e toda informação está passando por ele. Porém o nosso objetivo de fato é utilizar o MetaTrader 5, junto com o Excel. Mas observe que quando colocamos o Python, no centro das coisas, podemos inclusive desconsiderar usar o Excel, ou podemos no lugar do Excel usar uma outra aplicação qualquer.
Mas por que usar Python, e não uma programação em C / C++ ? O motivo é a praticidade. Não faz sentido, codificar algo em C / C++, se podemos de fato obter resultados muito bons, e de forma muito mais simples se podemos usar Python. Isto por que, Python ainda está sendo desenvolvida de maneira a termos cada vez mais e mais praticidade. E o que vamos fazer é usar o Python a fim de fazer a comunicação via soquete com o MetaTrader 5.
Agora é preciso explicar uma coisa. O MetaTrader 5, nos permite executar diretamente no gráfico, um script criado em Python. Isto desde que você configure o MetaTrader 5 para isto. Fazer tal configuração, não é nada complicado. Muito pelo contrário, é algo super simples e direto. Tudo que você precisa fazer é baixar a última versão estável do Python, instalar ela. Logo em seguida, no MetaEditor, ajustar o que é mostrado em destaque na imagem abaixo:
Note que precisamos apenas apontar o diretório onde está o executável do Python. No momento, que escrevo este artigo a versão mais estável é a 3.11.3. Porém muito provavelmente existirá uma versão ainda mais nova já disponível. Você pode baixar a versão mais recente em: Python.org
Feito isto você já estará preparado para começar a criar scripts em Python. Apesar de existirem diversas ferramentas e editores para lhe ajudar na codificação. Você de fato não precisará delas. Poderá usar o próprio MetaEditor para isto, ou qualquer outro editor para isto. Mas se realmente desejar pode baixar uma ferramenta para lhe ajudar na codificação. Não irei indicar nenhuma em especial.
Mas voltando a questão do uso do Python no MetaTrader 5, nos de fato não faremos isto. Mas se você desejar pode fazer uso da maneira como melhor lhe parecer. O que faremos de fato é montar o código de comunicação em MQL5 puro. Assim como foi feito nos artigos anteriores. E usar o Python para simplificar a tarefa de criar o soquete para o Excel. Novamente, dá para executar a tarefa de criar o soquete, diretamente no VBA. Porém é muito mais simples fazer isto via Python. Mesmo por que, o que faremos será criar o lado do servidor. Já que no MQL5, não podemos de fato criar um servidor usando o MQL5 puro.
Mas existe um detalhe aqui. O fato de você ter baixado e instalado o Python em seu sistema operacional. Não é de fato o suficiente para que você possa utilizar o Python como mostrado na imagem acima, onde mostro a comunicação entre o Excel e o MetaTrader 5 via Python. Precisamos de mais uma outra coisa extra, também instalada na sua máquina. Isto é claro, além do Excel. E é justamente esta coisa extra que fará toda a diferença.
Conhecendo o xlwings
Aqui está a tal coisa extra que iremos precisar adicionar. Este tal de xlwings, é na verdade, um modulo que nos permite rodar scripts de Python em substituição ao VBA presente no Excel. Sim, você pode fazer as coisas diretamente em Python dentro do Excel. Isto em vez de fazer as mesmas coisas usando o VBA. No entanto, o VBA ainda tem a sua utilidade, já que o xlwings não substitui integralmente o VBA. Ele apenas estende as possibilidades para que possamos fazer muitas coisas via Python.
Um detalhe, é que existem outros módulos que fazem a mesma coisa do xlwings. Sim, eles existem. Porém, em alguns casos eles são licenciados. E no caso do xlwings ele para uso não comercial pode ser utilizado sem custos extras. Então como muitas das vezes você estará fazendo as coisas na base do aprendendo enquanto faz uso. Não irá de fato, criar algo comercial. Assim o xlwings é uma boa alternativa, no início do aprendizado. Mesmo por que ele é bem simples como você poderá ver.
Instalando o xlwings
Nas referências deixarei a forma como você pode acessar a documentação e entender melhor sobre o xlwings. Mas para facilitar as coisas, neste artigo irei mostrar como você deverá proceder nesta primeira etapa. Para começar, precisamos instalar o Python. Então durante a instalação do Python, você deverá marcar o ponto indicado na imagem abaixo.
Se você não fizer isto, terá que adicionar o path do Python depois nas variáveis do Windows. Isto para que as coisas sejam feitas de maneira mais simples. Se você já tiver mais experiência no uso do Python, adicionar a variável de path é desnecessário. Mas aqui vamos fazer a coisa de forma que irei assumir que você, caro leitor, não tem experiência alguma no uso do Python. Então faremos tudo usando o padrão.
Uma vez terminada a instalação do Python, será apresentada a imagem abaixo.
Se você clicar no ponto destacado, poderá usar nomes longos. Isto daqui é uma escolha de cada um. Alguns não gostam de colocar nomes muito longos em seus arquivos. Se este for o seu caso, apenas clique em CLOSE e estamos acertados. Mas se você gosta de usar nomes com mais de 256, ou no caso do Python 260 caracteres, é bom clicar neste ponto destacado na imagem. Assim o Python conseguirá entender tais nomes.
Feito isto, vamos abrir um prompt de comando. Você pode usar o PowerShell, mas eu gosto do velho e bom CMD mesmo. A primeira coisa que aconselho você a fazer no prompt é digitar o comando mostrado abaixo.
Irei tentar mostrar as coisas desta maneira, comando por comando e o resultado. Isto para que fique claro o que estará sendo feito. Como resultado do comando dado, você pode notar que temos dois pacotes instalados pelo Python. Isto por padrão. E já temos que dar um upgrade em um destes pacotes. Então digite o comando e o resultado pode ser visto abaixo.
Legal, agora que já temos o sistema atualizado. Podemos partir para o xlwings. O xlwings é um add-in que irá se ligar ao Excel. Mas na documentação, você verá que ele não necessita do Excel. De qualquer forma, vamos fazer as coisas de maneira a realmente usar o Excel. Então depois de instalado o Excel. O mesmo irá se apresentar como mostrado abaixo.
Observe que não existe nada de diferente no ribbon do Excel. Então voltando ao prompt de comando, ou PowerShell se preferir. Vamos digitar o seguinte comando conforme mostrado na imagem abaixo.
Este comando, como você pode ver, baixará o xlwings e o instalar como um pacote do Python. Então ao analisar novamente os pacotes instalados você verá como resultado a imagem abaixo.
A versão do xlwings pode estar diferente, já que ele sofre atualizações de tempos em tempos. Mas repare que junto do xlwings, também foi instalado um outro pacote: pywin32. Não se preocupe com isto, ele na verdade é uma dependência do xlwings.
A próxima coisa a ser feita será licenciar o xlwings. Mas calma. Como iremos fazer uso de uma forma não comercial, ou seja, não iremos vender ou negociar o que será feito aqui, podemos usar uma licença própria para isto. Então bastará fazer o que é mostrado na imagem abaixo e o xlwings ficará licenciado.
Muito bem. Agora estamos quase com tudo pronto. Só falta integrar o xlwings ao Excel. Neste ponto temos algumas questões a serem pensadas. A primeira questão é: Você realmente quer rodar aplicações Python via Excel, ou você quer substituir o VBA pelo Python no que rege o Excel ? Digo isto, pois se você deseja apenas criar macros para serem usadas no Excel, mas que sejam escritas em Python. Você não precisará realmente adicionar o add-in do xlwings ao Excel. Você simplesmente precisará fazer um pequeno passo durante a edição das macros. Assim poderá integrar tanto o VBA quanto o Python ao Excel.
Porém, se você deseja de fato rodar scripts feitos em Python no Excel, é bom adicionar o xlwings como um add-in ao Excel. Isto por que fazendo isto, será criado no ribbon uma área que permite você rodar os scripts de Python diretamente no Excel. Sem problemas e dificuldades. Se bem que você precisará fazer algumas coisas para que tudo funcione perfeitamente bem.
Tudo isto está bem explicado na documentação do xlwings. Então qualquer dúvida, veja na documentação do xlwings como proceder. No final deste artigo deixarei as referências para que você possa ir direto ao ponto.
Mas aqui, irei fazer a seguinte suposição: Você, caro leitor, ainda não sabe nada sobre o xlwings, e apenas está começando a estudar Python. Então o ideal seria adicionar tanto o xlwings como add-in, quanto ter a possibilidade de usar ele nas macros. Assim você pode com o tempo, encontrar qual será o melhor para você.
Adicionando o xlwings ao Excel como Add-In
Fazer a adição do xlwings como um add-in não é uma das tarefas mais complicadas que existe. Na verdade, é bem simples. Existem dois caminhos que você pode seguir. Lembrando que aqui estamos usando a instalação padrão. Se você for mais experiente poderá configurar isto de outras formas.
O primeiro caminho é ir direto via Excel e adicionar o xlwings como add-in. Isto já dentro do Excel. Para fazer isto, você deve selecionar o ponto marcado na imagem abaixo.
Logo depois marcar o ponto indicado na imagem a seguir.
Isto adicionará ao ribbon a aba de desenvolvimento. Nesta aba de desenvolvimento, selecione o item indicado na imagem a seguir.
Isto abrirá uma janela que é mostrada imediatamente abaixo.
Aqui temos os add-in padrão da instalação do Excel. Para adicionar o xlwings a partir desta janela. Você deverá clicar no botão Browser e navegar pelo seguinte caminho:
C:\Users\{USERNAME}\AppData\Local\Programs\Python\Python311\Lib\site-packages\xlwings\addin
Lembrando que este caminho se refere a instalação padrão efetuada no Python. O valor {USERNAME} diz qual o nome do usuário no Windows, onde a instalação do Python foi efetuada. Já o valor Python311, neste caminho, indica qual a versão atual do Python instalada. Por isto que é importante você saber o que está fazendo durante a instalação dos programas. Se você mudar qualquer coisa durante a instalação, estes valores serão diferentes. De qualquer forma a ideia é encontrar o arquivo mostrado na imagem imediatamente abaixo.
Adicionando estes arquivos, você já poderá acessar o add-in diretamente no ribbon do Excel. Mas, eu mesmo prefiro a segunda forma de fazer esta mesma adição. Isto por que já estamos com o prompt aberto. Tudo que precisamos fazer é digitar o comando mostrado abaixo.
O resultado em ambos os casos será o mesmo. E pode ser visto na imagem logo abaixo. Existe um detalhe, que talvez faça diferença na sua escolha, sobre qual o melhor procedimento, para que adicionar o add-in. Tal detalhe diz respeito, ao fato de que todos os comandos feitos no prompt podem ser colocados em um arquivo de lote. Este detalhe, permite que você automatize todos estes comandos digitados. Assim fica muito mais rápido e fácil fazer todo o procedimento de integração.
Note que foi adicionada uma aba no Excel, chamada xlwings. Aqui você pode fazer uso dos scripts feitos em Python. Mas existem alguns detalhes para que isto ocorra perfeitamente bem. Novamente, estude a documentação do xlwings para saber como fazer isto. Já que você poderá estar tentando fazer as coisas de uma forma não esperada pelo xlwings. Neste caso você sempre receberá uma mensagem informando algum erro. Mesmo quando tudo parece perfeitamente funcional.
Mas para nós aqui, o que realmente importa é um outro ponto. No caso é fazer com que o script em Python, seja executado como se fosse uma macro escrita em VBA. Mas acho que o mais interessante de fato, seria unir ambos. Ou seja, usar VBA junto com o Python. Mas isto fica ao seu critério. O intuído deste artigo é apenas apresentar uma solução para um problema. O problema é como transferir informações facilmente entre o Excel e o MetaTrader 5. Ainda não chegamos neste ponto, mas estamos quase lá.
A próxima coisa a ser feita diz respeito ao VBA. Então para separar adequadamente as coisas, vamos a um novo tópico.
Integrando o Python ao VBA
Para que você possa usar Python, diretamente dentro do código feito em VBA. Existem algumas outras formas, diferentes da que iremos de fato usar aqui. Uma das formas é fazer uma chamada de SHELL. Tal coisa funciona. Porém com alguns inconvenientes que não teremos ao usar o xlwings, ou mesmo um outro que faça a mesma coisa que o xlwings.
Um exemplo de chamada de SHELL que permite executar scripts de Python dentro do código em VBA, pode ser vista abaixo:
Sub CallPythonInVBA() Dim vbaShell as Object Set vbaShell = VBA.CreateObject("WScript.Shell") vbaShell.Run """<PATH OF PYTHON>\python.exe""" & """<PATH OF SCRIPT>\Script.py""" End Sub
Macro em VBA
Este fragmento acima, permite que o VBA consiga fazer com que um script em Python seja executado. De fato, funciona. Mas para isto, note que o valor indicado como <PATH OF PYTHON> precisa apontar onde está o executável do Python. Assim como <PATH OF SCRIPT> precisa apontar o correto caminho para o arquivo, que será executado. No caso o nome do arquivo é Script.py.
Tal trabalho, não faz muito sentido, quando você consegue integrar o Python ao VBA. Isto por que, este mesmo código, visto acima, pode ser substituído por uma simples linha de comando. E com diversas vantagens. Sendo que uma delas é o fato de você não precisar se preocupar onde o Python está instalado. Uma outra, que não irei entrar em detalhes, já que foge da proposta do artigo, é que o script em Python, pode fazer parte de um projeto, onde o Excel faria parte com código VBA. Quando a integração ocorre, todo o projeto poderá ficar organizado em uma pasta ou diretório, sendo que o xlwings fará a parte da resolução tanto do caminho quanto de outras questões envolvidas. Isto para que o script em Python funcione perfeitamente bem junto com o VBA. Novamente, e de fato estou sendo repetitivo, por ser necessário. Consulte a documentação que estará sendo informada nas referências deste artigo.
Muito bem, mas vamos voltar a nossa questão. Quando você abrir o VBA no Excel irá se deparar com a seguinte imagem.
Note que destaquei uma coisa na imagem. Este ponto destacado está protegido por uma senha. Mas isto não deve de forma alguma lhe trazer incomodo ou preocupação. A senha que permite abrir este arquivo destacada, pode ser obtida na documentação do xlwings. Esta pode ser acessada no link presente na área de referência. Eu poderia dizer ela aqui, mas quero que você olhe a documentação. De qualquer maneira, aqui precisamos dizer ao VBA para fazer uso do xlwings. Isto é feito adicionando a referência do xlwings ao código que será feito aqui no VBA. Par adicionar tal referência, você deve ir no seguinte local.
Ao selecionar este ponto em destaque na imagem acima. Você será conduzido para a seguinte tela mostrada logo abaixo:
Você deverá marcar esta referência indicada na imagem acima. Se você NUNCA viu, e nunca usou, esta janela mostrada acima. Saiba que ela diz ao VBA para usar a referência indicada como ponto de apoio. Isto quando o VBA não conseguir resolver alguma pendência interna no código. Quando isto ocorrer, o VBA irá de fato procurar em meio as referências, como fazer para solucionar a chamada que foi encontrada no código. Se tal coisa não poder ser resolvida, o VBA informará a não resolução da chamada como um erro. Por isto, muita gente costuma buscar códigos de macros em VBA na Web, e quando vai tentar fazer o código encontrado na Web funcionar não consegue. Isto por conta justamente deste problema, onde o VBA não consegue resolver a questão das referências.
No nosso caso, uma das chamadas que existirão no código VBA, e que não faz parte do VBA é a RunPython. Sem marcar esta opção destacada na imagem acima, quando o VBA encontrar uma chamada RunPython, ele, o VBA, reportará esta chamada como um erro.
Então não se esqueça, sempre que for criar uma macro, ou script, que for chamar um código escrito em Python. Isto no VBA. Marque esta caixa na área de referência. Assim o seu código irá funcionar perfeitamente bem.
Considerações finais
Neste artigo, apenas apresentei a forma que você precisa proceder para que um script feito em Python, consiga ser executado dentro do Excel. Este tipo de coisa apesar de parecer inusitada e bastante estranha, nos abre muitas portas. Principalmente pelo fato de que muita coisa pode ser mais facilmente implementada em Python do que em VBA. Mas principalmente, nos permite criar um meio, bastante agradável e versátil de transferir informações entre o Excel e o MetaTrader 5. Mesmo que não façamos uso intensivo do Excel e usemos apenas o Python diretamente com o MetaTrader 5. Mas quando você de fato entender o que podemos fazer não irá deixar tudo apenas para o Python e o MetaTrader 5. Irá realmente querer colocar o Excel, ou um outro programa de planilha na jogada.
Então no próximo artigo, veremos como realmente o código que faz tudo isto funcionar, será implementado. Então nos vemos no próximo artigo.
Referencias
Arquivo | Descrição |
---|---|
Experts\Expert Advisor.mq5 | Demonstra a interação entre o Chart Trade e o Expert Advisor ( É necessário o Mouse Study para interação ) |
Indicators\Chart Trade.mq5 | Cria a janela para configuração da ordem a ser enviada ( É necessário o Mouse Study para interação ) |
Indicators\Market Replay.mq5 | Cria os controles para interação com o serviço de replay / simulador ( É necessário o Mouse Study para interação ) |
Indicators\Mouse Study.mq5 | Permite interação entre os controles gráficos e o usuário ( Necessário tanto para operar o replay simulador, quanto no mercado real ) |
Services\Market Replay.mq5 | Cria e mantém o serviço de replay e simulação de mercado ( Arquivo principal de todo o sistema ) |
Code VS C++\Servidor.cpp | Cria e mantém um soquete servidor criado em C++ ( Versão Mini Chat ) |
Code in Python\Server.py | Cria e mantém um soquete em python para comunicação entre o MetaTrader 5 e o Excel |
Scripts\CheckSocket.mq5 | Permite efetuar um teste de conexão com um soquete externo |
Indicators\Mini Chat.mq5 | Permite implementar um mini chat via indicador ( Necessário uso de um servidor para funcionar ) |
Experts\Mini Chat.mq5 | Permite implementar um mini chat via Expert Advisor ( Necessário uso de um servidor para funcionar ) |





- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso