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

 
Vladimir Karputov:
Déplacé maintenant dans ce fil.
Thnx
 
Alexey Volchanskiy:

J'étudie également Python, mais uniquement dans le cadre de la maîtrise des réseaux neuronaux, de l'apprentissage automatique et d'autres trucs et paquets fantaisistes. Je ne pense pas qu'il soit possible de travailler avec ce super-cerveau, il est 200 fois plus lent que MQL5, j'ai cité les résultats de quelques tests simples.

Je n'ai toujours pas compris, est-il possible de connecter des modules Python et d'appeler des fonctions depuis MQL5 ? Ou simplement Python->MQL5 ?

Avec tout le respect que je vous dois, vous ne savez pas comment le préparer. J'ai retravaillé ton exemple :

En Python :

#!/usr/bin/env python3

from numba import njit, prange
import time


@njit(parallel=True, fastmath=True, cache=False)
def calc_pi(num_steps):
    x, sum1 = 0.0, 0.0
    step1 = 1.0 / num_steps
    for i in prange(num_steps):
        x = (i + 0.5) * step1
        sum1 = sum1 + 4.0 / (1.0 + x * x)
    return sum1 * step1


calc_pi(1)  # minus jit compilation time
start_time = time.time()
pi = calc_pi(1000000000)
msvcr = time.time() - start_time

print(f"--- {msvcr} seconds --- The value of PI is {pi}")


Pour la comparaison en C :
#include <stdio.h>
#include <time.h>

int main()
{
    int num_steps = 1000000000;
    double step;

    clock_t start;
    clock_t stop;
    start = clock();
    double x, pi, sum=0.0;
    step = 1.0/(double)num_steps;
    for (int i = 0; i<num_steps; i++)
    {
        x = (i + .5) * step;
        sum = sum + 4.0 / (1.0 + x * x);
    }
    pi = sum*step;
    stop = clock();

    printf("The value of PI is %1.12f \n", pi);
    printf("The time to calculate PI was %5.3f seconds \n", ((double)(stop - start)/CLOCKS_PER_SEC));
    return 0;
}


Tout ceci sur une ancienne calculatrice AMD Athlon(tm) 64 X2 Dual Core Processor 4200+, je pense que sur MQL5 la valeur sera d'environ 12 sec.

(Je ne sais pas comment exécuter le code MQL sur linux).

Donc Python avec le compilateur jit bat le C (mql) par 2 fois ! Si je l'exécute sur un CPU moderne à 8 cœurs, il sera battu 8 fois, simplement parce qu'il est multithread.

Mais même dans un seul thread, le résultat de Python est de 9,6 secondes - il est donc toujours plus rapide. Et vous pouvez également l'exécuter sur une carte vidéo avec CUDA.

Par exemple, je ne peux pas écrire d'analogues multithreads en C ou en MQL - je ne pourrai pas écrire loky, races et crashes, et le code sera beaucoup plus gros.

Question aux développeurs de MetaTrader : allez-vous ajouter l'appel de fonctions de trading depuis Python ?

J'aimerais également disposer d'une fonction en Python permettant de s'abonner aux événements de tick à partir du terminal, de sorte que lorsqu'un tick survient, le message est envoyé à Python.

Je sais qu'il existe des développements tiers de ces fonctions, mais j'aimerais les avoir dès le départ.

Vous pouvez aussi essayer d'écrire du code multithread en GoLang, pour l'anecdote, dans un seul thread, il est comparable en vitesse au C.
 

mql5

i7 sur une machine virtuelle, alloué 2 cœurs, 4 threads


 

Quel type de processeur avez-vous ? Exécutez mon code en C pour le comparer.


Si c'est un i7, il est probablement 25 fois plus rapide que mon AMD, si ce n'est plus. J'ai besoin d'un test dans les mêmes langues pour le point de rapport.

 
Lyuk:
Quel type de processeur avez-vous ? Exécutez mon code en C pour le comparer.

C

i7 sur unemachine virtuelle, alloué 2 cœurs, 4 threads


 
Il s'avère donc que votre MQL est même légèrement plus lent que le C, donc mon code python avec le compilateur jit sera beaucoup plus rapide que le leur. Je prédis que python prendra environ 1,5 seconde sur votre CPU en 4 threads, bien qu'il n'y ait que 2 threads réels.
 

Py

i7 sous Linux, 4 cœurs, 8 threads


 

Excellent résultat ! Et rapidement écrit. Tous ceux qui disent que python est lent peuvent être envoyés voir les résultats des tests ici.

Exécuter plus de code python dans un seul thread sur votre processeur (parallel = False)


Pour un test complet.


C'est triste à dire, mais les calculateurs n'ont été multipliés que par 12 au cours des 15 dernières années. Je pensais que les processeurs modernes étaient plus rapides.
 

(parallèle = Faux)


 
Lyuk:

Excellent résultat ! Et rapidement écrit. Tous ceux qui disent que python est lent peuvent être envoyés voir les résultats des tests ici.

Exécuter plus de code python dans un seul thread sur votre processeur (parallel = False)


Pour un test complet.

Ils ont été postés il y a longtemps, mais ils préfèrent le comparer à Python pur, ce qui n'a aucun sens. Python pur est conçu pour d'autres usages.

Raison: