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

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

Je l'ai essayé, tout dépend du matériel sur lequel il fonctionne.

Une instance consomme environ 45-50Mb de RAM + 2,5-4% de CPU. (Oui, le % CPU dépend du type de CPU, dans mon cas Intel Xeon L5640 @ 2.27GHz).

Le même, une instance de python.

Si python fonctionne avec l'historique, + 200-300Mb de RAM. Le CPU n'est presque pas utilisé.

Eh bien, pour quoi faire, cela dépend de vos TDR ou de votre idée.

Compris. Merci pour ces informations.

 
Développeurs, veuillez créer la fonction API copy_buffer(). Obtention de données d'indicateurs à partir de données analogiques.
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
  • www.mql5.com
Отсчет элементов копируемых данных (индикаторный буфер с индексом buffer_num) от стартовой позиции ведется от настоящего к прошлому, то есть стартовая позиция, равная 0, означает текущий бар (значение индикатора для текущего бара). При копировании заранее неизвестного количества данных в качестве массива-приемника buffer[] желательно...
 
Denis Kirichenko:
Développeurs, veuillez créer la fonction API copy_buffer(). Obtenir les données de l'indicateur par voie analogique.

N'existe-t-il pas un paquet d'indicateurs en Python ? Ou est-ce une sorte d'indicateur spécial. Celui-ci semble fonctionner https://github.com/twopirllc/pandas-ta

twopirllc/pandas-ta
twopirllc/pandas-ta
  • twopirllc
  • github.com
Technical Analysis (TA) is an easy to use library that is built upon Python's Pandas library with more than 80 Indicators. These indicators are comminly used for financial time series datasets with columns or labels similar to: datetime, open, high, low, close, volume, et al. Many commonly used indicators are included, such as: Moving Average...
 
Vladimir Perervenko:

N'existe-t-il pas un paquet d'indicateurs en Python ? Ou est-ce une sorte d'indicateur spécial. Celui-ci semble fonctionner https://github.com/twopirllc/pandas-ta

copy_buffer() implique de récupérer un tableau de données pour vos calculs.
Etcopy_buffer() devrait fonctionner dans les deux sens.
Ce qui manque, c'est un transfert de tableau bidirectionnel.

 
Roman:

Les fonctions symbols_total et symbol_name sont absentes
Pour obtenir une liste de symboles comme celle-ci :

Dans la version 5.0.29, l'ajout de symbols_total(), symbols_get([group="EURUSD, "USDGBP", *RU*"]), nécessite la dernière version bêta du Terminal pour fonctionner.

De plus, dans toutes les fonctions orders_get(), positions_get(), history_orders_get(), history_deals_get(), nous avons ajouté la possibilité de filtrer par groupe - group="EURUSD, "USDGBP", *RU*".
Les méthodes order_check(), order_send() renverront la demande initiale d'exécution dans le champ request.

 
Roman:

Lafonction copy_buffer() implique de récupérer un tableau de données pour ses propres calculs.
Etcopy_buffer() devrait fonctionner dans les deux sens.
Ce qui manque, c'est le passage bidirectionnel du tableau.

Il y en a beaucoup sur github, il y a des librairies b/gbin et des paquets payants...

Ne pas transférer le modèle de travail de MQL5 à python. Ils sont différents et ont des objectifs différents.

 
Almaz:

Dans la version 5.0.29, ajout de symbols_total(), symbols_get([group="EURUSD, "USDGBP", *RU*"]), nécessite la dernière version bêta de Terminal pour fonctionner.

De plus, dans toutes les fonctions orders_get(), positions_get(), history_orders_get(), history_deals_get() nous avons ajouté une option de filtrage par groupe - group="EURUSD, "USDGBP", *RU*".
Les méthodes order_check(), order_send() renverront la demande initiale d'exécution dans le champ request.

Et la liste de _todict() n'est pas encore capable de retourner ?

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

Ils ne peuvent pas encore retourner une liste de _todict() ?

Oui, ils peuvent, voir l'exemple.

import MetaTrader5 as mt5
# выведем данные о пакете MetaTrader5
print("MetaTrader5 package author: ",mt5.__author__)
print("MetaTrader5 package version: ",mt5.__version__)

# установим подключение к терминалу MetaTrader 5
if not mt5.initialize():
    print("initialize() failed")
    mt5.shutdown()

# подключимся к торговому счету с указанием пароля и сервера
authorized=mt5.login(25115284, password="gqsdfgtdm",server="MetaQuotes-Demo")
if(authorized):
    # выведем данные о торговом счете
    print(mt5.account_info())
else:
    print("failed to connect to trade account 25115284 with password=gqz0lbdm")

account_info_dict=mt5.account_info(). _asdict()
for prop in account_info_dict:
    print("{}={}".format(prop,account_info_dict[prop]))

mt5.shutdown()

Résultat

AccountInfo(login=25115284, trade_mode=0, leverage=100, limit_orders=200, margin_so_mode=0, trade_allowed=True, trade_expert=True, margin_mode=2, currency_digits=2, fifo_close=False, balance=99511.4, credit=0.0, profit=9.04, equity=99520.44, margin=98.18, margin_free=99422.26, margin_level=101365.28824607862, margin_so_call=50.0, margin_so_so=30.0, margin_initial=0.0, margin_maintenance=0.0, assets=0.0, liabilities=0.0, commission_blocked=0.0, name='MetaQuotes Dev Demo', server='MetaQuotes-Demo', currency='USD', company='MetaQuotes Software Corp.')
login=25115284
trade_mode=0
leverage=100
limit_orders=200
margin_so_mode=0
trade_allowed=True
trade_expert=True
margin_mode=2
currency_digits=2
fifo_close=False
balance=99511.4
credit=0.0
profit=9.04
equity=99520.44
margin=98.18
margin_free=99422.26
margin_level=101365.28824607862
margin_so_call=50.0
margin_so_so=30.0
margin_initial=0.0
margin_maintenance=0.0
assets=0.0
liabilities=0.0
commission_blocked=0.0
name=MetaQuotes Dev Demo
server=MetaQuotes-Demo
currency=USD
company=MetaQuotes Software Corp.
 
Rashid Umarov:

Ils peuvent, voir exemple

Résultat

Merci, j'ai vu cet exemple, il fonctionne.

Ma question est un peu différente.

    if mt5.initialize('c:\\Works\\MT5 - terminals\\RoboForex - MT5\\terminal64.exe',
                            login=500036189, server='RoboForex-MetaTrader 5', password='',  portable=True):
        positions = mt5.positions_get()
        print(positions)
        pList = []
        for elem in positions:
            pList.append(elem._asdict())

positions_get - il me renvoie une liste de TradePosition. En principe, c'est bon, on peut le lancer dans pandas et ça marche bien.

(TradePosition(ticket=164661016, time=1585075408, time_msc=1585075408163, time_update=1585075408, time_update_msc=1585075408163, type=1, magic=0, identifier=164661016, reason=0, volume=0.01, price_open=120.306, sl=0.0, tp=0.0, price_current=120.279, swap=0.0, profit=0.24, symbol='EURJPY', comment='', external_id=''), 
 TradePosition(ticket=164661051, time=1585075426, time_msc=1585075426062, time_update=1585075426, time_update_msc=1585075426062, type=0, magic=0, identifier=164661051, reason=0, volume=0.01, price_open=1.07798, sl=0.0, tp=0.0, price_current=1.07806, swap=0.0, profit=0.08, symbol='EURUSD', comment='', external_id=''))

Mais ce n'est pas limité aux pandas et si vous voulez obtenir quelque chose comme ça :

[{'ticket': 164661016, 'time': 1585075408, 'time_msc': 1585075408163, 'time_update': 1585075408, 'time_update_msc': 1585075408163, 'type': 1, 'magic': 0, 'identifier': 164661016, 'reason': 0, 'volume': 0.01, 'price_open': 120.306, 'sl': 0.0, 'tp': 0.0, 'price_current': 120.328, 'swap': 0.0, 'profit': -0.2, 'symbol': 'EURJPY', 'comment': '', 'external_id': ''}, 
{'ticket': 164661051, 'time': 1585075426, 'time_msc': 1585075426062, 'time_update': 1585075426, 'time_update_msc': 1585075426062, 'type': 0, 'magic': 0, 'identifier': 164661051, 'reason': 0, 'volume': 0.01, 'price_open': 1.07798, 'sl': 0.0, 'tp': 0.0, 'price_current': 1.07881, 'swap': 0.0, 'profit': 0.83, 'symbol': 'EURUSD', 'comment': '', 'external_id': ''}]

nous devons le convertir d'une manière ou d'une autre, pandas ou pour ... C'est beaucoup de gestes inutiles.

_asdict() est devenu beaucoup plus pratique, si le développeur n'est pas un programmeur MQL5, mais, disons, un Pythoniste ... ou un scientifique de données, la liste/dictée est

list/dict sont les éléments principaux de python. De nombreuses librairies utilisent list/dict pour créer des transferts de données.

Les tuples sont utilisés souvent et beaucoup, mais seulement si vous voulez contrôler strictement les types de données qui y circulent.

et disposent d'un gestionnaire d'erreurs en cas d'utilisation ou d'affectation incorrecte. Quelque part... :) Je peux me tromper.

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

Il y en a beaucoup sur github, il y a des librairies b/gbin et des paquets payants...

Ne pas transférer le modèle de travail de MQL5 à python. Ils sont différents et ont des objectifs différents.

Qu'est-ce que vous entendez par là ? Copier un tableau de mql5 à py et inversement ?
Vous devriez au moins lire attentivement ce dont nous parlons.
Vous ne devez pas penser uniquement pour vous. Si vous n'en avez pas besoin, d'autres en auront besoin.