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

 
MetaQuotes:

Une nouvelle version de la bibliothèque python 5.0.25 a été publiée.

Veuillez mettre à jour via :

Messieurs, pouvons-nous demander d'ajouter des objets comme :

TradePosition(ticket=55970661, time=1583523524, time_msc=1583523524484, time_update=1583523524, time_update_msc=1583523524484, 
type=1, magic=0, identifier=55970661, reason=0, volume=0.04, price_open=1.13022, sl=0.0, tp=0.0, price_current=1.13179, swap=0.0, 
profit=-6.28, symbol='EURUSD', comment='', external_id='55970661')

ajouter pls ou __dict__, ou as_dict()

En python, il est beaucoup plus pratique d'opérer avec des structures standard, les mêmes dict/liste.

('__add__', <method-wrapper '__add__' of TradePosition object at 0x085A1808>)
('__class__', <class 'TradePosition'>)
('__contains__', <method-wrapper '__contains__' of TradePosition object at 0x085A1808>)
....
....
....
('symbol', 'EURUSD')
('ticket', 55970661)
('time', 1583523524)
('time_msc', 1583523524484)
('time_update', 1583523524)
('time_update_msc', 1583523524484)
('tp', 0.0)
('type', 1)
('volume', 0.04)

Ce serait bien de tirer le dicton de cette classe (et d'autres similaires) et de travailler avec.

 

Question sur initialize(), il y a

initialize(
   path                      // path to the MetaTrader 5 terminal EXE file
   timeout=TIMEOUT,          // timeout
   login=LOGIN,              // account number
   password="PASSWORD",      // password
   server="SERVER"           // server name as it is specified in the terminal
   )

respectivement dans les chemins d'accès à deux terminaux qui exécutent /portable

'c:\Works\MT5 - terminals\MetaTrader 5\terminal64.exe'

и 

'c:\Works\MT5 - terminals\Alpari MT5\terminal64.exe'

mais tous les appels d'initialisation vont à la dernière instance du terminal.

respectivement MT build 2360 et MetaTrader5-5.0.26-cp38-cp38-win32.whl

Qu'est-ce qu'il y a ? devrait être utilisé avec une autre logique, ou quelque chose d'autre devrait être passé à /portable ?

 

Montrez le code actuel, s'il vous plaît.

Nous n'acceptons pas encore les paramètres dans les chemins.

 
Renat Fatkhullin:

Montrez le code actuel, s'il vous plaît.

Nous n'acceptons pas encore les paramètres dans les chemins.

Voici le code :

import MetaTrader5 as mt5

def check_order ():
    if mt5.initialize(path='c:\Works\MT5 - terminals\MetaTrader 5\terminal64.exe', 
                            login=25153683, server='MetaQuotes-Demo', password=''):
                print("mt5.version(): ", mt5.version())
                print("mt5.terminal_info()", mt5.terminal_info())
                print("mt5.account_info()", mt5.account_info())
                symbol="GBPUSD"
                if mt5.symbol_select(symbol,True):
                    info = mt5.symbol_info(symbol)
                    point=mt5.symbol_info(symbol).point
                    request = {
                        "action": mt5.TRADE_ACTION_DEAL,
                        "symbol": symbol,
                        "volume": 0.01,
                        "type": mt5.ORDER_TYPE_BUY,
                        "price": mt5.symbol_info_tick(symbol).ask,
                        "sl": mt5.symbol_info_tick(symbol).ask-100*point,
                        "tp": mt5.symbol_info_tick(symbol).ask+100*point,
                        "deviation": 10,
                        "magic": 234000,
                        "comment": "python script",
                    }
 
                    result = mt5.order_check(request)
                    print(result)
		 mt5.shutdown()


    if mt5.initialize(path='c:\Works\MT5 - terminals\Alpari MT5\terminal64.exe', 
                            login=50518455, server='Alpari-MT5-Demo', password=''):
                print("mt5.version(): ", mt5.version())
                print("mt5.terminal_info()", mt5.terminal_info())
                print("mt5.account_info()", mt5.account_info())
                symbol="GBPUSD"
                if mt5.symbol_select(symbol,True):
                    info = mt5.symbol_info(symbol)
                    point=mt5.symbol_info(symbol).point
                    request = {
                        "action": mt5.TRADE_ACTION_DEAL,
                        "symbol": symbol,
                        "volume": 0.01,
                        "type": mt5.ORDER_TYPE_BUY,
                        "price": mt5.symbol_info_tick(symbol).ask,
                        "sl": mt5.symbol_info_tick(symbol).ask-100*point,
                        "tp": mt5.symbol_info_tick(symbol).ask+100*point,
                        "deviation": 10,
                        "magic": 234000,
                        "comment": "python script",
                    }
 
                    result = mt5.order_check(request)
                    print(result)
		 mt5.shutdown()


if __name__ == "__main__":
    check_order()

Dernier terminal en fonctionnement :

"c:\Works\MT5 - terminals\ForexClub MT5\terminal64.exe" 

A en juger par la capture d'écran, l'appel est allé au dernier en cours.

J'aimerais appeler celles qui ont été consultées.

 
Renat Fatkhullin:

Nous n'acceptons pas encore les paramètres dans les pistes.

Mmm ... Je ne comprends pas bien ce point, la valeur mais pas le paramètre, c'est ici que je retire les paramètres de connexion de la configuration.

            if mt5.initialize(path=acc['path'], login=acc['login'], server=acc['server'], password=acc['pass']):
                print("mt5.version(): ", mt5.version())
                print("mt5.terminal_info()", mt5.terminal_info())
                print("mt5.account_info()", mt5.account_info())
 
Дмитрий Прокопьев:

Question sur initialize(), il y a

respectivement dans les chemins d'accès à deux terminaux qui exécutent /portable

mais tous les appels d'initialisation vont à la dernière instance du terminal.

respectivement MT build 2360 et MetaTrader5-5.0.26-cp38-cp38-win32.whl

Qu'est-ce qu'il y a ? devrait être utilisé avec une autre logique, ou quelque chose d'autre devrait être passé à /portable ?

Voulez-vous que 2 terminaux dans un même script fonctionnent simultanément ? Ce n'est pas possible, le prochain appel d'initialisation rompra la connexion avec le premier terminal, pour cela vous devez entrer l'entité de connexion pour distinguer les différents terminaux. Il ne fonctionne qu'avec une seule connexion en cours.

initialize a un paramètre supplémentaire (pas encore documenté)mt5.initialize(blabla, portable=True) pourdémarrer le terminal en mode portable.

 
Almaz:

Voulez-vous faire fonctionner 2 terminaux simultanément dans un seul script ? Ce n'est pas possible, le prochain appel d'initialisation rompra la connexion avec le premier terminal, vous devez entrer une entité de connexion pour distinguer les différents terminaux. Il ne fonctionne qu'avec une seule connexion en cours.

initialize a un paramètre supplémentaire (pas encore documenté)mt5.initialize(blabla, portable=True) pour démarrer le terminal en mode portable.

Oui, vous devez travailler avec plusieurs terminaux fonctionnant en modeportable . Vous ne pouvez pas initialiser la connexion avec deux terminaux différents en même temps. Pas de questions ici.

J'ai essayé d'adresser les terminaux un par un :

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

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

dans ce schéma, ça ne marche pas. Dans tous les cas, il se bloque sur le dernier terminal lancé manuellement dans le système. Même s'il a été lancé à partir de

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

Il y a une question ici.

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

Groupe d'utilisateurs Python de MetaTrader 5 - Résumé

nikoli shen, 2020.03.07 15:46

Il y a un problème avec le téléchargement du paquet MetaTrader 5 en utilisant la version pip qui vient avec python. Une solution de contournement consiste à mettre à jour le pip. Commande pour mettre à jour pip dans Windows :
python -m pip install -U pip

ou in venv, en utilisant

(inside virtualenv):easy_install -U pip

 
Almaz:

Voulez-vous faire fonctionner 2 terminaux simultanément dans un seul script ? Ce n'est pas possible, le prochain appel d'initialisation rompra la connexion avec le premier terminal, vous devez entrer une entité de connexion pour distinguer les différents terminaux. Il ne fonctionne qu'avec une seule connexion en cours.

initialize a un paramètre supplémentaire (pas encore documenté)mt5.initialize(blabla, portable=True) pour démarrer le terminal en mode portable.

Notez que mt5.terminal_info() affiche

mt5.version():  [500, 2360, '06 Mar 2020']
mt5.terminal_info() TerminalInfo(community_account=False, community_connection=False, connected=True, dlls_allowed=False, trade_allowed=True, 
tradeapi_disabled=False, email_enabled=False, ftp_enabled=False, notifications_enabled=False, mqid=False, build=2360, maxbars=100000000, codepage=0, ping_last=42381,
community_balance=0.0, retransmission=7.976601967561818, company='MetaQuotes Software Corp.', name='MetaTrader 5', language='English', 
path='C:\\Works\\MT5 - terminals\\MetaTrader 5', data_path='C:\\Works\\MT5 - terminals\\MetaTrader 5', commondata_path='C:\\Users\\rip\\AppData\\Roaming\\MetaQuotes\\Terminal\\Common')
mt5.version():  [500, 2360, '06 Mar 2020']
mt5.terminal_info() TerminalInfo(community_account=False, community_connection=False, connected=True, dlls_allowed=False, trade_allowed=True, 
tradeapi_disabled=False, email_enabled=False, ftp_enabled=False, notifications_enabled=False, mqid=False, build=2360, maxbars=100000000, codepage=0, ping_last=40849,
community_balance=0.0, retransmission=7.976601967561818, company='MetaQuotes Software Corp.', name='MetaTrader 5', language='English', 
path='C:\\Works\\MT5 - terminals\\MetaTrader 5', data_path='C:\\Works\\MT5 - terminals\\MetaTrader 5', commondata_path='C:\\Users\\rip\\AppData\\Roaming\\MetaQuotes\\Terminal\\Common')

valuepath='C:\\Works\\\\\MT5 - terminals\\\\\N- Trader 5', data_path='C:\Works\\\\MT5 - terminals\N- Trader 5',commondata_path='C:\Users\\\\NAppData\N\N- Toaming\N-Quotes\N- Terminal\N-Common'.

sont identiques. C'est censé être comme ça ?

Le code est ci-dessous :

import MetaTrader5 as mt5

def check_order ():
    if mt5.initialize(path='c:\\Works\\MT5 - terminals\\MetaTrader 5\\terminal64.exe', 
                            login=25153683, server='MetaQuotes-Demo', password='',  portable=True):
        print("mt5.version(): ", mt5.version())
        print("mt5.terminal_info()", mt5.terminal_info())
        mt5.shutdown()

    if mt5.initialize(path='c:\\Works\\MT5 - terminals\\Alpari MT5\\terminal64.exe', 
                            login=50518455, server='Alpari-MT5-Demo', password='',  portable=True):
        print("mt5.version(): ", mt5.version())
        print("mt5.terminal_info()", mt5.terminal_info())
        mt5.shutdown()

if __name__ == "__main__":
    check_order()
 
Almaz:

Voulez-vous faire fonctionner 2 terminaux simultanément dans un seul script ? Ce n'est pas possible, le prochain appel d'initialisation rompra la connexion avec le premier terminal, vous devez entrer une entité de connexion pour distinguer les différents terminaux. Il ne fonctionne qu'avec une seule connexion en cours.


La création d'une entité (connexion) est-elle possible en principe ? Je ne pense pas que ce soit nécessaire, mais pour 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 ?