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.