MetaTrader 5 Python User Group - wie man Python in Metatrader verwendet - Seite 22

 
Vladimir Karputov:
Jetzt in diesen Thread verschoben.
Thnx
 
Alexey Volchanskiy:

Ich lerne auch Python, aber nur im Rahmen der Beherrschung von neuronalen Netzen, maschinellem Lernen und anderen ausgefallenen Dingen und Paketen. Ich glaube nicht, dass es möglich ist, mit diesem Super-Brainer zu arbeiten, es ist 200 mal langsamer als MQL5, ich zitierte die Ergebnisse einiger einfacher Tests.

Ich habe immer noch nicht verstanden, ist es möglich, Python-Module zu verbinden und Funktionen von MQL5 aufrufen? Oder nur Python->MQL5?

Bei allem Respekt, Sie wissen einfach nicht, wie man es zubereitet. Ich habe Ihr Beispiel überarbeitet:

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


Zum Vergleich 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;
}


Das ist alles auf einem alten AMD Athlon(tm) 64 X2 Dual Core Processor 4200+ Rechner, ich denke, auf MQL5 wird der Wert etwa 12 Sekunden betragen.

(Ich weiß nicht, wie man MQL-Code unter Linux ausführt).

So Python mit jit Compiler schlägt C (mql) um 2 mal! Wenn ich es auf modernen 8-Core-CPU wird es 8 mal schlagen, einfach weil es multi-threaded ist.

Aber selbst in einem Thread beträgt das Python-Ergebnis 9,6 Sekunden - es ist also immer noch schneller. Und Sie können es auch auf einer Grafikkarte mit CUDA ausführen.

Ich kann zum Beispiel keine Multithreading-Analoga in C oder MQL schreiben - ich werde nicht in der Lage sein, loky, races und Abstürze zu schreiben, außerdem wird der Code viel größer sein.

Frage an die MetaTrader-Entwickler: Werden Sie den Aufruf von Handelsfunktionen aus Python hinzufügen?

Ich möchte auch eine Funktion in Python zu abonnieren, um Tick-Ereignisse aus dem Terminal, so dass, wenn ein Tick kommt die Nachricht wird an Python gesendet werden.

Ich weiß, dass es Entwicklungen von Drittanbietern für diese Funktionen gibt, aber ich möchte sie gerne sofort einsetzen können.

Sie können auch spaßeshalber versuchen, Multi-Thread-Code in GoLang zu schreiben, in einem Thread ist die Geschwindigkeit mit der von C vergleichbar.
 

mql5

i7 auf virtueller Maschine, 2 Kerne, 4 Threads zugewiesen


 

Führen Sie meinen Code in C aus, um ihn damit zu vergleichen.


Wenn es ein i7 ist, ist er wahrscheinlich 25 Mal schneller als mein AMD, wenn nicht sogar mehr. Ich brauche einen Test in denselben Sprachen für den Berichtspunkt.

 
Lyuk:
Führen Sie meinen Code in C aus, um ihn damit zu vergleichen.

C

i7 aufvirtueller Maschine, 2 Kerne, 4 Threads zugewiesen


 
Es stellt sich also heraus, dass Ihre MQL ist sogar etwas langsamer als C, so dass meine Python-Code mit Jit-Compiler wird viel schneller als ihre sein. Ich sage voraus, dass Python etwa 1,5 Sekunden auf Ihrer CPU in 4 Threads benötigt, obwohl es nur 2 echte Threads gibt.
 

Py

i7 unter Linux, 4 Kerne, 8 Threads


 

Tolles Ergebnis! Und schnell geschrieben. Wer behauptet, Python sei langsam, kann sich die Testergebnisse hier ansehen.

Mehr Python-Code in einem Thread auf Ihrer CPU ausführen (parallel = False)


Für einen vollständigen Test.


Traurigerweise haben sich die Zahlenknacker in den letzten 15 Jahren nur um etwa das 12-fache erhöht, ich dachte, moderne CPUs wären schneller.
 

(parallel = falsch)


 
Lyuk:

Tolles Ergebnis! Und schnell geschrieben. Wer behauptet, Python sei langsam, kann sich die Testergebnisse hier ansehen.

Mehr Python-Code in einem Thread auf Ihrem Prozessor ausführen (parallel = False)


Für einen vollständigen Test.

Sie wurden vor langer Zeit gepostet, aber sie ziehen es vor, es mit reinem Python zu vergleichen, was keinen Sinn macht. Reines Python ist für andere Zwecke gedacht.

Grund der Beschwerde: