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

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

Les constantes ont-elles aussi changé ?

En sortie :

oui les constantes ont le préfixe MT5_ enlevé, voici un exemple d'utilisation :

from datetime import datetime
import MetaTrader5 as mt5

mt5.initialize()
mt5.wait()

print(mt5.terminal_info())
print(mt5.version())

ticks1 = mt5.copy_ticks_from("EURAUD", datetime(2020,1,28,13), 10000, mt5.COPY_TICKS_ALL)
ticks2 = mt5.copy_ticks_range("AUDUSD", datetime(2020,1,27,13), datetime(2020,1,28,13,1), mt5.COPY_TICKS_ALL)

rates1 = mt5.copy_rates_from("EURUSD", mt5.TIMEFRAME_M1, datetime(2020,1,28,13), 1000)
rates2 = mt5.copy_rates_from_pos("EURGBP", mt5.TIMEFRAME_M1, 0, 1000)
rates3 = mt5.copy_rates_range("EURCAD", mt5.TIMEFRAME_M1, datetime(2020,1,27,13), datetime(2020,1,28,13))

mt5.shutdown()

print('ticks1(', len(ticks1), ')')
print('ticks2(', len(ticks2), ')')
print('rates1(', len(rates1), ')')
print('rates2(', len(rates2), ')')
print('rates3(', len(rates3), ')')

import matplotlib.pyplot as plt

plt.plot(rates2['time'], rates2['low'], 'g-')
plt.plot(rates2['time'], rates2['high'], 'r-')

plt.show()

Exemple plus complexe - Conseiller expert avec trading sur deux moyennes mobiles sans utiliser l'historique :

import MetaTrader5 as mt5
import time

mt5.initialize()
mt5.wait()

info = mt5.terminal_info()
if info.trade_allowed == False:
    print("Auto-trading disabled in Terminal, enable it")
    quit()

symbol = "EURUSD" #  currency
lot = 0.01;       #  buy lot
interval = 5      #  price requesting interval in sec
long_len = 11     # long moving average length
short_len = 7     # short moving average length
long_ma = []      # long ma list
short_ma = []     # short ma list
ticket = 0        #  ticket for sell

mt5.symbol_select(symbol)

#  wait some time
time.sleep(1)

print("\nPreparing...")
for i in range(long_len):
    p = mt5.symbol_info_tick(symbol)
    print(p.bid,'/',p.ask)
    avg = (p.ask + p.bid) / 2

    long_ma.append(avg)
    if i >= long_len - short_len:
        short_ma.append(avg)
    time.sleep(interval)

print("\nWorking...")
while True:
    p = mt5.symbol_info_tick(symbol)
    print(p.bid,'/',p.ask)
    avg = (p.ask + p.bid) / 2
    
    # short values
    prev_short = sum(short_ma) / short_len
    short_ma.pop(0)
    short_ma.append(avg)
    short = sum(short_ma) / short_len
    
    # long values
    prev_long = sum(long_ma) / long_len
    long_ma.pop(0)
    long_ma.append(avg)
    long = sum(long_ma) / long_len

    #  buy signal
    if prev_short < prev_long and short > long:
        print("BUY: ([-1]:",prev_short,"/",prev_long,", [0]:",short,"/",long,")")
        r = mt5.Buy(symbol, lot)
        if r.retcode != mt5.TRADE_RETCODE_DONE:
            print("Buy failed: ", r)
        else:
            ticket = r.order
    elif prev_short > prev_long and short < long and ticket>0:
        print("CLOSE: ([-1]:",prev_short,"/",prev_long,", [0]:",short,"/",long,")")
        r = mt5.Sell(symbol, lot, ticket=ticket)
        if r.retcode != mt5.TRADE_RETCODE_DONE:
            print("Sell failed: ", r)
        else:
            ticket = 0
           
    time.sleep(interval)

mt5.shutdown()
 
Almaz:

Oui, le préfixe MT5_ a été supprimé des constantes, voici un exemple de son utilisation :

Un exemple plus complexe est celui d'un conseiller expert qui négocie sur deux moyennes mobiles sans utiliser l'historique :

Merci.

L'évolution de la bibliothèque est bonne. Question aux développeurs : où en est la feuille de route pour la librairie pinova ?

Quelles innovations peut-on encore attendre, à quoi ne pas s'attendre ?

 
Je voudrais une mise à jour de la documentation, ouais.
 

Dans le serveur de test (MetaQuotes-Beta server, adresse 78.140.180.203:443) une version beta du terminal 2323 avec de nouvelles fonctionnalités est disponible. La version bêta publique sera publiée demain.

Nous avons également publié la nouvelle version MetaTrader 5.0.20 pour Python (pip install --upgrade metatrader5) avec une nouvelle syntaxe pour le changement de compte :

import MetaTrader5 as mt5

mt5.initialize(timeout=10000)
mt5.initialize(login=25035662, password="oxeb7lpb", server="MetaQuotes-Demo")
mt5.login(25035662)
mt5.login(25035662, timeout=10000)
mt5.login(25035662, "oxeb7lpb")
mt5.login(25035662, password="oxeb7lpb")
mt5.login(25035662, password="oxeb7lpb", server="MetaQuotes-Demo")

Il est désormais possible de spécifier l'autorisation directement dans l'initialisation, sous forme complète ou abrégée.

La fonction d'attente est abolie et maintenant le cycle complet d'initialisation avec attente est effectué directement dans initialize, où vous pouvez spécifier le temps d'attente en millisecondes.

La bibliothèque Python est déjà garantie de trouver la dernière copie active du terminal, même s'il a été installé en mode portable (touche /portable).


Les programmes Python sont déjà affichés directement dans le navigateur :


La version de ce vendredi permettra de les exécuter comme des scripts MQL5 habituels et ils seront liés aux graphiques.


Plus tard, nous ajouterons l'accès à tous les indicateurs (y compris les indicateurs personnalisés) en mode lecture à la bibliothèque Python. Cela rendra le travail en python plus productif. Mais ce n'est pas encore une priorité, nous le ferons beaucoup plus tard.

 
Renat Fatkhullin:

Nous avons également publié une nouvelle version de MetaTrader 5.0.20 pour Python (pip install --upgrade metatrader5) avec une nouvelle syntaxe pour le changement de compte.

Il y a plus de fonctionnalités que MQL5.

 

En parallèle, nous étendons les capacités de l'éditeur et dans la prochaine version (qui n'arrive pas ce vendredi), il sera entièrement possible d'utiliser Clang/LLVM et Microsoft Visual Studio pour compiler des programmes C++ :


Peut-être inclurons-nous aussi le C#.


Travail approfondi pour utiliser pleinement les bases de données SQLite : SQLite : travail natif avec les bases de données SQL dans MQL5

Cela vous permet d'exploiter et d'échanger facilement de grandes quantités de données entre différents systèmes et au sein du terminal.

 
fxsaber:

Plus de fonctionnalités que MQL5.

Est-ce qu'on y arrive ?

 
Renat Fatkhullin:

En parallèle, nous étendons les capacités de l'éditeur et dans la prochaine version (qui n'arrivera pas ce vendredi)
sera entièrement capable d'utiliser Clang/LLVM et Microsoft Visual Studio pour compiler des programmes C++ :

Un éditeur de liens sera ajouté pour lier les fichiers .lib dans les projets
?

 
Roman:

Pour lier les fichiers .lib dans les projets
Un linker sera-t-il ajouté ?

Il est possible de spécifier plusieurs variantes de cible dans les projets :



Les fichiers DLL/EXE contiennent des définitions personnalisées, des bibliothèques et des paramètres supplémentaires pour le compilateur :

Le linker est automatiquement utilisé depuis Clang ou Visual Studio. Il n'est pas nécessaire de le spécifier explicitement.

 
fxsaber:

Il y a plus de fonctionnalités que MQL5.

C'est ainsi que la plateforme MetaTrader 5 dispose de plus de fonctionnalités.

En soi, tout langage est inutile sans une plateforme d'information et de négociation (une plateforme n'est pas un terminal, mais un complexe entier de serveurs avec une infrastructure et un écosystème) qui l'alimente en données et assure l'exécution des transactions.

Notre objectif est de présenter une plateforme transparente avec un large éventail d'outils pour l'algotrading, couvrant différents segments de consommateurs.

Python est un vainqueur incontesté dans le domaine du ML et un langage très efficace pour la recherche. Même si vous ne pouvez pas l'intégrer dans un testeur, il est également bon en mode d'intégration directe.


D'ailleurs, contrairement à d'autres bibliothèques Python (souvent écrites de manière frontale et mal optimisées), nous avons fortement optimisé le gain de données massives sous forme de graphiques. Cela signifie que vous pouvez obtenir l'histoire profonde efficacement en mémoire et rapidement.