MetaTrader 5 Python User Group - Come usare Python in Metatrader - pagina 22

 
Vladimir Karputov:
Spostato ora in questo thread.
Thnx
 
Alexey Volchanskiy:

Sto anche studiando Python, ma solo come parte della padronanza delle reti neurali, dell'apprendimento automatico e di altre cose fantasiose e pacchetti. Non credo sia possibile lavorare con questo super-brainer, è 200 volte più lento di MQL5, ho citato i risultati di alcuni semplici test.

Non ho ancora capito, è possibile collegare moduli Python e chiamare funzioni da MQL5? O solo Python->MQL5?

Con tutto il rispetto, non sai come prepararlo. Rielabora il tuo esempio:

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


Per il confronto in 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;
}


Questo è tutto su un antico calcolatore AMD Athlon(tm) 64 X2 Dual Core Processor 4200+, penso che su MQL5 il valore sarà intorno ai 12 sec.

(Non so come eseguire il codice MQL su linux).

Quindi Python con il compilatore jit batte il C (mql) di 2 volte! Se lo faccio girare su una moderna CPU a 8 core lo batterà 8 volte, semplicemente perché è multi-threaded.

Ma anche in un solo thread il risultato di Python è di 9,6 secondi - quindi è ancora più veloce. E si può anche eseguire su una scheda video con CUDA.

Per esempio non posso scrivere analoghi multi-thread in C o MQL - non sarò in grado di scrivere loky, gare e crash, inoltre il codice sarà molto più grande.

Domanda agli sviluppatori di MetaTrader: avete intenzione di aggiungere la chiamata di funzioni di trading da Python?

Vorrei anche una funzione in Python per sottoscrivere gli eventi di tick dal terminale, così quando arriva un tick il messaggio sarà inviato a Python.

So che ci sono sviluppi di terze parti di queste funzioni, ma mi piacerebbe averle fuori dalla scatola.

Potete anche provare a scrivere codice multi-thread in GoLang per divertimento, in un thread è paragonabile in velocità al C.
 

mql5

i7 su macchina virtuale, assegnato 2 core, 4 threads


 

Che tipo di processore hai? Esegui il mio codice in C per confrontarlo.


Se è un i7 è probabilmente 25 volte più veloce del mio AMD, se non di più. Ho bisogno di un test nelle stesse lingue per il punto di rapporto.

 
Lyuk:
Che tipo di processore hai? Esegui il mio codice in C per confrontarlo.

C

i7 sumacchina virtuale, assegnato 2 core, 4 threads


 
Così si scopre che il tuo MQL è anche leggermente più lento del C, quindi il mio codice python con compilatore jit sarà molto più veloce del loro. Prevedo che python impiegherà circa 1,5 secondi sulla vostra CPU in 4 thread, anche se ci sono solo 2 thread reali.
 

Py

i7 su Linux, 4 core, 8 threads


 

Grande risultato! E scritto rapidamente. Chiunque dica che python è lento può essere mandato a vedere i risultati del test qui.

Esegui più codice python in un thread sulla tua CPU (parallel = False)


Per un test completo.


Triste a dirsi, i creatori di numeri sono aumentati solo di circa 12 volte negli ultimi 15 anni, pensavo che le CPU moderne fossero più veloci.
 

(parallelo = Falso)


 
Lyuk:

Grande risultato! E scritto rapidamente. Chiunque dica che python è lento può essere mandato a vedere i risultati del test qui.

Esegui più codice python in un thread sul tuo processore (parallel = False)


Per un test completo.

Sono stati postati molto tempo fa, ma preferiscono confrontarli con il python puro, il che non ha senso) il python puro è progettato per altri scopi