Grupo de usuarios de MetaTrader 5 Python - cómo utilizar Python en Metatrader - página 22

 
Vladimir Karputov:
Movido ahora a este hilo.
Thnx
 
Alexey Volchanskiy:

También estoy estudiando Python, pero únicamente como parte del dominio de las redes neuronales, el aprendizaje automático y otras cosas y paquetes extravagantes. No creo que sea posible trabajar con este supercerebro, es 200 veces más lento que MQL5, cité los resultados de unas simples pruebas.

Todavía no he entendido, ¿es posible conectar módulos de Python y llamar a funciones desde MQL5? ¿O sólo Python->MQL5?

Con el debido respeto, no sabes cómo prepararlo. Rehizo su ejemplo:

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}")


Para comparar 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;
}


Todo esto es en una antigua calculadora AMD Athlon(tm) 64 X2 Dual Core Processor 4200+, creo que en MQL5 el valor será de unos 12 seg.

(No sé cómo ejecutar el código MQL en linux).

Así que Python con el compilador jit gana a C (mql) por 2 veces. Si lo ejecuto en una CPU moderna de 8 núcleos ganará 8 veces, simplemente porque es multihilo.

Pero incluso en un hilo, el resultado de Python es de 9,6 segundos, por lo que sigue siendo más rápido. Y también puedes ejecutarlo en una tarjeta de vídeo con CUDA.

Por ejemplo, no puedo escribir análogos multihilo en C o MQL - no podré escribir loky, carreras y choques, además el código será mucho más grande.

Pregunta a los desarrolladores de MetaTrader: ¿van a añadir la llamada de funciones de comercio desde Python?

También me gustaría una función en Python para suscribirse a los eventos de tick desde el terminal, de modo que cuando llegue un tick el mensaje sea enviado a Python.

Sé que hay desarrollos de terceros de estas funciones, pero me gustaría tenerlas fuera de la caja.

También puedes intentar escribir código multihilo en GoLang, por si te interesa, en un hilo es comparable en velocidad a C.
 

mql5

i7 en máquina virtual, asignado 2 núcleos, 4 hilos


 

¿Qué tipo de procesador tienes? Ejecuta mi código en C para compararlo.


Si es un i7 probablemente sea 25 veces más rápido que mi AMD, si no más. Necesito una prueba en los mismos idiomas para el punto del informe.

 
Lyuk:
¿Qué tipo de procesador tienes? Ejecuta mi código en c para compararlo.

C

i7 enmáquina virtual, asignado 2 núcleos, 4 hilos


 
Así que resulta que su MQL es incluso ligeramente más lento que C, por lo que mi código python con el compilador jit será mucho más rápido que el suyo. Preveo que python tardará unos 1,5 segundos en su CPU en 4 hilos, aunque sólo hay 2 hilos reales.
 

Py

i7 en Linux, 4 núcleos, 8 hilos


 

Gran resultado. Y rápidamente escrito. Quien diga que python es lento puede ver los resultados de las pruebas aquí.

Ejecutar más código python en un hilo en su CPU (paralelo = Falso)


Para una prueba completa.


Es triste decirlo, pero los calculadores de números sólo han subido unas 12 veces en los últimos 15 años, yo pensaba que las CPUs modernas eran más rápidas.
 

(paralelo = Falso)


 
Lyuk:

Gran resultado. Y rápidamente escrito. Quien diga que python es lento puede ver los resultados de las pruebas aquí.

Ejecutar más código python en un hilo en su procesador (paralelo = Falso)


Para una prueba completa.

Se publicaron hace mucho tiempo pero prefieren compararlo con python puro lo cual no tiene sentido ) python puro está diseñado para otros fines