MetaTrader 5 Python User Group - Comment utiliser Python dans Metatrader - page 85

 
Sivoraksha-ia:
Étrange, mais une table vide arrive aussi. Il n'est pas nécessaire d'ouvrir quoi que ce soit dans le terminal lui-même comme dans Quicksilver pour que le déchargement fonctionne ?

Tout graphique avec la paire souhaitée (pour les ticks).

 
Bonjour à tous,


J'ai un problème avec la structure OrderSendResult renvoyée après une requête order_send () utilisant l'API Python. L'un des champs renvoyés est un "commentaire" qui doit contenir le commentaire du courtier sur la transaction. Cependant, ce champ renvoie le même commentaire que celui qui a été transmis à la demande, et non le retour du courtier comme il le devrait.


Pour reproduire l'erreur, procédez comme suit :

1. Créez une requête qui donne lieu à un commentaire. Remplissez la requête "commentaire" avec un commentaire fictif.

2. Envoyez la demande à l'aide de la commande order_send () de l'API Python.

3. Dans l'objet orderSendResult renvoyé, vérifiez le champ "commentaire".


Le champ "commentaire" transmettra le même commentaire, alors qu'il devrait avoir un commentaire renvoyé par le courtier, ce qui peut être vérifié dans l'onglet "Log" du terminal MT5.

Quelqu'un peut-il le confirmer ? Y a-t-il un moyen d'obtenir un commentaire de la part du courtier ?



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

Pourriez-vous ajouter une description à la documentation ?

Ajouté

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

    Je veux organiser une comptabilité commerciale virtuelle en python. J'en ai besoin pour distinguer les caractéristiques des différentes stratégies commerciales. Le courtier utilisé est Otkritie. Il n'y a pas de filet. Il existe une position commune pour l'instrument, l'arrêt et la prise de la position sont communs. J'ai décidé de faire ceci : j'ouvre un trade par n'importe quelle stratégie par marché avec n'importe quel volume, sans stop et take. A la place, j'ai mis un ordre stop et un ordre limite de la même taille. Je mémorise les ordres du tableau séparément. A chaque période de temps, je place des ordres = mt5.orders_get(symbol=symb) et j'obtiens une liste des ordres connus de tickets.ticket.tolist().

    Ensuite, je passe en revue mon tableau de transactions et je vérifie si un ticket d'ordre stop ou limite existe toujours dans la liste des ordres ouverts reçus. S'il n'y a pas de stop loss, cela signifie qu'un stop loss s'est déclenché virtuellement ; s'il n'y a pas de limite, cela signifie un take profit. Ensuite, je supprime les entrées pour cette transaction de ma table et je supprime l'ordre en attente restant pour cette transaction. Et tout fonctionne, sauf une chose : je ne sais pas comment calculer le bénéfice virtuel sur cette affaire. Dans l'image, vous pouvez voir que le stop de vente est fixé à 141430, mais en réalité il y a eu un glissement et le prix ouvert est de 141350. Je demande la requête pour une position déclenchée : deals = mt5.history_orders_get(ticket=246525084) (ce ticket a été enregistré dans le système lorsque l'ordre a été passé, comme dans l'image ci-dessus), mais dans ma réponse je ne vois aucune information sur le lieu de l'ordre, seulement des informations sur le lieu de l'ordre. L'historique montre que le stop de vente a bien été exécuté dans le ticket 15215696 et je peux demander le bon prix dans ce ticket. Mais d'abord, je dois trouver le billet du commerce. Comment faire correspondre ce ticket avec le ticket de l'ordre en attente (stop de vente) ?

     
    J'ai progressé dans ma question. En demandant l'historique des positions fermées mt5.history_deals_get, je peux trouver le ticket d'un ordre fermé et son prix d'exécution parmi les ordres. Cela fonctionne si je spécifie une plage de temps dans les paramètres. J'appelle aussi la même fonction en lui passant le ticket d'une commande - mt5. history_deals_get(ticket=TICKET) - mais la réponse (-2, 'Terminal : Invalid params'). La fonction avec ce paramètre fonctionne-t-elle au moins ?
     
    Chers développeurs, pourriez-vous commenter ma question précédente ? La fonction history_deals_get(ticket=TICKET) ne fonctionne pas. La réponse est toujours (-2, 'Terminal : Paramètres non valides'). La même fonction mais avec un paramètre différent history_deals_get(position=POSITION) fonctionne, mais j'ai besoin de trouver une transaction par ordre de ticket.
     
    Est-il possible de faire un calendrier d'actualités en api python avec accès à l'historique, pour faire des recherches ?
     
    Cher, y a-t-il quelqu'un qui fait du commerce sur le MOEX? Qui a le même problème que lorsque vous initialisez la connexion au terminal, il se reconnecte au serveur et demande un mot de passe de certificat ?
    Документация по MQL5: Интеграция / MetaTrader для Python / initialize
    Документация по MQL5: Интеграция / MetaTrader для Python / initialize
    • www.mql5.com
    initialize - MetaTrader для Python - Интеграция - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
     

    order_send et order_check renvoient None. Je ne sais pas où chercher. S'il vous plaît, dites-moi ce qui ne va pas. S'il vous plaît.

    Code

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

    Sortie

    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


    J'ai réussi à résoudre le problème. Dans la demande, les champs volume, prix, sl, tp doivent être de type flottant. Cela fonctionne comme suit

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

    Chers collègues, veuillez me conseiller :

    1. Comment puis-je extraire de mt5 les intervalles de session de trading disponibles par instrument en Python et les mettre à jour périodiquement ?

    2. Dois-je m'attendre à voir une méthode dans la bibliothèque pour demander et modifier le Trailing Stop sur les positions ouvertes?