order_send

Envia do terminal para o servidor de negociação uma solicitação para concluir uma operação de negociação. A função é semelhante a OrderSend.

order_send(
   request      // estrutura da solicitação
   );

Parâmetros

request

[in]  Estrutura do tipo MqlTradeRequest que descreve a ação de negociação requerida. Parâmetro sem nome obrigatório. Veja abaixo um exemplo de preenchimento de solicitação e a composição de enumerações.

Valor retornado

Resultado da execução como uma estrutura MqlTradeResult. O campo request na resposta contém a estrutura da solicitação de negociação transferida para order_send(). Em caso de erro, retorna None, enquanto informações sobre o erro podem ser obtidas usando last_error().

Estrutura da solicitação de negociação MqlTradeRequest

Campo

Descrição

action

Tipo de operação de negociação. O valor pode ser um dos valores da enumeração TRADE_REQUEST_ACTIONS

magic

ID do EA. Permite realizar o processamento analítico de ordens de negociação. Cada EA pode definir seu próprio identificador exclusivo ao enviar uma solicitação de negociação.

order

Bilhete da ordem. Necessário para modificar ordens pendentes

symbol

Nome do instrumento de negociação para o qual é colocada a ordem. Não é necessário para operações de modificação de ordens e fechamento de posições

volume

Volume de transação solicitado em lotes. O valor real do volume ao abrir uma transação dependerá do tipo de ordem segundo execução.

price

O preço que, ao ser atingido, executa uma ordem pendente. Para ordens a mercado de instrumentos com o tipo de execução"Market Execution" (SYMBOL_TRADE_EXECUTION_MARKET), que têm o tipo TRADE_ACTION_DEAL, não é necessária nenhuma indicação do preço

stoplimit

Preço segundo o qual será colocada a ordem pendente Limit quando o preço atingir o valor price (esta condição é obrigatória). Até este momento, a ordem pendente não é exibida no sistema de negociação.

sl

Preço segundo o qual será colocada a ordem Stop Loss quando o preço se mover numa direção desfavorável

tp

Preço segundo o qual será colocada a ordem Take Profit quando o preço se mover numa direção favorável

deviation

Desvio máximo aceitável em relação ao preço solicitado, definido em pontos

type

Tipo de ordem. O valor pode ser um dos valores da enumeração ORDER_TYPE

type_filling

Tipo de ordem segundo sua execução. O valor pode ser um dos valores da enumeração ORDER_TYPE_FILLING

type_time

Tipo de pedido segundo expiração. O valor pode ser um dos valores da enumeração ORDER_TYPE_TIME

expiration

Prazo de validade da ordem (para ordens do tipo TIME_SPECIFIED)

comment

Comentário da ordem

position

Bilhete da posição. Deve ser preenchido ao alterar e fechar a posição para a sua identificação inequívoca. Normalmente, corresponde ao bilhete de ordem, do qual, como resultado, a posição foi aberta.

position_by

Bilhete da posição oposta. Utiliza-se ao fechar uma posição usando outra oposta, se estiver aberta no mesmo instrumento, mas na direção oposta.

Observação

Uma solicitação de negociação passa por vários estágios de verificação no servidor de negociação. Primeiro, verifica-se que o preenchimento de todos os campos obrigatórios da solicitação request está correto e, se não houver erros, o servidor aceitará a ordem para continuar a processá-la. Para obter informações completas sobre a execução de operações de negociação, consulte a descrição da função OrderSend.

Exemplo:

import time
import MetaTrader5 as mt5
 
# exibimos dados sobre o pacote MetaTrader5
print("MetaTrader5 package author: "mt5.__author__)
print("MetaTrader5 package version: "mt5.__version__)
 
# estabelecemos a conexão ao MetaTrader 5
if not mt5.initialize():
    print("initialize() failed, error code =",mt5.last_error())
    quit()
 
# preparamos a estrutura de solicitação para compra
symbol = "USDJPY"
symbol_info = mt5.symbol_info(symbol)
if symbol_info is None:
    print(symbol, "not found, can not call order_check()")
    mt5.shutdown()
    quit()
 
# se o símbolo não estiver disponível no MarketWatch, adicionamo-lo
if not symbol_info.visible:
    print(symbol, "is not visible, trying to switch on")
    if not mt5.symbol_select(symbol,True):
        print("symbol_select({}}) failed, exit",symbol)
        mt5.shutdown()
        quit()
 
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()
 
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(symbol).bid
deviation=20
request={
    "action"mt5.TRADE_ACTION_DEAL,
    "symbol"symbol,
    "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(request)
# verificamos o resultado da execução
print("3. close position #{}: sell {} {} lots at {} with deviation={} points".format(position_id,symbol,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()
 
Resultado
MetaTrader5 package author:  MetaQuotes Software Corp.
MetaTrader5 package version:  5.0.29
1. order_send(): by USDJPY 0.1 lots at 108.023 with deviation=20 points
2. order_send done,  OrderSendResult(retcode=10009, deal=535084512, order=557416535, volume=0.1, price=108.023, ...
   opened position with POSITION_TICKET=557416535
   sleep 2 seconds before closing position #557416535
3. close position #557416535: sell USDJPY 0.1 lots at 108.018 with deviation=20 points
4. position #557416535 closed, OrderSendResult(retcode=10009, deal=535084631, order=557416654, volume=0.1, price=...
   retcode=10009
   deal=535084631
   order=557416654
   volume=0.1
   price=108.015
   bid=108.015
   ask=108.02
   comment=Request executed
   request_id=55
   retcode_external=0
   request=TradeRequest(action=1, magic=234000, order=0, symbol='USDJPY', volume=0.1, price=108.018, stoplimit=0.0, ...
       traderequest: action=1
       traderequest: magic=234000
       traderequest: order=0
       traderequest: symbol=USDJPY
       traderequest: volume=0.1
       traderequest: price=108.018
       traderequest: stoplimit=0.0
       traderequest: sl=0.0
       traderequest: tp=0.0
       traderequest: deviation=20
       traderequest: type=1
       traderequest: type_filling=2
       traderequest: type_time=0
       traderequest: expiration=0
       traderequest: comment=python script close
       traderequest: position=557416535
       traderequest: position_by=0

Veja também

order_check, OrderSend, Tipos de operações de negociação, Estrutura da solicitação de negociação, Estrutura dos resultados de verificação da solicitação de negociação, Estrutura do resultado da solicitação de negociação