symbol = 'WINZ21'
lot = 0.1
....
O índice tem como lote minimo 1 e não frações, e outra precisa de tratamento de erro nisso ai eim.
Desculpe a franqueza, mas se quer usar a linguagem python para envio de ordem, tenha em mente que vc precisa no mínimo saber usar o modo debug do python para capturar erros como esses e saber trata-los.
Jonathan Pereira #:
O índice tem como lote minimo 1 e não frações, e outra precisa de tratamento de erro nisso ai eim.
Desculpe a franqueza, mas se quer usar a linguagem python para envio de ordem, tenha em mente que vc precisa no mínimo saber usar o modo debug do python para capturar erros como esses e saber trata-los.
Jonathan, agradeço responder, mesmo corrigido a questão de lotes ele retorna um erro cujo não consigo identificar, é possível que tenha a ver com a corretora? já tentei resolver de diversas formas mas sem exito..
symbol = 'WINZ21' lot = 1 point = mt5.symbol_info(symbol).point price = mt5.symbol_info_tick(symbol).ask deviation = 20 request = { "action": mt5.TRADE_ACTION_DEAL, "symbol": symbol, "volume": lot, "type": mt5.ORDER_TYPE_BUY, "price": price, "sl": price - 100 * point, "tp": price + 100 * point, "deviation": deviation, "magic": 234000, "comment": "python script open", "type_time": mt5.ORDER_TIME_GTC, "type_filling": mt5.ORDER_FILLING_RETURN, } # enviamos a solicitação de negociação result = mt5.order_send(request) # verificamos o resultado da execução print("1. order_send(): by {} {} lots at {} with deviation={} points".format(symbol,lot,price,deviation)); if result.retcode != mt5.TRADE_RETCODE_DONE: print("2. order_send failed, retcode={}".format(result.retcode)) # solicitamos o resultado na forma de dicionário e exibimos elemento por elemento result_dict=result._asdict() for field in result_dict.keys(): print(" {}={}".format(field,result_dict[field])) #se esta for uma estrutura de uma solicitação de negociação, também a exibiremos elemento a elemento if field=="request": traderequest_dict=result_dict[field]._asdict() for tradereq_filed in traderequest_dict: print(" traderequest: {}={}".format(tradereq_filed,traderequest_dict[tradereq_filed])) print("shutdown() and quit") mt5.shutdown() quit() 1. order_send(): by WINZ21 1 lots at 106980.0 with deviation=20 points --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-5-0ba8ed629e5e> in <module> 22 # verificamos o resultado da execução 23 print("1. order_send(): by {} {} lots at {} with deviation={} points".format(symbol,lot,price,deviation)); ---> 24 if result.retcode != mt5.TRADE_RETCODE_DONE: 25 print("2. order_send failed, retcode={}".format(result.retcode)) 26 # solicitamos o resultado na forma de dicionário e exibimos elemento por elemento AttributeError: 'NoneType' object has no attribute 'retcode'
Bom a documentação é bem clara e explicativa, diz que precisamos primeiro estabelecer uma conexão para so ai conseguirmos usar as funções, no inicio eu achei que vc havia postado um trecho de código, mas, agora vejo que vc esta tentando usar esse script.
Fora a documentação como disse, recentemente escrevi algo que explica justamente isso.
Ter a lib atualizada é sempre a melhor opção.
Use !pip install --upgrade MetaTrader5 pra fazer isso.
Tente adicionar o trecho de codigo abaixo para capturar o motivo do erro e assim poder corrigi-lo, esse post(' Método mt5.order_send() não executa, sempre retornando "Nome" usando python - Geral - Fórum de negociação algorítmica MQL5 ') fala onde por certinho.
if result_sell_market is None:
print("order_send() failed, error code =",mt5.last_error())
Em seu código inicial você tinha um erro e após tentar ajustar produziu outro, mas executanto acima encontrará a raiz do problema e terá a oportunidade de corrigi-lo.
Jonathan, agradeço responder, mesmo corrigido a questão de lotes ele retorna um erro cujo não consigo identificar, é possível que tenha a ver com a corretora? já tentei resolver de diversas formas mas sem exito..
Jonathan, agradeço responder, mesmo corrigido a questão de lotes ele retorna um erro cujo não consigo identificar, é possível que tenha a ver com a corretora? já tentei resolver de diversas formas mas sem exito..
Eu estou com o mesmo problema. Eu copiei o codigo da documentação do MT5 , usei uma corretora de Forex para testar o codigo.
Ele vincula o mt5 no python, funciona pra importar dados, mas o caminho de volta não executa.
Meu Output para a documentação :
https://www.mql5.com/pt/docs/integration/python_metatrader5/mt5ordersend_py
MetaTrader5 package author: MetaQuotes Ltd.
MetaTrader5 package version: 5.0.37
1. order_send(): by USDJPY 0.1 lots at 134.847 with deviation=20 points
2. order_send failed, retcode=10030
retcode=10030
deal=0
order=0
volume=0.0
price=0.0
bid=0.0
ask=0.0
comment=Unsupported filling mode
request_id=0
retcode_external=0
request=TradeRequest(action=1, magic=234000, order=0, symbol='USDJPY', volume=0.1, price=134.847, stoplimit=0.0, sl=134.747, tp=134.947, deviation=20, type=0, type_filling=2, type_time=0, expiration=0, comment='python script open', position=0, position_by=0)
traderequest: action=1
traderequest: magic=234000
traderequest: order=0
traderequest: symbol=USDJPY
traderequest: volume=0.1
traderequest: price=134.847
traderequest: stoplimit=0.0
traderequest: sl=134.747
traderequest: tp=134.947
traderequest: deviation=20
traderequest: type=0
traderequest: type_filling=2
traderequest: type_time=0
traderequest: expiration=0
traderequest: comment=python script open
traderequest: position=0
traderequest: position_by=0
shutdown() and quit
- www.mql5.com
Jonathan, agradeço responder, mesmo corrigido a questão de lotes ele retorna um erro cujo não consigo identificar, é possível que tenha a ver com a corretora? já tentei resolver de diversas formas mas sem exito..
Altera o :
type_filling=ORDER_FILLING_IOC;
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Saudações,
Solicito ajuda para resolver este erro, não consigo enviar ordem por meio de código python, o código é retirado da própria biblioteca MT5, correta Clear corretora do grupo XP. consigo comprar e vender normalmente pela plataforma MT5 porém, com o algotrading habilitado, não consigo de modo algum enviar ordem. segue abaixo código, link e print do erro.
https://www.mql5.com/pt/docs/integration/python_metatrader5/mt5ordersend_py
symbol = 'WINZ21'
lot = 0.1
point = mt5.symbol_info(symbol).point
price = mt5.symbol_info_tick(symbol).ask
deviation = 20
request = {
"action": mt5.TRADE_ACTION_DEAL,
"symbol": symbol,
"volume": lot,
"type": mt5.ORDER_TYPE_BUY,
"price": price,
"sl": price - 100 * point,
"tp": price + 100 * point,
"deviation": deviation,
"magic": 234000,
"comment": "python script open",
"type_time": mt5.ORDER_TIME_GTC,
"type_filling": mt5.ORDER_FILLING_RETURN,
}
# enviamos a solicitação de negociação
result = mt5.order_send(request)
# verificamos o resultado da execução
print("1. order_send(): by {} {} lots at {} with deviation={} points".format(symbol,lot,price,deviation));
if result.retcode != mt5.TRADE_RETCODE_DONE:
print("2. order_send failed, retcode={}".format(result.retcode))
# solicitamos o resultado na forma de dicionário e exibimos elemento por elemento
result_dict=result._asdict()
for field in result_dict.keys():
print(" {}={}".format(field,result_dict[field]))
#se esta for uma estrutura de uma solicitação de negociação, também a exibiremos elemento a elemento
if field=="request":
traderequest_dict=result_dict[field]._asdict()
for tradereq_filed in traderequest_dict:
print(" traderequest: {}={}".format(tradereq_filed,traderequest_dict[tradereq_filed]))
print("shutdown() and quit")
mt5.shutdown()
quit()
1. order_send(): by WINZ21 1 lots at 108915.0 with deviation=20 points
----------------------------------------------------------------------------------------------
AtrributeError Traceback (most recent call last)
<ipython-input-4-296f93314b1d> in <module>
3 # verificamos o resultado da execuçãi
4 print("1. order_send(): by {} {} lots at {} with deviation={} points".formar(symbol,lot,price,deviation));
----->5 if result.retcode != mt5.TRADE_RETCODE_DONE:
6 print("2. order_send failed, retcode={}".format(result.retcode))
7 #solicitamos o resultado na forma de dicionário e exibimos elemento por elemento
AttributeErros: 'NoneType' object has no attribute 'retcode'