Tem como determinar o diretório onde o arquivo .EX5 é gerado?

 

Pelo que entendi até o momento (por favor me corrijam se eu estiver errado):

1) O compilador MQL5 grava o executável .EX5 sempre no mesmo diretório onde está o fonte compilado.

2) O executável .EX5 só aparece disponível para uso na plataforma se estiver dentro da pasta padrão de Scripts, Expert Advisors ou Indicators, conforme o tipo de programa.

Como tenho construídos projetos diferentes simultaneamente e uso o GitHub pra armazenar e versionar meus fontes, eu consigo compilar e gerar o executável no diretório onde clono meu repositório do GitHub, fora do "sandbox" do MT5, mas para poder executar na plataforma eu fico sempre tendo que copiar manualmente os arquivos executáveis para essas pastas dentro do "sandbox" do MT5.

Imagino que deve haver alguma maneira mais prática de trabalhar:

- Tem como eu especificar na configuração do compilador que o executável deve ser gravado numa pasta específica lá dentro do Sandbox?

- Ou, alternativamente, tem como executar na plataforma um .EX5 que esteja fora do "sandbox" ?

- Alguma outra ideia para evitar ter que ficar copiando executáveis daqui pra lá a toda hora?

obs: cheguei a pensar em criar dentro do sandbox um link de junção (MKLINK /J no Windows) para o meu repositório do GitHub, mas pra isso funcionar eu teria que separar os EA's, os Scripts e os Indicadores que fazem parte de um mesmo projeto em projetos distintos, pois são executados em diretórios diferentes dentro do Sandbox (isso complica por causa dos include file .MQH que são incluídos em programas de tipos diferentes). 

 
Trader_Patinhas:

Pelo que entendi até o momento (por favor me corrijam se eu estiver errado):

1) O compilador MQL5 grava o executável .EX5 sempre no mesmo diretório onde está o fonte compilado.

2) O executável .EX5 só aparece disponível para uso na plataforma se estiver dentro da pasta padrão de Scripts, Expert Advisors ou Indicators, conforme o tipo de programa.

Como tenho construídos projetos diferentes simultaneamente e uso o GitHub pra armazenar e versionar meus fontes, eu consigo compilar e gerar o executável no diretório onde clono meu repositório do GitHub, fora do "sandbox" do MT5, mas para poder executar na plataforma eu fico sempre tendo que copiar manualmente os arquivos executáveis para essas pastas dentro do "sandbox" do MT5.

Imagino que deve haver alguma maneira mais prática de trabalhar:

- Tem como eu especificar na configuração do compilador que o executável deve ser gravado numa pasta específica lá dentro do Sandbox?

- Ou, alternativamente, tem como executar na plataforma um .EX5 que esteja fora do "sandbox" ?

- Alguma outra ideia para evitar ter que ficar copiando executáveis daqui pra lá a toda hora?

obs: cheguei a pensar em criar dentro do sandbox um link de junção (MKLINK /J no Windows) para o meu repositório do GitHub, mas pra isso funcionar eu teria que separar os EA's, os Scripts e os Indicadores que fazem parte de um mesmo projeto em projetos distintos, pois são executados em diretórios diferentes dentro do Sandbox (isso complica por causa dos include file .MQH que são incluídos em programas de tipos diferentes). 

Não uso mais o Metaeditor, uso o Visual Studio Code... Com isso tive o problema de, depois de recompilado, o novo .EX5 não ser reconhecido pelo Metatrader.


Só o Metaeditor tem a capacidade - pelo que testei no passado - de reconhecer uma nova versão de um .EX5 e atualizar a interface do Metatrader...


Já sabendo isso, procurei ao máximo usar sempre o ecossistema do Metatrader/Metaeditor porque só meu deu dor de cabeça quando tentei moldá-lo à minha forma de desenvolvimento.

Coisas que consegui ELIMINAR do processo tradicional que todos usam:

1 - MQL Storage, baseado em Subversion, que eu particularmente odeio por experiencia profissional passada, e sinceramente, se seu projeto é comercial, você estará deixando seu código-fonte nas mãos de servidores russos que você mal conhece (e sequer conhecerá). Hoje, uso o .Git na própria árvore da instalação do MQL5. Portanto versionamento e backup é tranquilo. Externamente, faço a minha publicação fail-safe no BitBucket.

2- Metaeditor. Com o Visual Studio Code e alguns truques, meu ambiente de desenvolvimento é mil vezes mais produtivo e integrado. DEV-COMP-EXE-TEST.


Talvez usando um script de Powershell do Windows vc consiga automatizar a cópia de arquivos, assim que for reconhecida uma nova "versão" de um .EX5 seu...


O que eu sempre procurei fazer é não interferir muito com a estrutura básica de funcionamento e comportamento do Metatrader, visto que ele é muito chato e fechado... Apenas adicionei meus hacks... que claro, falharão em alguma versão mais potente e nova do MQL5... Mas como trabalho no próprio ecossistema dele, as mudanças deverão ser pequenas ou fáceis de contornar...


;)

 
Flavio Jarabeck:

Não uso mais o Metaeditor, uso o Visual Studio Code... Com isso tive o problema de, depois de recompilado, o novo .EX5 não ser reconhecido pelo Metatrader.


Só o Metaeditor tem a capacidade - pelo que testei no passado - de reconhecer uma nova versão de um .EX5 e atualizar a interface do Metatrader...


Já sabendo isso, procurei ao máximo usar sempre o ecossistema do Metatrader/Metaeditor porque só meu deu dor de cabeça quando tentei moldá-lo à minha forma de desenvolvimento.

Coisas que consegui ELIMINAR do processo tradicional que todos usam:

1 - MQL Storage, baseado em Subversion, que eu particularmente odeio por experiencia profissional passada, e sinceramente, se seu projeto é comercial, você estará deixando seu código-fonte nas mãos de servidores russos que você mal conhece (e sequer conhecerá). Hoje, uso o .Git na própria árvore da instalação do MQL5. Portanto versionamento e backup é tranquilo. Externamente, faço a minha publicação fail-safe no BitBucket.

2- Metaeditor. Com o Visual Studio Code e alguns truques, meu ambiente de desenvolvimento é mil vezes mais produtivo e integrado. DEV-COMP-EXE-TEST.


Talvez usando um script de Powershell do Windows vc consiga automatizar a cópia de arquivos, assim que for reconhecida uma nova "versão" de um .EX5 seu...


O que eu sempre procurei fazer é não interferir muito com a estrutura básica de funcionamento e comportamento do Metatrader, visto que ele é muito chato e fechado... Apenas adicionei meus hacks... que claro, falharão em alguma versão mais potente e nova do MQL5... Mas como trabalho no próprio ecossistema dele, as mudanças deverão ser pequenas ou fáceis de contornar...


;)

Pra programar MQL5 eu tenho usado o MetaEditor mesmo. Só que no meu projeto atual de algotrading não há apenas código MQL5, pois eu também uso Python para treinar modelos preditivos de aprendizado de máquina e C++ para processamengto intenso com grandes massas de dados, como pré-processamento dos dados de treinamento e execução de backtests (não uso o testador de estratégias do MT5 porque o meu modelo preditivo usa informações não disponíveis no testador, tais como direção do fluxo e volumes ofertados no book).

Por isso tenho preferido manter o repositório desse projeto no mesmo local onde estão os meus outros repositórios do git (de outros projetos não-relacionados a trading), em vez de movê-lo para a árvore de instalação do MQL% (o "sandbox"), senão vai ter um monte de código C++ e Python ali misturado, ou então eu teria que separar a parte de MQL5 em um projeto distinto (complicado porque há include files em comum definindo, por exemplo, descrição das estruturas de dados trocadas entre programas MQL5, C++ e Python).

A solução que estou usando no momento é um link de junção, criado no Windows pelo comando "MKLINK /J <nome-do-link> <nome-da-pasta-linkada>". Com isso, faço aparecer, dentro da janela de navegação do MT5, o diretório "mql5" do meu projeto Git, que é onde estão apenas os fontes MQL5 e seus executáveis .EX5 (já que o compilador MQL5 gera o executável sempre no mesmo lugar do fonte e aparentemente não há como mudar isso)  e assim consigo executar os EA's e scripts diretamente na plataforma, sem necessidade de copiar arquivos.

Mas ainda estou aberto a uma solução que seja mais elegante e mais simples.

 
Trader_Patinhas:

Pelo que entendi até o momento (por favor me corrijam se eu estiver errado):

1) O compilador MQL5 grava o executável .EX5 sempre no mesmo diretório onde está o fonte compilado.

2) O executável .EX5 só aparece disponível para uso na plataforma se estiver dentro da pasta padrão de Scripts, Expert Advisors ou Indicators, conforme o tipo de programa.

Como tenho construídos projetos diferentes simultaneamente e uso o GitHub pra armazenar e versionar meus fontes, eu consigo compilar e gerar o executável no diretório onde clono meu repositório do GitHub, fora do "sandbox" do MT5, mas para poder executar na plataforma eu fico sempre tendo que copiar manualmente os arquivos executáveis para essas pastas dentro do "sandbox" do MT5.

Imagino que deve haver alguma maneira mais prática de trabalhar:

- Tem como eu especificar na configuração do compilador que o executável deve ser gravado numa pasta específica lá dentro do Sandbox?

- Ou, alternativamente, tem como executar na plataforma um .EX5 que esteja fora do "sandbox" ?

- Alguma outra ideia para evitar ter que ficar copiando executáveis daqui pra lá a toda hora?

obs: cheguei a pensar em criar dentro do sandbox um link de junção (MKLINK /J no Windows) para o meu repositório do GitHub, mas pra isso funcionar eu teria que separar os EA's, os Scripts e os Indicadores que fazem parte de um mesmo projeto em projetos distintos, pois são executados em diretórios diferentes dentro do Sandbox (isso complica por causa dos include file .MQH que são incluídos em programas de tipos diferentes). 

Olá  Trader_Patinhas, concordo com 1) e 2). Existe um recurso relativamente recente que é a criação de projetos, mas se entendi bem seu problema, não vai adiantar muito. Entretanto, para evitar as etapas manuais da sua solução atual, ou até criar algumas soluções de contorno nesse sentido, talvez uma forma seja utilizar um cliente próprio para comunicação com o sistema de versionamento, uma vez que a solução do MT5 é baseada no Subversion (Apache), e nesse caso você precisa de um cliente open source compatível para que possa adaptar e automatizar esse processo.
Sds.,
Rogério Figurelli

 
Rogerio Figurelli:

Olá  Trader_Patinhas, concordo com 1) e 2). Existe um recurso relativamente recente que é a criação de projetos, mas se entendi bem seu problema, não vai adiantar muito. Entretanto, para evitar as etapas manuais da sua solução atual, ou até criar algumas soluções de contorno nesse sentido, talvez uma forma seja utilizar um cliente próprio para comunicação com o sistema de versionamento, uma vez que a solução do MT5 é baseada no Subversion (Apache), e nesse caso você precisa de um cliente open source compatível para que possa adaptar e automatizar esse processo.
Sds.,
Rogério Figurelli

Oi @Rogerio Figurelli

Eu já tinha experimentado o recurso de criação de projetos e realmente elimina esse problema.

Acabei resolvendo com link de junção mesmo (no Windows: "MKLINK /J <nome-do-link> <nome-do-diretório-apontado>").

Fiz assim:

1) Mantive o clone do repositório GitHub no lugar normal onde mantenho todos os meus projetos, inclusive os não-relacionados ao Metatrader.

2) Reorganizei o repositório do projeto separando os fontes em subdiretórios chamados "mql5", "python" e "cpp", conforme a linguagem de programação.

3) No diretório de Expert Advisors na "sandbox" do MT5, criei um link de junção para o subdiretório "mql5" do repositório do projeto: "MKLINK /J <path-do-sandbox-do-terminal>/Experts/<nome-do-projeto> <path-do-repositório-GitHub>/mql5"

Com isso, eu mantenho todos os fontes MQL5 do projeto no local que eu quero e, quando os compilo, os executáveis ficam disponíveis automaticamente na área de "Expert Advisors" do terminal.

A única coisa chata é que o MetaEditor cria os executáveis .EX5 na mesma pasta dos fontes e aparentemente não há como mudar isso, o que me obriga a desmarcar os executáveis a cada vez que faço "commit" no GitHub (a menos que eu não me importe em deixar o GitHub versionando arquivos executáveis como se fossem fontes). 

 
Trader_Patinhas:

Oi @Rogerio Figurelli

Eu já tinha experimentado o recurso de criação de projetos e realmente elimina esse problema.

Acabei resolvendo com link de junção mesmo (no Windows: "MKLINK /J <nome-do-link> <nome-do-diretório-apontado>").

Fiz assim:

1) Mantive o clone do repositório GitHub no lugar normal onde mantenho todos os meus projetos, inclusive os não-relacionados ao Metatrader.

2) Reorganizei o repositório do projeto separando os fontes em subdiretórios chamados "mql5", "python" e "cpp", conforme a linguagem de programação.

3) No diretório de Expert Advisors na "sandbox" do MT5, criei um link de junção para o subdiretório "mql5" do repositório do projeto: "MKLINK /J <path-do-sandbox-do-terminal>/Experts/<nome-do-projeto> <path-do-repositório-GitHub>/mql5"

Com isso, eu mantenho todos os fontes MQL5 do projeto no local que eu quero e, quando os compilo, os executáveis ficam disponíveis automaticamente na área de "Expert Advisors" do terminal.

A única coisa chata é que o MetaEditor cria os executáveis .EX5 na mesma pasta dos fontes e aparentemente não há como mudar isso, o que me obriga a desmarcar os executáveis a cada vez que faço "commit" no GitHub (a menos que eu não me importe em deixar o GitHub versionando arquivos executáveis como se fossem fontes). 

Olá  Trader_Patinhas, perfeitamente, obrigado por compartilhar.
Sds.,
Rogério Figurelli

 
O meta editor não localiza a pasta include mesmo fazendo o processo todo certo alguém pode me ajudar
 
André Silva #:
O meta editor não localiza a pasta include mesmo fazendo o processo todo certo alguém pode me ajudar
Provavelmente vc não está passando corretamente o endereço. Sem parte do código é difícil te ajudar.

Sugiro abrir uma postagem nova.
 
Trader_Patinhas #:

Oi @Rogerio Figurelli

Eu já tinha experimentado o recurso de criação de projetos e realmente elimina esse problema.

Acabei resolvendo com link de junção mesmo (no Windows: "MKLINK /J <nome-do-link> <nome-do-diretório-apontado>").

Fiz assim:

1) Mantive o clone do repositório GitHub no lugar normal onde mantenho todos os meus projetos, inclusive os não-relacionados ao Metatrader.

2) Reorganizei o repositório do projeto separando os fontes em subdiretórios chamados "mql5", "python" e "cpp", conforme a linguagem de programação.

3) No diretório de Expert Advisors na "sandbox" do MT5, criei um link de junção para o subdiretório "mql5" do repositório do projeto: "MKLINK /J <path-do-sandbox-do-terminal>/Experts/<nome-do-projeto> <path-do-repositório-GitHub>/mql5"

Com isso, eu mantenho todos os fontes MQL5 do projeto no local que eu quero e, quando os compilo, os executáveis ficam disponíveis automaticamente na área de "Expert Advisors" do terminal.

A única coisa chata é que o MetaEditor cria os executáveis .EX5 na mesma pasta dos fontes e aparentemente não há como mudar isso, o que me obriga a desmarcar os executáveis a cada vez que faço "commit" no GitHub (a menos que eu não me importe em deixar o GitHub versionando arquivos executáveis como se fossem fontes). 

Nesse caso dá para colocar os  *.EX5 no .gitignore.

Gostei dessa solução.
Razão: