MetaTrader 5 Python User Group - como usar o Python no Metatrader - página 85

 
Sivoraksha-ia:
Estranho, mas também chega uma mesa vazia. Não há necessidade de abrir nada no próprio terminal como no Quicksilver para fazer o trabalho de descarga?

Qualquer gráfico com o par desejado (para carraças).

 
Olá a todos,


Tenho um problema com a estrutura OrderSendResult devolvido após um pedido de Order_send () utilizando a API Python. Um dos campos devolvidos é um "comentário" que deve conter o comentário do corretor sobre a transacção. No entanto, este campo devolve o mesmo comentário que foi passado ao pedido, não o corretor retorna como deveria.


Para reproduzir o erro, faça o seguinte:

1. Criar uma consulta que resulte num comentário. Preencher a consulta "comentário" com um comentário fictício.

2. Enviar o pedido utilizando o comando order_send () da API Python.

3. No campo "comentário" do objecto devolvidoSendResult, verifique o campo "comentário".


O campo "comentário" passará o mesmo comentário, enquanto que deve ter um comentário devolvido pelo corretor, que pode ser verificado no separador "Log" do Terminal MT5.

Alguém pode confirmar isto? Há alguma forma de obter um comentário do corretor?



Документация по MQL5: Торговые функции / OrderSend
Документация по MQL5: Торговые функции / OrderSend
  • www.mql5.com
OrderSend - Торговые функции - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Vladimir Perervenko:

Poderia acrescentar uma descrição à Documentação?

Adicionado

  • market_book_add
  • market_book_get
  • market_book_release
  • Документация по MQL5: Интеграция / MetaTrader для Python / market_book_add
    Документация по MQL5: Интеграция / MetaTrader для Python / market_book_add
    • www.mql5.com
    market_book_add - MetaTrader для Python - Интеграция - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
     

    Quero organizar uma contabilidade comercial virtual em python. Preciso dele para distinguir as características das diferentes estratégias comerciais. O corretor utilizado é a Otkritie. Não há rede. Há uma posição comum para o instrumento, Stop and Take da posição é comum. Decidi fazer isto: abro um comércio por qualquer estratégia por mercado com qualquer volume, sem parar e tomar. Em vez disso, pus uma ordem de paragem e limite com o mesmo tamanho. Memorizo as ordens na tabela separadamente. Cada certo período de tempo, faço encomendas = mt5.order_get(symbol=symb) e recebo uma lista de encomendas de bilhetes conhecidos.ticket.tolist().

    Depois passo pela minha mesa de negociação e verifico se ainda existe um bilhete de encomenda de paragem ou limite na lista de encomendas em aberto recebidas. Se não há stop loss, significa que um stop loss desencadeou virtualmente; se não há limite, significa um take profit. Depois apago as entradas para esta troca da minha mesa e apago a restante ordem pendente para esta troca. E tudo funciona excepto um - não sei como calcular o lucro virtual sobre este negócio. Na imagem pode ver-se que a paragem de venda está fixada em 141430, mas na realidade houve um deslize e o preço aberto é 141350. Solicito o pedido para uma posição accionada: deals = mt5.history_orders_get(ticket=246525084) (este ticket foi memorizado pelo sistema na colocação), mas na resposta não vejo nenhuma informação sobre o local da encomenda, apenas informação sobre a sua colocação. A história mostra que a paragem de venda foi realmente executada no bilhete 15215696 e eu posso pedir o preço certo neste bilhete. Mas primeiro preciso de encontrar o bilhete do ofício. Como faço para combinar este bilhete com o bilhete de encomenda pendente (paragem de venda)?

     
    Progredi com a minha pergunta. Ao solicitar o histórico das posições fechadas mt5.history_deals_get, posso encontrar o bilhete de uma ordem fechada e o seu preço de execução entre as ordens. Isto funciona se eu especificar um intervalo de tempo nos parâmetros. Também chamo à mesma função passar-lhe o ticket de uma ordem - mt5. history_deals_get(ticket=TICKET) - mas a resposta (-2, 'Terminal: Parâmetros inválidos'). Será que a função com este parâmetro funciona mesmo?
     
    Caros programadores, podem fazer o favor de comentar a minha pergunta anterior? A função history_deals_get(ticket=TICKET) não funciona. A resposta é sempre (-2, 'Terminal: Parâmetros inválidos'). A mesma função mas com um parâmetro diferente history_deals_get(position=POSITION) funciona, mas preciso de encontrar uma troca por encomenda de bilhetes.
     
    É possível fazer um calendário de notícias python api com acesso à história, para fazer investigação?
     
    Caro, há alguém que negoceie no MOEX? Quem tem o mesmo problema que quando se inicia a ligação ao terminal, este volta a ligar-se ao servidor e pede uma palavra-passe de certificado?
    Документация по MQL5: Интеграция / MetaTrader для Python / initialize
    Документация по MQL5: Интеграция / MetaTrader для Python / initialize
    • www.mql5.com
    initialize - MetaTrader для Python - Интеграция - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
     

    order_send e order_check return Nenhum. Não percebo onde procurar. Por favor, diga-me o que está errado. Por favor.

    Código

    import MetaTrader5 as mt
    
    if not mt.initialize(login=12345):#
        print("initialize() failed")
        mt.shutdown()
    
    terminal_info=mt.terminal_info()
    if terminal_info!=None:
        print(f"terminal {'''connected''' if terminal_info.connected else '''disconnected'''}")
    print("version: ",mt.version())
    
    info = mt.symbol_info("Si-6.21")
    print(f"Si-6.21  {info.bid=}  {info.ask=}")
    
    request = {
        "action": mt.TRADE_ACTION_PENDING,
        "symbol": "Si-6.21",
        "volume": 1,
        "type": mt.ORDER_TYPE_BUY_LIMIT,
        "price": 77300,
        "sl": 0,
        "tp": 0,
        "deviation": 0,
        "magic": 123,
        "comment": "test",
        "type_time": mt.ORDER_TIME_DAY,
        "type_filling": mt.ORDER_FILLING_RETURN,
    }
    
    check = mt.order_check(request)
    print("order check: ",check)
    
    ret = mt.order_send(request)
    print("order send: ", ret)
    if not ret is None:
        print(f" retcode:{ret.retcode}")
    

    Saída

    terminal connected
    version:  (500, 2875, '02 Apr 2021')
    Si-6.21  info.bid=77770.0  info.ask=77773.0
    order check:  None
    order send:  None
    
    Process finished with exit code 0


    Consegui resolver o problema. Nos campos de volume,preço,sl,tp de pedido devem ter tipo flutuante. Funciona desta forma

    request = {
        "action": mt.TRADE_ACTION_PENDING,
        "symbol": "Si-6.21",
        "volume": 1.,
        "type": mt.ORDER_TYPE_BUY_LIMIT,
        "price": 77300.,
        "sl": 0.,
        "tp": 0.,
        "deviation": 0,
        "magic": 123,
        "comment": "test",
        "type_time": mt.ORDER_TIME_DAY,
        "type_filling": mt.ORDER_FILLING_RETURN,
    }
     

    Colegas, por favor aconselhem:

    1. Como posso retirar os intervalos de sessões de negociação disponíveis por instrumento do mt5 em Python e actualizá-los periodicamente?

    2. espero ver um método na biblioteca para solicitar e alterar a Trailing Stop nas posições abertas?

    Razão: