MetaTrader 5 Python用户组 - 如何在Metatrader中使用Python - 页 22

 
Vladimir Karputov:
现在移到了这个主题。
谢谢
 
Alexey Volchanskiy:

我也在学习Python,但只是作为掌握神经网络、机器学习和其他花哨的东西和软件包的一部分。 我认为不可能用这个超级大脑工作,它比MQL5慢200倍,我引用了一些简单测试的结果。

我还是不明白,是否有可能连接Python模块并从MQL5调用函数?或者只是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}")


为了在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;
}


这都是在一个古老的AMD Athlon(tm) 64 X2双核处理器4200+计算器上进行的,我想在MQL5上的数值会在12秒左右。

(我不知道如何在linux上运行MQL代码)。

因此,使用jit编译器的Python比C(mql)多出2倍!如果我在现代的8核CPU上运行它,它将多出8倍,仅仅是因为它是多线程的。

但即使在一个线程中,Python的结果也是9.6秒--所以它仍然更快。而且你也可以在有CUDA的显卡上运行它。

例如,我不能在C或MQL中写多线程的类似物--我将不能写loky、race和crash,另外,代码将大得多。

向MetaTrader的开发者提问:你们是否打算增加从Python中调用交易函数

我还想在Python中设置一个函数来订阅来自终端的tick事件,所以当tick出现时,信息将被发送到Python。

我知道这些功能有第三方开发,但我希望能开箱即可使用。

你也可以尝试用GoLang写多线程代码来玩,在单线程中,它的速度与C语言相当。
 

mql5

虚拟机 上的i7,分配2个核心,4个线程


 

你有什么样的处理器? 用C语言运行我的代码,与之比较。


如果是i7,它可能比我的AMD快25倍,甚至更多。我需要一个相同语言的报告点的测试。

 
Lyuk:
你有什么样的处理器? 用c语言运行我的代码来进行比较。

C

虚拟机上的i7,分配2个核心,4个线程


 
所以,事实证明,你的MQL甚至比C语言还稍慢,所以我的python代码用jit编译器会比他们的快很多。 我预测Python在你的CPU上以4个线程运行大约1.5秒,尽管只有2个真正的线程。
 

i7在Linux上,4个核心,8个线程


 

伟大的结果!而且很快就写好了。任何说python很慢的人都可以在这里看到测试结果。

在你的处理器上用一个线程运行更多的Python代码(并行=False)。


为了进行全面的测试。


遗憾的是,在过去的15年里,数字计算者只上升了大约12倍,我以为现代的CPU更快。
 

(平行 = 假)


 
Lyuk:

伟大的结果!而且很快就写好了。任何说python很慢的人都可以在这里看到测试结果。

在你的处理器上用一个线程运行更多的Python代码(并行=False)。


对于一个完整的测试。

他们很久以前就发布了,但他们更喜欢将其与纯Python进行比较,这毫无意义)纯Python是为其他目的设计的。