Não consigo setar um ativo no python

Fabian Braga  

Estou tentando pegar um ativo para fazer a operação em uma conta da exclusive market mas não funciona o interessante e que quando uso o mt5 da rotina MQL5 a rotina funciona segue o código:


import MetaTrader5 as mt5 import time import uteis as ut # estabelecemos a conexão ao MetaTrader 5 usuario,serv_Mt, senha = 5106709, 'ExclusiveMarkets-Live', 'Fab197200' #if not mt5.initialize(login=usuario,server=serv_Mt,password=senha): if not mt5.initialize(): print("A inicialização falhou, código de erro =", mt5.last_error()) quit() # preparamos a estrutura de solicitação para compra par = "USDJPY" par_info = mt5.symbol_info(par) if par_info is None: print(par, "não encontrado, não foi possível abrir a ordem") mt5.shutdown() quit() # se o símbolo não estiver disponível no MarketWatch, adicionamo-lo if not par_info.visible: if not mt5.symbol_select(par, True): print("symbol_select({}}) Falhou, encerrando", par) mt5.shutdown() quit() lot = 0.01 point = mt5.symbol_info(par).point price = mt5.symbol_info_tick(par).ask deviation = 2 request = { "action": mt5.TRADE_ACTION_DEAL, "symbol": par, "volume": lot, "type": mt5.ORDER_TYPE_BUY, "price": price, # "sl": price - 1000 * point, # "tp": price + 1000 * point, "deviation": deviation, "magic": 100000, "comment": "Robô teste entrada", "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. ordem enviada: de {} {} lots at {} with deviation={} pontos".format(par, 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() print("2. order_send done, ", result) print(" opened position with POSITION_TICKET={}".format(result.order)) print(" sleep 2 seconds before closing position #{}".format(result.order)) time.sleep(2) # criamos uma solicitação de fechamento position_id = result.order price = mt5.symbol_info_tick(par).bid deviation = 20 requisicao = { "action": mt5.TRADE_ACTION_DEAL, "symbol": par, "volume": lot, "type": mt5.ORDER_TYPE_SELL, "position": position_id, "price": price, "deviation": deviation, "magic": 234000, "comment": "python script close", "type_time": mt5.ORDER_TIME_GTC, "type_filling": mt5.ORDER_FILLING_RETURN, } # enviamos a solicitação de negociação result = mt5.order_send(requisicao) # verificamos o resultado da execução print("3. close position #{}: sell {} {} lots at {} with deviation={} points".format(position_id, par, lot, price, deviation)); if result.retcode != mt5.TRADE_RETCODE_DONE: print("4. order_send failed, retcode={}".format(result.retcode)) print(" result", result) else: print("4. position #{} closed, {}".format(position_id, result)) # 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])) # concluímos a conexão ao terminal MetaTrader 5 mt5.shutdown()

Alexandre Borela  
Fabian Braga:

Estou tentando pegar um ativo para fazer a operação em uma conta da exclusive market mas não funciona o interessante e que quando uso o mt5 da rotina MQL5 a rotina funciona segue o código:


import MetaTrader5 as mt5 import time import uteis as ut # estabelecemos a conexão ao MetaTrader 5 usuario,serv_Mt, senha = 5106709, 'ExclusiveMarkets-Live', 'Fab197200' #if not mt5.initialize(login=usuario,server=serv_Mt,password=senha): if not mt5.initialize(): print("A inicialização falhou, código de erro =", mt5.last_error()) quit() # preparamos a estrutura de solicitação para compra par = "USDJPY" par_info = mt5.symbol_info(par) if par_info is None: print(par, "não encontrado, não foi possível abrir a ordem") mt5.shutdown() quit() # se o símbolo não estiver disponível no MarketWatch, adicionamo-lo if not par_info.visible: if not mt5.symbol_select(par, True): print("symbol_select({}}) Falhou, encerrando", par) mt5.shutdown() quit() lot = 0.01 point = mt5.symbol_info(par).point price = mt5.symbol_info_tick(par).ask deviation = 2 request = { "action": mt5.TRADE_ACTION_DEAL, "symbol": par, "volume": lot, "type": mt5.ORDER_TYPE_BUY, "price": price, # "sl": price - 1000 * point, # "tp": price + 1000 * point, "deviation": deviation, "magic": 100000, "comment": "Robô teste entrada", "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. ordem enviada: de {} {} lots at {} with deviation={} pontos".format(par, 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() print("2. order_send done, ", result) print(" opened position with POSITION_TICKET={}".format(result.order)) print(" sleep 2 seconds before closing position #{}".format(result.order)) time.sleep(2) # criamos uma solicitação de fechamento position_id = result.order price = mt5.symbol_info_tick(par).bid deviation = 20 requisicao = { "action": mt5.TRADE_ACTION_DEAL, "symbol": par, "volume": lot, "type": mt5.ORDER_TYPE_SELL, "position": position_id, "price": price, "deviation": deviation, "magic": 234000, "comment": "python script close", "type_time": mt5.ORDER_TIME_GTC, "type_filling": mt5.ORDER_FILLING_RETURN, } # enviamos a solicitação de negociação result = mt5.order_send(requisicao) # verificamos o resultado da execução print("3. close position #{}: sell {} {} lots at {} with deviation={} points".format(position_id, par, lot, price, deviation)); if result.retcode != mt5.TRADE_RETCODE_DONE: print("4. order_send failed, retcode={}".format(result.retcode)) print(" result", result) else: print("4. position #{} closed, {}".format(position_id, result)) # 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])) # concluímos a conexão ao terminal MetaTrader 5 mt5.shutdown()

Formata o código man, tem um botão pra isso:

Ricardo Rodrigues Lucca  
Fabian Braga:

Estou tentando pegar um ativo para fazer a operação em uma conta da exclusive market mas não funciona o interessante e que quando uso o mt5 da rotina MQL5 a rotina funciona segue o código:


import MetaTrader5 as mt5 import time import uteis as ut # estabelecemos a conexão ao MetaTrader 5 usuario,serv_Mt, senha = 5106709, 'ExclusiveMarkets-Live', 'Fab197200' #if not mt5.initialize(login=usuario,server=serv_Mt,password=senha): if not mt5.initialize(): print("A inicialização falhou, código de erro =", mt5.last_error()) quit() # preparamos a estrutura de solicitação para compra par = "USDJPY" par_info = mt5.symbol_info(par) if par_info is None: print(par, "não encontrado, não foi possível abrir a ordem") mt5.shutdown() quit() # se o símbolo não estiver disponível no MarketWatch, adicionamo-lo if not par_info.visible: if not mt5.symbol_select(par, True): print("symbol_select({}}) Falhou, encerrando", par) mt5.shutdown() quit() lot = 0.01 point = mt5.symbol_info(par).point price = mt5.symbol_info_tick(par).ask deviation = 2 request = { "action": mt5.TRADE_ACTION_DEAL, "symbol": par, "volume": lot, "type": mt5.ORDER_TYPE_BUY, "price": price, # "sl": price - 1000 * point, # "tp": price + 1000 * point, "deviation": deviation, "magic": 100000, "comment": "Robô teste entrada", "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. ordem enviada: de {} {} lots at {} with deviation={} pontos".format(par, 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() print("2. order_send done, ", result) print(" opened position with POSITION_TICKET={}".format(result.order)) print(" sleep 2 seconds before closing position #{}".format(result.order)) time.sleep(2) # criamos uma solicitação de fechamento position_id = result.order price = mt5.symbol_info_tick(par).bid deviation = 20 requisicao = { "action": mt5.TRADE_ACTION_DEAL, "symbol": par, "volume": lot, "type": mt5.ORDER_TYPE_SELL, "position": position_id, "price": price, "deviation": deviation, "magic": 234000, "comment": "python script close", "type_time": mt5.ORDER_TIME_GTC, "type_filling": mt5.ORDER_FILLING_RETURN, } # enviamos a solicitação de negociação result = mt5.order_send(requisicao) # verificamos o resultado da execução print("3. close position #{}: sell {} {} lots at {} with deviation={} points".format(position_id, par, lot, price, deviation)); if result.retcode != mt5.TRADE_RETCODE_DONE: print("4. order_send failed, retcode={}".format(result.retcode)) print(" result", result) else: print("4. position #{} closed, {}".format(position_id, result)) # 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])) # concluímos a conexão ao terminal MetaTrader 5 mt5.shutdown()

Tenta explicar que mensagem de erro da que tu nao consegue entender, tambem fazendo um CTRL+F aqui nao vi chamada a nenhuma a GetLastError() que tambem existe na interface do python para devolver um codigo de erro para direcionamento...
Razão: