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.