MetaTrader 5 Python User Group - как использовать Python в Метатрейдере - страница 22

 
Vladimir Karputov:
Перенесено теперь в эту ветку.
Thnx
 
Alexey Volchanskiy:

Я тоже Python изучаю, но исключительно в рамках освоения нейронных сетей, машинного обучения и прочих модных плюшек и пакетов. Работать на этом супер-тормозе не считаю возможным, в 200 раз медленнее, чем MQL5, я приводил результаты простых тестов.

И я так пока и не понял, можно ли из MQL5 подключать модули Python и вызывать из модуля функции? Или связь только Python->MQL5?

При всём уважении , но вы просто не умеете его готовить. Переделал ваш пример:

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


Для сравнения на С:
#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;
}


Это всё на древнем калькуляторе AMD Athlon(tm) 64 X2 Dual Core Processor 4200+, думаю на MQL5 будет значение около 12 сек.

(не знаю как запустить MQL код на linux.)

То есть Python с jit компилятором уделал  С (mql)  в  2 раза !, если его запустить на современном 8 ядерном процессоре - уделает в 8 раз просто потому что многопоточный.

Но даже в один поток результат Python - 9.6 секунды - то есть всё равно быстрее. А ещё можно запустить на видеокарте с CUDA.

Написать многопоточный аналог на С или MQL я например не смогу - локи, гонки и вылеты будут, плюс кода будет много больше.

Вопрос разработчикам MetaTrader: планируете ли добавить вызов торговых функций из Python ?

Ёще хотелось бы в питоне функцию подписки на тиковые события из терминала, чтоб по приходу тика отсылалось сообщение в питон.

Знаю что есть сторонние разработки этих функций , но хотелось бы из коробки.

Ради интереса можно еще попробовать написать многопоточный код на GoLang, в один поток он сравним по скорости с С.
 

mql5

i7 на виртуальной машине, выделено 2 ядра, 4 потока


 

А какой процессор у вас ? запустите мой код на С чтоб было с чем сравнить.


Ну если i7 то он наверно раз в 25 быстрее моего AMD, если не больше. Нужен тест на одинаковых языках , для точки отчета.

 
Lyuk:
А какой процессор у вас ? запустите мой код на С чтоб было с чем сравнить.

Си

i7 на виртуальной машине, выделено 2 ядра, 4 потока


 
То есть получается что у вас MQL даже чуть медленней чем С, соответственно мой код на python c jit компилятором будет гораздо быстрее их . Прогнозирую питон  где то 1.5 сек на вашем процессоре в 4 потока , правда там 2 только настоящих.
 

Py

i7 на Linux, 4 ядра, 8 потоков


 

Отличный результат ! И быстро написан. Всех кто говорит что python тормозной - можно отправлять смотреть результаты тестов сюда.

Запустите ещё  питоновский код в один поток на вашем процессоре (parallel = False)


Для полного теста.


Печалит только то что числодробилки за последние 15 лет ускорились всего примерно в 12 раз , я думал что современные процессоры пошустрее.
 

(parallel = False)


 
Lyuk:

Отличный результат ! И быстро написан. Всех кто говорит что python тормозной - можно отправлять смотреть результаты тестов сюда.

Запустите ещё  питоновский код в один поток на вашем процессоре (parallel = False)


Для полного теста.

да их уже давно направили, но они предпочитают с чистым питоном сравнивать, что бессмысленно ) чистый для других целей предназначен

Причина обращения: