MetaTrader 5 Python Kullanıcı Grubu - Metatrader'da Python nasıl kullanılır - sayfa 22

 
Vladimir Karputov :
Şimdi bu konuya taşındı.
teşekkürler
 
Alexey Volchanskiy :

Python da çalışıyorum, ancak yalnızca sinir ağları, makine öğrenimi ve diğer modaya uygun ürünler ve paketler konusunda uzmanlaşmak çerçevesinde. MQL5'ten 200 kat daha yavaş olan bu süper fren üzerinde çalışmayı mümkün görmüyorum, basit testlerin sonuçlarını verdim.

Ve hala MQL5'ten Python modüllerini bağlamanın ve modülden fonksiyonları çağırmanın mümkün olup olmadığını anlamıyorum? Yoksa bağlantı sadece Python->MQL5 mi?

Kusura bakmayın ama nasıl pişireceğinizi bilmiyorsunuz. Örneğiniz değiştirildi:

Python'da:

#!/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 ile karşılaştırmak için:
 #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 ;
}


Bunların hepsi eski hesap makinesi AMD Athlon(tm) 64 X2 Çift Çekirdekli İşlemci 4200+ üzerinde, sanırım MQL5'te yaklaşık 12 saniye olacak.

(Linux'ta MQL kodunu nasıl çalıştıracağımı bilmiyorum.)

Yani jit derleyicisi ile Python 2 kez C (mql) yaptı!Modern bir 8 çekirdekli işlemcide çalıştırırsanız, çok iş parçacıklı olduğu için 8 kez yapacaktır.

Ancak tek bir iş parçacığında bile Python sonucu 9.6 saniyedir - bu hala daha hızlıdır. Ayrıca CUDA ile bir ekran kartında da çalıştırabilirsiniz.

Örneğin, C veya MQL'de çok iş parçacıklı bir analog yazamayacağım - kilitler, yarışlar ve çökmeler olacak, ayrıca çok daha fazla kod olacak.

MetaTrader geliştiricileri için soru: Python'dan çağrı ticaret işlevleri eklemeyi planlıyor musunuz?

Ayrıca, python'daki terminaldeki olayları işaretlemek için abone olma işlevini de istiyorum, böylece bir onay geldiğinde, python'a bir mesaj gönderilir.

Bu işlevlerin üçüncü taraf geliştirmeleri olduğunu biliyorum, ancak kutudan çıkarmasını istiyorum.

İlgi uğruna, GoLang'da çok iş parçacıklı kod yazmayı da deneyebilirsiniz, bir iş parçacığında C ile karşılaştırılabilir.
 

mql5

sanal makinede i7, 2 çekirdek, 4 iş parçacığı ayrılmış


 

Hangi işlemciye sahipsiniz? karşılaştıracak bir şey olması için C kodumu çalıştırın.


Eh, eğer i7 ise, muhtemelen AMD'mden 25 kat daha hızlıdır. Bir rapor noktası için aynı dillerde bir teste ihtiyacımız var.

 
Lyuk :
Hangi işlemciye sahipsiniz? karşılaştıracak bir şey olması için C kodumu çalıştırın.

Xi

sanal makinede i7 , 2 çekirdek, 4 iş parçacığı ayrılmış


 
Yani, MQL'nizin C'den biraz daha yavaş olduğu ortaya çıktı, bu yüzden jit derleyicili python kodum onlardan çok daha hızlı olacak. İşlemcinizde 4 iş parçacığında 1,5 saniye civarında bir python tahmin ediyorum, ancak sadece 2 gerçek var.
 

Py

Linux'ta i7 , 4 çekirdek, 8 iş parçacığı


 

Mükemmel sonuç! Ve hızlı bir şekilde yazılmıştır. Python yavaştır diyenler buradan test sonuçlarını görmek için gönderilebilir.

İşlemcinizdeki bir iş parçacığında daha fazla Python kodu çalıştırın (paralel = Yanlış)


tam bir test için.


Tek üzücü olan şey, son 15 yılda sayı kırıcıların sadece 12 kat hızlanmasıydı, modern işlemcilerin daha hızlı olduğunu düşündüm.
 

(paralel=Yanlış)


 
Lyuk :

Mükemmel sonuç! Ve hızlı bir şekilde yazılmıştır. Python yavaştır diyenler buradan test sonuçlarını görmek için gönderilebilir.

İşlemcinizdeki bir iş parçacığında daha fazla Python kodu çalıştırın (paralel = Yanlış)


tam bir test için.

evet uzun süredir gönderiliyorlar ama saf python ile karşılaştırmayı tercih ediyorlar ki bu anlamsız) saf başka amaçlara yöneliktir