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

 
Vladimir Perervenko:

La création d'une entité (connexion) est-elle possible en principe ? Je ne pense pas que ce soit nécessaire, mais pour une référence future.

Lors de l'installation d'un autre script (Py) sur le graphique, le premier est réinitialisé. Est-ce que c'est comme ça que ça doit être ?

Je ne pense pas qu'il serait difficile de créer une autre entité, ce serait juste un autre niveau d'abstraction pour la bibliothèque.

Ceci n'est plus considéré comme l'utilisation de la librairie depuis le terminal, mais comme une passerelle à part entière vers les terminaux du côté de python.

Il est préférable de mettre plus d'utilité dans la librairie elle-même :) maintenant.

 
Дмитрий Прокопьев:

Je ne pense pas qu'il serait difficile de créer une autre entité, ce serait juste un autre niveau d'abstraction pour la bibliothèque.

Ceci n'est plus considéré comme l'utilisation de la librairie depuis le terminal, mais comme une passerelle à part entière vers les terminaux du côté de python.

Il est préférable de mettre plus d'utilité dans la librairie elle-même :) maintenant.

Le démarrage de mon terminal échoue régulièrement, je n'en ai pas trouvé la raison. Je dois avoir un bug quelque part avec l'installation de python... Je vais utiliser lib comme passerelle vers le terminal (via les services). Je le mettrai à l'épreuve lundi.

 
Дмитрий Прокопьев:

mt5.initialize(blabla, portable=True)- n'a pas aidé beaucoup, il demande toujours le dernier terminal démarré dans le système.

Essayer sans paramètre nommé path, passer path comme premier paramètre non nommé :

if mt5.initialize('/works/MT5-1', login=11111, ...):
        ...   
        mt5.shutdown()
else:
   print('error')

if mt5.initialize('/works/MT5-2', login=2222, ...):
        ...   
        mt5.shutdown()
else:
   print('error')
 
Almaz:

essayer sans paramètre nommé path, passer path comme premier paramètre non nommé :

Cela a fonctionné correctement. Merci.

Bug ?

 
Дмитрий Прокопьев:

Tout a fonctionné correctement. Merci. (gloussements)

Un bug ?

Pas un bug.

Le premier paramètre n'est pas nommé et est fixe. Mais juste au cas où, il sera nommé dans la prochaine version.

 
Renat Fatkhullin:

Pas un bug.

Le premier paramètre est sans nom et fixe. Mais juste au cas où, il sera nommé dans la prochaine version.

Aha, donc je n'ai pas compris la documentation spécifiquement.

Merci.

 
Il faut vraiment quelque chose pour faire sortir le "début d'un nouveau bar" du terminal. Les indicateurs ne sont pas si importants. Il s'avère que Python dispose également d'une bibliothèque pour le calcul des indicateurs.
 

Question. Il existe une fonction positions_get. La documentation décrit trois modes de fonctionnement.

positions_get

Obtient les positions ouvertes avec filtrage par symbole ou ticket. Il peut être appelé de 3 façons différentes.


Appelé sans paramètres. Renvoie les positions ouvertes pour tous les symboles.

positions_get()

Appel en spécifiant un symbole, pour lequel il veut obtenir des positions ouvertes.

positions_get(

symbol="SYMBOL" // nom du symbole

)

Appel spécifiant le ticket de la position.

positions_get(

ticket=TICKET // ticket

)

Paramètres

symbol="SYMBOL" [in] Le nom du symbole. Paramètre nommé facultatif. Si un symbole est spécifié, le paramètre ticket est ignoré.

ticket=TICKET [in] La position du ticket (POSITION_TICKET). Paramètre nommé facultatif.


Variante positions_get() - pas de questions, fonctionne bien.

Mais les deux autres ne renvoient rien.

	 pos_info = mt5.positions_get(symbol = "GBPUSD")	
	 print(mt5.last_error())

La deuxième variante de rappel :

        result = mt5.order_send(request)        
        if result.retcode == 0 or result.retcode == 10009:      
                pos_info = mt5.positions_get(ticket = result.order)
                print("mt5.last_error(): %s" % (mt5.last_error()))

last_error renvoie également une construction étrange :

2020-03-09 22:25:41 [DEBUG][module: processing.py] add_position: Possition open - OK! MqlTradeResult: {
    "retcode": 10009,
    "deal": 134756209,
    "order": 161108536,
    "volume": 0.01,
    "price": 1.31089,
    "bid": 1.31066,
    "ask": 1.31089,
    "comment": "Request executed",
    "request_id": 98,
    "retcode_external": 0
}
mt5.last_error(): [1, '']

Où chercher ? Qu'est-ce qui ne va pas ?

 
Дмитрий Прокопьев:

Un appel avec un ticket de position.

positions_get(

ticket=TICKET //ticket

)

Paramètres

symbol="SYMBOL" [in] Le nom du symbole. Paramètre nommé facultatif. Si un symbole est spécifié, le paramètre ticket est ignoré.

ticket=TICKET [in] Le ticket de position (POSITION_TICKET). Paramètre nommé facultatif.


Variante positions_get() - pas de questions, fonctionne bien.

Mais les deux autres ne renvoient rien.

La deuxième variante d'appel :

last_error renvoie également une construction étrange :

2020-03-09 22:25:41 [DEBUG][module: processing.py] add_position: Possition open - OK! MqlTradeResult: {
    "retcode": 10009,
    "deal": 134756209,
    "order": 161108536,
    "volume": 0.01,
    "price": 1.31089,
    "bid": 1.31066,
    "ask": 1.31089,
    "comment": "Request executed",
    "request_id": 98,
    "retcode_external": 0
}
mt5.last_error(): [1, '']

Que faut-il rechercher ? Qu'est-ce qui ne va pas ?

Vérifiez si votre type de compte est un compte de compensation ou de couverture. Pour la compensation, le ticket d'une position déjà existante ne changera pas et il est inutile de rechercher une position après un rechargement en utilisant le numéro d'ordre.

 

last_error тоже возвращает странную конструкцию:

code d'erreur 1, c'est un succès mt5.RES_S_OK, le prochain build écrira [1, 'Success']. Les codes avec des valeurs négatives sont des erreurs mt5.RES_E_xxx.