Criando ordens com o Metatrader5 utilizando o Python

No post de hoje, iremos entender como é possível criar ordens de compra e venda de ativos por meio do Metatrader 5 utilizando o Python.

O Metatrader 5 é uma plataforma de negociação, que permite analisar dados de diferentes ativos financeiros, bem como realizar transações. O interessante da plataforma é a possibilidade de conexão com a linguagem Python, por meio da biblioteca MetaTrader5.

No nosso Curso de Python para Investismentos, nós ensinamos os alunos a aprenderem Python do zero e demais vários exemplos de como utilizar a linguagem no dia a dia do mercado financeiro.

Já mostramos aqui no blog a como conectar uma conta com a plataforma e usar comandos para importar dados dos ativos para o Python, entretanto, há ainda algumas possibilidades interessantes do qual é possível utilizar com o MetaTrader 5: criar ordens de compra e venda.

E se estamos utilizando o Python, vocês podem estar pensando, é possível usar estratégias de trading e enviar em tempo real para a plataforma? Sim, é possível. Realizaremos essa possibilidade por etapas, e hoje trabalharemos para entender as funções e métodos de ordem da biblioteca.

A primeira etapa será abrir o MetaTrader 5 e se conectar para importar os dados de um ativo para o Python.

import MetaTrader5 as mt5
import pandas as pd
import numpy as np
from datetime import datetime
import time
import talib
mt5.initialize()
con = mt5.terminal_info()
symbol = 'PETR4'
symbol_info = mt5.symbol_info(symbol)
price_petr = mt5.copy_rates_from(symbol, mt5.TIMEFRAME_D1, time.time(), 100)
price_petr_df = pd.DataFrame(price_petr)
# Converte o tipo de formato da data
price_petr_df['time'] = pd.to_datetime(price_petr_df['time'], unit='s')

Uma vez que importamos os dados, devemos criar o request para realizar a ordem, seja de compra ou de venda, o request definirá a qual preço será comprado a ação, entre outras características, vejamos abaixo como podemos preenche-lo

     request = {
             "action":
              "symbol":
              "volume":
              "type":
              "sl":
              "tp":
              "deviation":
              "magic":
              "comment":
              "type_time"
              "type_filling":
}

No dicionário acima, definimos cada chave como:

  • action: Ação da operação. O valor pode ser de acordo com a numeração do método TRADE_REQUEST_ACTIONS
  • symbol: O nome do instrumentos financeiro
  • volume: Volume das ofertas
  • type: tipo de ordem. Os valores podem ser de acordo com o método ORDER_TYPE
  • sl: Preço do Stop Loss
  • tp: Preço de realização do lucro
  • deviation: Desvio máximo aceitável
  • magic:
  • comment: Comentário
  • type_time: Expiração do tempo de ordem
  • type_filling:  Preenchimento da ordem

Construindo uma ordem por meio de Médias Móveis

Agora que entendemos como pode ser criado o request das ordens, vamos criar uma estratégia de Médias Moveis Simples e executar manualmente no MetaTrader 5.


fast_sma = talib.SMA(close, 42)
slow_sma = talib.SMA(close, 252)
last_fast_sma = fast_sma[-1]
last_slow_sma = slow_sma[-1]
price = mt5.symbol_info_tick(symbol).ask
deviation = 20
lot = 0.02
if last_fast_sma < last_slow_sma :
        request = {
                "action": mt5.TRADE_ACTION_DEAL, 
                "symbol": symbol,
                "volume": lot,
                "type": mt5.ORDER_TYPE_SELL,
                "sl": price - 0.005,
                "tp": price + 0.007,
                "deviation": deviation,
                "magic": 123456,
                "comment": "",
                "type_time": mt5.ORDER_TIME_GTC,
                "type_filling": mt5.ORDER_FILLING_IOC}
        mt5.order_send(request)

if  last_fast_sma > last_slow_sma :
        request = {
               "action": mt5.TRADE_ACTION_DEAL,
               "symbol": symbol,
               "volume": lot,
               "type": mt5.ORDER_TYPE_BUY,
               "sl": price + 0.005,
               "tp": price - 0.007,
               "deviation": deviation,
               "magic": 123456,
               "comment": "",
               "type_time": mt5.ORDER_TIME_GTC,
               "type_filling": mt5.ORDER_FILLING_IOC}
else:
    print('Esperando pelo sinal')

result = mt5.order_send(request)

print(result)

print(price)

mt5.shutdown()

A depender do resultado, poderá criar uma execução diferente. No próximo post, iremos elevar a complexidade e criar um algoritmo que possibilite o envio de ordens automaticamente e em tempo real.

______________________________________

Quer saber mais?

Veja nosso curso de Python para Investimentos.

Compartilhe esse artigo

Facebook
Twitter
LinkedIn
WhatsApp
Telegram
Email
Print

Comente o que achou desse artigo

Outros artigos relacionados

Automatizando a Construção de Códigos em Python com LangGraph

Neste post, mostramos como construir um agente de código em Python utilizando LangGraph, LangChain e Gemini. A proposta é construir um protótipo para automatizar o ciclo completo de geração, execução e correção de código com o uso de LLMs, organizando o processo em um grafo de estados.

Análise de Dados com REPL Tool e LLM usando LangGraph

Neste post, vamos mostrar como você pode criar um agente que interpreta e executa código Python em tempo real, utilizando o REPL-Tool e um LLM da família Gemini. Começamos com um exemplo genérico e, em seguida, aplicamos a mesma estrutura à análise econômica de uma série histórica do IPCA.

Frameworks para criar AI Agents

Neste post, vamos dar o primeiro passo rumo à construção de Agentes de IA mais sofisticados, capazes de tomar decisões, interagir com ferramentas externas e lidar com tarefas complexas. Para isso, precisamos entender o papel dos frameworks agenticos (ou agentic frameworks) e como eles podem facilitar esse processo. Aqui introduzimos dois frameworks populares de desenvolvimento de Agentes de IA.

Boletim AM

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais e conteúdos exclusivos sobre Análise de Dados!

Boletim AM

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais e conteúdos exclusivos sobre Análise de Dados!

como podemos ajudar?

Preencha os seus dados abaixo e fale conosco no WhatsApp

Boletim AM

Preencha o formulário abaixo para receber nossos boletins semanais diretamente em seu e-mail.