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

 
Maxim Dmitrievsky:

et si, hypothétiquement, vous prenez le support ONNX, les modèles importés seront plus lents que le MQL lui-même ?

Vérifiez par vous-même.

Mais n'oubliez pas que la véritable enveloppe d'ONNX sera certainement en C++ sous la forme d'une bibliothèque/module pour python, et ensuite le pilote/les bibliothèques de la carte vidéo spécifique (si elle est appropriée).

Python n'est qu'un couloir entre les appels à des bibliothèques efficaces, qui doivent être échangées avec lui sous la forme d'ensembles de données assez coûteux.

Les gens ne comprennent pas assez que Python n'est en fait qu'une enveloppe pour les appels de bibliothèque et rien de plus. Ils pensent que python est un langage puissant et moderne. Mais en réalité, il s'agit d'une liaison entre des bibliothèques C++ ;)

Et chaque bibliothèque a des coûts monstrueux pour assurer la compatibilité avec les structures dynamiques de python (même dans numpy).

 
Renat Fatkhullin:

Vérifiez par vous-même.

Mais n'oubliez pas que la véritable enveloppe d'ONNX sera certainement en C++ sous la forme d'une bibliothèque/module pour python, puis le pilote/les bibliothèques de la carte vidéo spécifique (si elle est appropriée).

Python n'est qu'un couloir entre les appels à des bibliothèques efficaces, qui doivent être échangées avec lui sous la forme d'ensembles de données assez coûteux.

Les gens ne comprennent pas assez que Python n'est qu'une enveloppe pour les appels aux bibliothèques et rien de plus. Ils pensent que python est un langage puissant et moderne. Mais en réalité, il s'agit d'une liaison entre des bibliothèques C++ ;)

Et chaque bibliothèque a un coût monstrueux pour assurer la compatibilité avec les structures dynamiques de python (même dans numpy).

Je vais vérifier... je n'ai pas encore regardé les détails.

Il est clair que Python est surtout destiné à la recherche.

Mais pour tirer le code d'un réseau neuronal déjà formé après coup (et ils changent chaque fois pendant la recherche), c'est déjà irréel de transférer quelque chose quelque part :)

Peut-être que je ne comprends pas bien ce que tu voulais faire. De toute façon, vous avez suffisamment de possibilités avec l'api python. A moins que vous ne puissiez pas le mettre sur le marché.

 
Renat Fatkhullin:

Nein. Il n'est pas difficile de comprendre que nous avons besoin de notre propre langue et d'une langue que nous utilisons, qui est plus de cent fois supérieure à la langue maternelle, pour que le testeur puisse la comprendre.

Pour nous, c'est très rentable de mettre en œuvre notre idée, de créer des bibliothèques de données en module MQL5 et de les compiler. Pour ce faire, nous avons commencé à intégrer un compilateur LLVM externe dans l'éditeur.

Je ne sais pas si ma question a été traduite correctement. La question est légèrement différente.

Le module Python reçoit-il des commandes pour le testeur de stratégie? Éventuellement ou définitivement ?
 

J'ajoute mes cinq kopecks aussi ))))

Je me suis mis à Python précisément parce qu'il est beaucoup plus facile (il me semble) de travailler avec des réseaux. Il y a beaucoup de développements dans ce domaine. Il suffit de le prendre et de l'appliquer. Et vous ne pouvez pas vous débarrasser des réseaux neuronaux. A mon avis, MQL a juste besoin de bibliothèques pour travailler avec cette entité...

 
Almaz:

Donnez-moi un exemple de votre code Python qui ralentit, les mots ne montrent pas clairement ce qu'il fait et comment vous obtenez les données. Et pourquoi écrit-il constamment dans le fichier ? Ne peut-on pas le faire à la fin ?

J'ai modifié un peu le code Python : j'ai augmenté la demande de ticks d'un jour à 30, organisé l'écriture dans le fichier non pas ligne par ligne, mais par blocs de 500 lignes. Le temps de fonctionnement a diminué de quelques secondes. L'indicateur est à propos de rien.

J'ai redessiné mon indicateur. J'ai ajouté des tampons et écrit les données dans le fichier ligne par ligne. La demande de tiques reste la même - un jour.

J'ai placé l'indicateur sur le graphique.

2020.11.29 17:58:07.306 newCandles_F_1.01 (GBPUSD,H2)   00:01:01

L'indicateur a rendu et écrit toutes les données dans le fichier en une minute.

Python - 3 heures

MQL - 1 minute

 

Salutations à tous.

Pouvez-vous me dire pourquoi.

Je lis un fichier csv dans un cadre de données. Ensuite, j'empile quelques lignes en une seule et je les écris dans un nouveau fichier csv.

....
csv_framе = pd.read_csv(flname, delimiter=',')
#  тут меняю имя файла
if os.path.isfile(flname):
    os.remove(flname)

rows, cols = csv_framе.shape
for i in range(candles_in_train, rows):
    lst = list()
    for k in range(candles_in_train):
        m = i - candles_in_train + k
        l = list(csv_framе.iloc[m])
        if m < i - 1:
            del l[-1]
        lst += l
    mf.write_csv_data(flname, 'a', lst)

Ce code fonctionne pendant 17 secondes.

Mais si je mets tout en une seule fois dans un nouveau cadre csv et que je le décharge ensuite dans un fichier, le temps d'exécution du code passe à 1 minute. 44 sec.

...
new_frame = pd.DataFrame()

rows, cols = csv_framе.shape
for i in range(candles_in_train, rows):
    lst = list()
    for k in range(candles_in_train):
        m = i - candles_in_train + k
        l = list(csv_fraim.iloc[m])
        if m < i - 1:
            del l[-1]
        lst += l
    #mf.write_csv_data(flname, 'a', lst)
    r, c = new_frame.shape
    if r == 0:
        new_frame = pd.DataFrame([lst])
    else:
        new_frame.loc[r] = lst
new_frame.to_csv(flname, header=None, index=False)

Pourquoi ?

 

problème d'encodage ? (Traducteur Google)


 

Il existe une table (pandas DataFrame). Comment créer une nouvelle colonne par condition : si colonne "1" < colonne "2" alors écrire 145 sinon écrire 874 ?


ajouter :

En tout cas, résolu par

import numpy as np
... np.where(
 
Bonjour, peut-on utiliser Python dans MT5 pour atteindre WinApi ?

Plus précisément, je veux savoir si cela fonctionnera ?

keybd_event(VK_CONTROL,0,0,0);
 

Comment faire un décalage ?

Voici le tableau (cadre de données)

      time  
2020-11-25
2020-11-26
2020-11-27
2020-11-30 
2020-12-01        

Comment le faire comme ça :

      time             time_1
2020-11-25	   2020-11-26
2020-11-26         2020-11-27
2020-11-27         2020-11-30
2020-11-30         2020-12-01 
2020-12-01         ничего не писать