MetaTrader 5 Python User Group - Come usare Python in Metatrader - pagina 85

 
Sivoraksha-ia:
Strano, ma arriva anche un tavolo vuoto. Non c'è bisogno di aprire qualcosa nel terminale stesso come in Quicksilver per far funzionare lo scarico?

Qualsiasi grafico con la coppia desiderata (per i tick).

 
Ciao a tutti,


Ho un problema con la struttura OrderSendResult restituita dopo una richiesta order_send () usando l'API Python. Uno dei campi restituiti è un "comment" che dovrebbe contenere il commento del broker sulla transazione. Tuttavia, questo campo restituisce lo stesso commento che è stato passato alla richiesta, non il ritorno del broker come dovrebbe.


Per riprodurre l'errore, fate come segue:

1. Creare una query che abbia come risultato un commento. Riempire la query "comment" con un commento fittizio.

2. Invia la richiesta usando il comando order_send () dall'API Python.

3. Nell'oggetto orderSendResult restituito, controlla il campo "comment".


Il campo "comment" passerà lo stesso commento, mentre dovrebbe avere un commento restituito dal broker, che può essere controllato nella scheda "Log" del terminale MT5.

Qualcuno può confermarlo? C'è un modo per ottenere un commento dal broker?



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

Potresti aggiungere una descrizione alla documentazione?

Aggiunto

  • aggiungi libro di mercato
  • ottenere un libro di mercato
  • uscita del libro sul mercato
  • Документация по MQL5: Интеграция / MetaTrader для Python / market_book_add
    Документация по MQL5: Интеграция / MetaTrader для Python / market_book_add
    • www.mql5.com
    market_book_add - MetaTrader для Python - Интеграция - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
     

    Voglio organizzare una contabilità commerciale virtuale in python. Ne ho bisogno per distinguere le caratteristiche delle diverse strategie di trading. Il broker utilizzato è Otkritie. Non c'è nessuna rete. C'è una posizione comune per lo strumento, Stop e Take della posizione è comune. Ho deciso di fare questo: apro un trade con qualsiasi strategia a mercato con qualsiasi volume, senza stop and take. Invece, ho messo uno stop e un ordine limite della stessa dimensione. Memorizzo gli ordini nella tabella separatamente. Ogni certo periodo di tempo, metto ordini = mt5.orders_get(symbol=symb) e ottengo una lista di ordini di biglietti conosciuti.ticket.tolist().

    Poi vado attraverso la mia tabella di trading e controllo se un ticket di ordine stop o limit esiste ancora nella lista degli ordini aperti ricevuti. Se non c'è uno stop loss, significa che uno stop loss è scattato virtualmente; se non c'è un limite, significa un take profit. Poi cancello le voci per questo trade dalla mia tabella e cancello l'ordine pendente rimanente per questo trade. E tutto funziona tranne uno: non so come calcolare il profitto virtuale su questo affare. Nell'immagine puoi vedere che il sell stop è impostato a 141430, ma in realtà c'è stato uno slittamento e il prezzo aperto è 141350. Richiedo la richiesta di una posizione attivata: deals = mt5.history_orders_get(ticket=246525084) (questo ticket è stato salvato nel sistema quando l'ordine è stato piazzato, come nell'immagine sopra), ma nella mia risposta non vedo informazioni sul luogo dell'ordine, solo informazioni sul luogo dell'ordine. La cronologia mostra che il sell stop è stato realmente eseguito nel ticket 15215696 e posso chiedere il prezzo giusto in questo ticket. Ma prima devo trovare il biglietto dello scambio. Come posso abbinare questo biglietto con il biglietto dell'ordine pendente (sell stop)?

     
    Ho fatto progressi con la mia domanda. Richiedendo la storia delle posizioni chiuse mt5.history_deals_get, posso trovare il ticket di un ordine chiuso e il suo prezzo di esecuzione tra gli ordini. Questo funziona se specifico un intervallo di tempo nei parametri. Chiamo anche la stessa funzione passandole il ticket di un ordine - mt5. history_deals_get(ticket=TICKET) - ma la risposta (-2, 'Terminal: Invalid params'). La funzione con questo parametro funziona?
     
    Cari sviluppatori, potreste commentare la mia domanda precedente? La funzione history_deals_get(ticket=TICKET) non funziona. La risposta è sempre (-2, 'Terminal: Invalid params'). La stessa funzione ma con un parametro diverso history_deals_get(position=POSITION) funziona, ma ho bisogno di trovare un trade per ordine di ticket.
     
    È possibile fare un calendario di notizie in python api con accesso alla storia, per fare ricerche?
     
    Caro, c'è qualcuno che commercia su MOEX? Chi ha lo stesso problema che quando si inizializza la connessione al terminale, si ricollega al server e chiede la password del certificato?
    Документация по MQL5: Интеграция / MetaTrader для Python / initialize
    Документация по MQL5: Интеграция / MetaTrader для Python / initialize
    • www.mql5.com
    initialize - MetaTrader для Python - Интеграция - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
     

    order_send e order_check restituiscono None. Non capisco dove guardare. Per favore, ditemi cosa c'è che non va. Per favore.

    Codice

    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}")
    

    Uscita

    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


    Sono riuscito a risolvere il problema. Nella richiesta i campi volume, prezzo, sl, tp dovrebbero avere il tipo float. Funziona così

    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,
    }
     

    Colleghi, per favore consigliatevi:

    1. Come posso estrarre gli intervalli di sessione di trading disponibili per strumento da mt5 in Python e aggiornarli periodicamente?

    2. mi aspetto di vedere un metodo nella libreria per richiedere e cambiare il Trailing Stop sulle posizioni aperte?