Discussão do artigo "Integração da MetaTrader 5 e Python: recebendo e enviando dados" - página 7

 
yogibass:

@Maxim Dmitrievsky

Eu só queria agradecer por disponibilizar esse recurso. Eu sempre quis poder codificar meus indicadores em Python e, desde que você iniciou este tópico, pude acessar dados de futuros em tempo real e usá-los para desenvolver e executar meus indicadores. Uso meu Python para plotar e analisar o feed ao vivo e faço negociações por meio da plataforma MT5 - funciona muito bem. Por favor, continue com o bom trabalho e eu realmente espero que o Python seja totalmente adotado pela comunidade MT.

Muito obrigado e cumprimentos!

Olá, você sabe por que o código não compila? Recebo um valor none.

rates = MT5CopyRatesFromPos(i, MT5_TIMEFRAME_M1, 0, 1000)
     d[i] = [y.close for y in rates
 
Dannyhill.0:
Olá, você sabe por que o código não é compilado? Recebo um valor none.

Vários motivos...

  • falta de colchetes na lista comp
  • uso de funções obsoletas do pacote MetaTrader5
  • i não está definido
  • namespace poluído pelo uso de from x import * (possíveis colisões?)
  • close não é um atributo de ndarray
  • não iterar um ndarray para extrair uma série
  • o terminal foi inicializado???

Deveria ter a seguinte aparência

import MetaTrader5 as mt

try:
    if not mt.initialize():
        raise Exception('Failed to initialize')
    close_price_map = {}
    for symbol in ['EURUSD', 'USDJPY']:
        rates = mt.copy_rates_from_pos(symbol, mt.TIMEFRAME_M1, 0, 5)
        close_price_map[symbol] = rates['close']
        print(symbol)
        print(close_price_map[symbol])
except Exception as e:
    print(e)
finally:
    mt.shutdown()
    
# EURUSD
# [1.12594 1.12598 1.12584 1.12564 1.12543]
# USDJPY
# [107.5   107.494 107.509 107.525 107.527]

Consulte os documentos https://www.mql5.com/pt/docs/integration/python_metatrader5

Documentation on MQL5: Integration / MetaTrader for Python
Documentation on MQL5: Integration / MetaTrader for Python
  • www.mql5.com
Python is a modern high-level programming language for developing scripts and applications. It contains multiple libraries for machine learning, process automation, as well as data analysis and visualization. MetaTrader package for Python is designed...
 
Estou tentando usá-lo no MT4 e ele diz"SocketClose function not defined"... as funções MQL5 também funcionam no MQL4? Não vejo nada na própria documentação. Isso deve ser executado em MQL4? Você pode me ajudar a descobrir isso, por favor?
 

Encontrei um excelente github

api do metatrader em python

[Excluído]  
sanazgolriz:
Estou tentando usá-lo no MT4 e ele diz"SocketClose function not defined"... as funções MQL5 também funcionam no MQL4? Não vejo nada na própria documentação. Isso deve ser executado em MQL4? Você pode me ajudar a descobrir isso, por favor?

oi, acho que as funções de soquete não funcionam no metatrader4

Você pode usá-las no MT5 e também pode usar o novo pacote MetaTrader5 (consulte a documentação).

Para o MT4, você pode tentar o zeromq

Documentation on MQL5: Integration / MetaTrader for Python
Documentation on MQL5: Integration / MetaTrader for Python
  • www.mql5.com
Python is a modern high-level programming language for developing scripts and applications. It contains multiple libraries for machine learning, process automation, as well as data analysis and visualization. MetaTrader package for Python is designed...
 

Olá, Maxim!

Em outro tópico, você me ajudou com a modificação do código, pelo que gostaria de agradecê-lo mais uma vez. Pesquisei no site da MQL5 e encontrei seu artigo sobre como receber e enviar dados usando a linguagem de programação Python. No entanto, tenho uma pergunta amadora, talvez até infantil: um soquete de rede é um dispositivo físico ou um produto de software na forma de um conjunto de vários arquivos ou um único arquivo, por exemplo, o mesmo csv?

Atenciosamente, Vladimir.

[Excluído]  
MrBrooklin:

Olá, Maxim!

Em outro tópico, você me ajudou com a modificação do código, pelo que gostaria de agradecê-lo mais uma vez. Pesquisei no site da MQL5 e encontrei seu artigo sobre como receber e enviar dados usando a linguagem de programação Python. No entanto, tenho uma pergunta amadora, talvez até infantil: um soquete de rede é um dispositivo físico ou um produto de software na forma de um conjunto de vários arquivos ou um único arquivo, por exemplo, o mesmo csv?

Atenciosamente, Vladimir.

É uma interface de software por meio da qual os programas (processos) podem trocar dados. Por exemplo, quando você acessa um site, você acessa o soquete aberto do servidor do site. A mesma coisa pode ser feita em um único PC. Em termos gerais, um soquete é um recurso interno do sistema operacional.

 
Maxim Dmitrievsky:

Trata-se de uma interface de software por meio da qual os programas (processos) podem se comunicar. Por exemplo, quando você acessa um site, você acessa o soquete aberto do servidor do site. A mesma coisa pode ser feita em um único PC. Em termos gerais, um soquete é um recurso incorporado do sistema operacional.

Obrigado, Maxim!

Entendi corretamente a essência de seu artigo? Vou colocar em minhas próprias palavras, e você pode me corrigir se eu tiver entendido algo errado.

  1. Vamos supor que haja alguns programas de terceiros em meu computador, criados em uma linguagem de programação fundamentalmente diferente da linguagem de programação MQL, mas que eu precise muito desses programas para meu trabalho.
  2. O código do programa escrito na linguagem de programação Python me permite vincular a interação desses programas de terceiros, por exemplo, com o mesmo terminal MT5.
  3. Os programas de terceiros de outro computador podem controlar remotamente o trabalho do mesmo terminal MT5 no meu computador.

Isso está correto? Explicarei mais tarde por que faço essas perguntas.

Atenciosamente, Vladimir.

[Excluído]  
MrBrooklin:

Obrigado, Maxim!

Entendi corretamente a essência de seu artigo? Vou colocar em minhas próprias palavras, e você pode me corrigir se eu tiver entendido algo errado.

  1. Vamos supor que haja alguns programas de terceiros em meu computador, criados em uma linguagem de programação fundamentalmente diferente da linguagem de programação MQL, mas preciso muito desses programas para meu trabalho.
  2. O código do programa escrito na linguagem de programação Python me permite vincular a interação desses programas de terceiros, por exemplo, com o mesmo terminal MT5.
  3. Os programas de terceiros podem controlar remotamente o trabalho do mesmo terminal MT5.

Isso está correto? Explicarei mais tarde por que faço essas perguntas.

Saudações, Vladimir.

Depende da tarefa, é difícil dizer. Em vez disso, é melhor "vinculá-los" diretamente, se você tiver acesso ao código-fonte. Caso contrário, se houver um programa, mas não houver código-fonte e você precisar muito dele, poderá fazer algo por meio de scripts Python, sim, onde for possível.
 
Maxim Dmitrievsky:
Depende da tarefa, é difícil dizer. Em vez disso, é melhor "vinculá-los" diretamente, se você tiver acesso ao código-fonte. Caso contrário, se houver um programa, mas não houver código-fonte e você precisar muito dele, poderá fazer algo por meio de scripts Python, sim, onde for possível.

Agora vamos à tarefa em si. Não se trata de uma tarefa técnica, mas de uma breve declaração de sua essência.

Você precisa coletar periodicamente (por exemplo, uma vez por hora, uma vez por dia, uma vez por semana) vários dados de vários sites (não mais que 10) e realizar cálculos intermediários complexos em um programa de terceiros (não MQL). O resultado desses cálculos serão três sinais para o controle do terminal MT5: um sinal para abrir uma ordem de compra, um sinal para abrir uma ordem de venda ou um sinal para fechar uma ordem.

Isso é possível? Preciso saber disso para poder compor com competência uma tarefa técnica como freelancer.

Atenciosamente, Vladimir.

Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Свойства пользовательских индикаторов
Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Свойства пользовательских индикаторов
  • www.mql5.com
Количество индикаторных буферов, которые можно использовать в пользовательском индикаторе, не ограничено. Но каждому массиву, который назначается в качестве индикаторного буфера с помощью функции SetIndexBuffer(), должен быть указан тип данных, которые он будет хранить. Это может быть одно из значений перечисления ENUM_INDEXBUFFER_TYPE...