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

 
Almaz:

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.

Aussi dans toutes les fonctions orders_get(), positions_get(), history_orders_get(), history_deals_get() a ajouté le 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.

Merci.

 
Roman:

Que voulez-vous dire exactement ? Copier un tableau de mql5 à py et inversement ?
Vous devriez au moins lire attentivement ce dont nous parlons.
Et ce qui est nécessaire ou non, vous ne devez pas le penser uniquement pour vous. Si vous n'en avez pas besoin, d'autres en auront besoin.

Juste par curiosité, quels ensembles de données voulez-vous transférer de MT ?

Les développeurs ont déjà dit plusieurs fois qu'ils ne transféreront rien à MT. Vous devez utiliser d'autres fonctionnalités pour cela.

 
Vladimir Perervenko:

Juste par curiosité, quels ensembles de données voulez-vous transférer de MT ?

Les développeurs ont déjà dit plusieurs fois qu'ils ne transféreront rien à MT. Pour ce faire, vous devez utiliser d'autres fonctionnalités.

Oui tout, leurs propres tableaux calculés.
Je construis exclusivement des synthétiques, et la possibilité de transférer des matrices dans les deux sens fait cruellement défaut.
Il est clair que vous pouvez utiliser PyAPI, mais il s'agit encore d'une liaison avec la dll.
Et en utilisant PyAPI, il n'est pas du tout nécessaire d'utiliser cette bibliothèque d'intégration.

 
Roman:

Oui, tout, vos propres tableaux calculés.
Je construis exclusivement des synthétiques, et la possibilité de transférer des réseaux dans les deux sens fait cruellement défaut.
Il est clair que vous pouvez utiliser PyAPI, mais il s'agit encore d'une liaison avec une dll.
Et en utilisant PyAPI, il n'est pas du tout nécessaire d'utiliser cette bibliothèque d'intégration.

Je ne pense pas vouloir faire la morale. Vous calculez les synthétiques sur la base des devis du terminal. Transférez les citations dans Python et effectuez tous les calculs dans Python.

Mais vous devrez faire de la gymnastique avec le transfert inverse des tableaux. Le moyen le plus simple est de passer par la base de données.

Ou utilisez ceci. Il y avait quelque part un petit fil avec ce projet. Ou ça.

En tout état de cause, cette intégration ne résoudra pas tous les désirs des traders. Mais il résout deux problèmes principaux et les plus importants : l'obtention de devis rapides et la gestion des transactions.

Tout le reste par lui-même avec sa propre infrastructure.

Bonne chance

khramkov/MQL5-JSON-API
khramkov/MQL5-JSON-API
  • khramkov
  • github.com
<a href="#metaquotes-mql5
 
Vladimir Perervenko:

Je ne pense pas vouloir faire la morale. Vous calculez les synthétiques sur la base des devis du terminal. Transférez les citations dans Python et effectuez tous les calculs dans Python.

Mais vous devrez faire de la gymnastique avec le transfert inverse des tableaux. Le moyen le plus simple est de passer par la base de données.

Ou utilisez ceci. Il y avait quelque part un petit fil avec ce projet. Ou ça.

En tout état de cause, cette intégration ne résoudra pas tous les désirs des traders. Mais il résout deux problèmes fondamentaux et très importants : des devis rapides et la gestion des échanges.

Tout le reste par lui-même avec sa propre infrastructure.

Bonne chance

C'est ce dont je parle, quelle que soit l'implémentation, via une dll ou une base de données, des sockets ou même des fichiers texte, etc.
Mais là encore, il s'agit d'une béquille supplémentaire sans rapport avec la bibliothèque.
Le fait est que nous développons maintenant activement la bibliothèque d'intégration mt5, il est donc souhaitable de fournir toutes les fonctionnalités nécessaires aux utilisateurs dans celle-ci dès le début.

 
Dmitry Prokopyev:

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

Je suis un peu sur autre chose.


positions_get - la liste des positions commerciales me sera retournée. En principe, vous pouvez ajouter des pandas et travailler sans problème.

Mais tout n'est pas limité à un seul pandas, et si vous avez besoin d'obtenir quelque chose comme :

vous devez composer d'une manière ou d'une autre, pandas ou pour... en quelque sorte beaucoup de mouvements corporels supplémentaires.

C'est devenu beaucoup plus pratique avec _asdict (), si celui qui écrit n'est pas un prog MQL5, mais disons un pythoniste ... ou un datasynetist, alors la liste / dict est

Les éléments de base de python, beaucoup construisent un transfert de données sur liste / dict.

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

et suspend également un gestionnaire d'erreur, s'il n'est pas utilisé ou assigné correctement. Eh bien, quelque part... :) Je peux me tromper.

Vous pourriez plutôt utiliser une simple compréhension de liste lors de l'affectation de votre variable.

positions = [p._asdict() for p in mt5.positions_get()]
 
nicholi shen:

Vous pourriez plutôt utiliser une simple compréhension de liste lors de l'affectation de votre variable.

cela ne change pas l'essence ... il s'agit d'un cycle supplémentaire

 

Messieurs, les gars du fil suivant posent des questions sur les libéraux :

URL: https://www.mql5.com/en/forum/306742/page11#comment_15595095

Pouvez-vous nous soutenir ?


La fonction symbols_get doit retourner un générateur de tuples nommés SymbolInfo. Un appel à symbols_get sans args devrait retourner tous les symboles disponibles dans le terminal. La fonction doit prendre un callback qui sera passé dans un SymbolInfo namedtuple pour être traité en utilisant la fonction de filtre. Voici quelques exemples.

import MetaTrader5 as mt5
from contextlib import contextmanager
import re


@contextmanager
def metatrader_connection(**kw):
    try:
        if not mt5.initialize(**kw):
            print("Failed to initialize python MT5")
            raise Exception
        yield
    finally:
        mt5.shutdown()


def symbols_get(function=None):
    """
    No function passed in will result in all symbols returned to the caller.
    If a callable function is passed in then the function is passed a SymbolInfo tuple for filtering
    :param function: callback function to filter the symbols
    """
    all_symbols_in_terminal_info = map(
        mt5.symbol_info,
        ['EURUSD', 'USDJPY', 'GBPJPY', 'EURGBP'] # *example only* this would represent all symbols available to the terminal
    )
    if function is not None:
        return filter(function, all_symbols_in_terminal_info)
    return all_symbols_in_terminal_info


if __name__ == "__main__":
    with metatrader_connection():
        all_terminal_symbols = symbols_get()
        jpy_symbols = symbols_get(lambda s: "JPY" in s.name)
        jpy_symbols_using_re = symbols_get(lambda s: re.match(r'\w*JPY\w*', s.name))
        visible_symbols = symbols_get(lambda s: s.visible)
        selected_symbols = symbols_get(lambda s: s.select)


        def my_criteria(symbol_info):
            return 'USD' in symbol_info.name and symbol_info.session_deals > 0


        usd_symbols_with_session_deals = symbols_get(my_criteria)
 

Bonsoir, pourriez-vous me conseiller, j'ai cru comprendre que ce connecteur n'est pas capable de prendre les informations des indicateurs connectés?

Exemple :

int  iMA(
   string              symbol,        // имя символа
   ENUM_TIMEFRAMES      period,        // период
   int                 ma_period,    // период усреднения
   int                 ma_shift,     // смещение индикатора по горизонтали
   ENUM_MA_METHOD       ma_method,    // тип сглаживания
   ENUM_APPLIED_PRICE   applied_price  // тип цены или handle
   );
 
9805244:

Bonsoir, pourriez-vous me conseiller, j'ai cru comprendre que ce connecteur n'est pas capable de prendre les informations des indicateurs connectés?

Exemple :

Pourquoi en avez-vous besoin ? Ne pouvez-vous pas le calculer en Python ? Vous me surprenez.