MetaTrader 5 Python User Group - メタトレーダーでPythonを使用する方法 - ページ 22

 
Vladimir Karputov:
このスレッドに移動しました。
Thnx
 
Alexey Volchanskiy:

Pythonも勉強していますが、あくまでニューラルネットワークや機械学習など、派手なものやパッケージを使いこなすための一環としてです。 こんな超弩級のもので仕事ができるとは思えない、MQL5の200倍は遅い、簡単なテストの結果を引用してみたが。

まだ理解していないのですが、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}")


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 Dual Core Processor 4200+の計算機で、MQL5では12秒前後の値になると思います。

(LinuxでMQLのコードを実行する方法は知りません)。

つまり、jitコンパイラを使ったPythonはC(mql)に2倍の差をつけました!最新の8コアCPUで実行すると、マルチスレッドなので8倍の差をつけることができます。

しかし、1スレッドのPythonの結果でも9.6秒ですから、まだ速い方です。また、CUDAを搭載したビデオカードでも動作させることができます。

例えば私はCやMQLでマルチスレッドのアナログを書くことができません。loky、レース、クラッシュを書くことができなくなり、さらにコードはずっと大きくなってしまいます。

MetaTraderの開発者に質問:Pythonから取引関数の 呼び出しを追加する予定はありますか?

また、Pythonでターミナルからのティックイベントを購読する関数が必要で、ティックが来るとPythonにメッセージが送信されます。

これらの機能はサードパーティーで開発されたものがあるのは知っていますが、箱から出して欲しいです。

また、GoLangでマルチスレッドのコードを書いてみるのもいいでしょう。興味本位ですが、1スレッドではC言語と同等の速度になります。
 

mql5

i7を仮想マシンに 搭載、2コア4スレッドを割り当て


 

どのようなプロセッサをお持ちですか? 私のコードをCで実行して比較してみてください。


i7なら、私のAMDの25倍は速いでしょう。レポートポイントのために、同じ言語でのテストが必要です。

 
Lyuk:
どのようなプロセッサをお持ちですか? 私のコードをCで実行して比較してみてください。

C

i7を仮想マシンに 搭載、2コア4スレッドを割り当て


 
つまり、あなたのMQLはCよりもほんのわずかでも遅いので、jitコンパイラを使った私のPythonコードは彼らのものよりもずっと速くなることがわかったのです。 Pythonは、実スレッドは2つしかありませんが、4スレッドでCPUに1.5秒程度かかると予測しています。
 

パイ

Linuxのi7、4コア、8スレッド


 

素晴らしい結果ですと素早く書きました。pythonが遅いと言っている人は、ここでテスト結果を見るために送られることができます。

プロセッサ上の1つのスレッドでより多くのPythonコードを実行する (parallel = False)


フルテストに


悲しいかな、数字計算機はこの15年で12倍くらいしか上がってないんですよ、最近のCPUは速くなってると思ってました。
 

(並列 = False)


 
Lyuk:

素晴らしい結果ですと素早く書きました。pythonが遅いと言っている人は、ここでテスト結果を見るために送られることができます。

プロセッサ上の1つのスレッドでより多くのPythonコードを実行する (parallel = False)


完全なテストのために。

それらはずっと前に投稿されたものですが、彼らは純粋なパイソンと比較することを好みますが、それは意味がありません。