Método mt5.order_send() não executa, sempre retornando "Nome" usando python

 

Estou tentando enviar ordens ( buy, sell e modify ), mas meu objeto que executa a rotina sempre retorna "None", segue o exemplo do código:

import MetaTrader5 as mt5
def SendBuyLimit(path, login, server):

if not mt5.initialize(path,login=login, server=server, timeout=10000, profile="Default"):

print("initialize() failed, error code =",mt5.last_error())

else:

request = {

"action": mt5.TRADE_ACTION_PENDING,

"symbol": "VALE3",

"volume": 100,

"price": 41.02,

"comment": "Teste",

"type": mt5.ORDER_TYPE_BUY_LIMIT,

"type_time": mt5.ORDER_TIME_DAY,

"type_filling": mt5.ORDER_FILLING_RETURN,

"expiration": mt5.ORDER_TIME_DAY,

}

result = mt5.order_send(request)

print(result)

print(result.retcode)

mt5.shutdown()


****************************

teste.py

None   ( resultado do print(result) )

Traceback (most recent call last):

  File "C:\Users\Usuário\projetos\metatrader5\teste.py", line 38, in <module>

    main()

  File "C:\Users\Usuário\projetos\metatrader5\teste.py", line 31, in main

    SendBuyLimit(mtPath, 232015, "ModalMais-MetaTrader 5")

  File "C:\Users\Usuário\projetos\metatrader5\teste.py", line 25, in SendBuyLimit

    print(result.retcode)

AttributeError: 'NoneType' object has no attribute 'retcode'


*****************************

Versão: python

Python 3.5.0 (v3.5.0:374f501f4567, Sep 13 2015, 02:16:59) [MSC v.1900 32 bit (Intel)] on win32

Type "help", "copyright", "credits" or "license" for more information.

>>>

*****************************

Tenho outras rotinas que funcionam normalmente, mas todas fazendo get de informações da conta, todas as rotinas que usam ( MqlTradeResult e MqlTradeRequest ), simplesmente retornam "None" .

Alguém passou por isso? ( desde já agradeço a colaboração )

 
ClaudioRocha:

Estou tentando enviar ordens ( buy, sell e modify ), mas meu objeto que executa a rotina sempre retorna "None", segue o exemplo do código:

Bom dia,


Tente atualizar a sua biblioteca MetaTrader5 no seu ambiente python, aconteceu algo parecido comigo.


 

Obrigado @Jonathan Pereira

Consegui executar minha rotina que ajusta o TakeProfit e provavelmente as outras rotinas estão com o mesmo problema. Coisa simples, no payload estava mandando mais informações que o necessário.

Vou fazer os testes na rotina acima.

Att.




Jonathan Pereira:

Bom dia,


Tente atualizar a sua biblioteca MetaTrader5 no seu ambiente python, aconteceu algo parecido comigo.


Jonathan Pereira
Jonathan Pereira
  • www.mql5.com
Desenvolvedor de Sistemas, meu hobby é codificar. Apaixonado por códigos Java, Python, MQL5, JavaScript. Conheci o mercado financeiro por acaso em 2016, e desde então ganhei uma nova paixão, logo na sequencia descobri sobre a existência da plataforma MetaTrader e que havia a possibilidade de codificar estratégias, logo paixão a primeira vista...
 

Estou com o mesmo problema, atualizei minha biblioteca e não funcionou.

Achei estranho pois algumas funções como mt5.copyratesfrom(), funcionam perfeitamente.

Já outras como a mt5.symbols_get(), order_send(), estão retornando vazias, devo fazer alguma configuração adicional?

Apenas instalei a biblioteca do metatrader, tentei rodar no VisualStudio e no próprio compilador do MQ5 porém ambos tem o mesmo comportamento.

Thanks all!

 
robsonspereira:

Estou com o mesmo problema, atualizei minha biblioteca e não funcionou.

Achei estranho pois algumas funções como mt5.copyratesfrom(), funcionam perfeitamente.

Já outras como a mt5.symbols_get(), order_send(), estão retornando vazias, devo fazer alguma configuração adicional?

Apenas instalei a biblioteca do metatrader, tentei rodar no VisualStudio e no próprio compilador do MQ5 porém ambos tem o mesmo comportamento.

Thanks all!

Atualize a versão do terminal.

 

Jonathan, boa tarde.

Obrigado pelo apoio

Meu pacote do MetaTrader5 encontra-se na versão 5.0.31, pelo que vi no PyPI é a mais recente.

MetaTrader5 package version:  5.0.31.


Meu Metrader aparentemente também está na versão mais recente.

2020.05.15 15:10:09.035 LiveUpdate you are using the latest version


Existe mais alguma atualização que devo fazer?


Obrigado.


Robson

 
robsonspereira:

Jonathan, boa tarde.

Obrigado pelo apoio

Meu pacote do MetaTrader5 encontra-se na versão 5.0.31, pelo que vi no PyPI é a mais recente.

MetaTrader5 package version:  5.0.31.


Meu Metrader aparentemente também está na versão mais recente.

2020.05.15 15:10:09.035 LiveUpdate you are using the latest version


Existe mais alguma atualização que devo fazer?


Obrigado.


Robson

Mas mesmo assim o erro persiste??

eu por exemplo estou na versão 2419, mas eu uso sempre a versão beta (por opção)

 

@ClaudioRocha @robsonspereira @Jonathan Pereira

Galera estava com o mesmo problema, então rodei o comando mt5.last_error() e com isso apareceu o erro de volume invalido.

 

Parece que sua ordem esta sendo rejeitada.

Para saber o motivo, tem que verificar o last_error().

Após a linha

result = mt5.order_send(request)

e antes das linhas

print(result)
print(result.retcode)

inclua isto aqui para verificar que erro está acontecendo:

if result is None:
        print("order_send() failed, error code =",mt5.last_error())
 

@Trader_Patinhas

Eu consegui resolver meu problema de ordem, talvez eu não tenha deixado claro, mas estava apenas compartilhando como detectar o problema deles.

Mas valeu!

Trader_Patinhas
Trader_Patinhas
  • www.mql5.com
Sou um pato velho, engenheiro eletrônico e de computação, que desenvolve software há mais de 30 anos. Gosto de construir robôs advisors e de surfar no mercado financeiro. Algumas vezes surfo maremotos e outras vezes tomo caldo e me esborracho na areia...
 

A bilblioteca do Metatrader5 para python não aceita None, então simplesmente não envio os valores None que deve funcionar.

Abraços