Ticarette makine öğrenimi: teori, pratik, ticaret ve daha fazlası - sayfa 2333

 


....

 

Genetik programlamanın olasılıkları hakkında kolay, güzel makale

https://blog.ephorie.de/symbolic-regression-genetic-programming-or-if-kepler-had-r

 

Herkesi büyütün! Python için mql karalamalarımı kontrol etmenin (kendim için) harika bir yolunu buldum ve ayrıca dll kullanarak içindeki bazı işlevlerin çalışmasını önemli ölçüde hızlandırdım.

Python'a aktarmak istediğim orijinal mql5 işlevi burada. Düzleştirilmiş modeline göre fiyatın en düşük ve en yüksek noktalarını arar.

 void get_loc_extremum( double &x[], double &x2[], double &loc_max[], double &loc_min[], bool real_price)
  {
   int N = ArraySize (x);
   for ( int i= 1 ; i<N- 1 ; i++)
     {
       if (x[i- 1 ]<x[i]&& x[i]>x[i+ 1 ])
        {
         ArrayResize (loc_max, ArraySize (loc_max)+ 1 );
         if (real_price)
            loc_max[ ArraySize (loc_max)- 1 ]=x2[i];
         else
            loc_max[ ArraySize (loc_max)- 1 ]=x[i];
        }

       if (x[i- 1 ]>x[i]&& x[i]<x[i+ 1 ])
        {

         ArrayResize (loc_min, ArraySize (loc_min)+ 1 );
         if (real_price)
            loc_min[ ArraySize (loc_min)- 1 ]=x2[i];
         else
            loc_min[ ArraySize (loc_min)- 1 ]=x[i];
        }

     }

Bu birkaç adımda yapılır.

1. Nerede, görsel stüdyoda veya kod bloğunda, dll'mizi derliyoruz. Orada her şey basit, .cpp dosyasında fonksiyonumuzu gördük, .h dosyasında ilan ediyoruz. Benim için çalışan örnek gönderiye eklenmiştir. Klasörde kod blokları proje dosyası, ana .cpp, ana .h dosyaları, \bin\Debug klasöründe my_lib.dll dosyası bulunur. Kısacası, işte c++ 'daki fonksiyon başlığı :

 void DLL_EXPORT GetLocalMaxMin( double * x_sm[], double * x_rl[], double * loc_max[], double * loc_min[], int N, bool real_price)
{
...
}

2 Python'da aşağıdakileri yapın:

from ctypes import *

my_dll = cdll.LoadLibrary( "my_dll/my_lib.dll" ) 					#загружаем свою DLL
my_dll.GetLocalMaxMin.argtypes = [POINTER(c_double), 
        POINTER(c_double), POINTER(c_double), POINTER(c_double), c_int, c_bool] #определяем типы входных аргументов функции через атрибуты ctypes
my_dll.GetLocalMaxMin.restype = None                                             #определяем типы выходных данных 

...
# y - список цен
# y_sm - список сглаженных цен
# len(y)=len(y_sm) - длина списков одинаковая

x_sm = (c_double * len(y))(*y_sm)    				  #создаем указатель на массив x_sm размером len(y_sm) предаем туда указатель на массив y_sm
x_rl = (c_double * len(y))(*y)       			       	  #создаем указатель на массив x_rl размером len(y) предаем туда указатель на массив y
loc_max = (c_double * len(y))()      				  #создаем указатель на массив loc_max размером len(y) заполный 0.0 
loc_min = (c_double * len(y))()     				   #создаем указатель на массив loc_min размером len(y) заполный 0.0 
my_dll.GetLocalMaxMin(x_sm, x_rl, loc_max, loc_min, len(y), True) #вызываем функцию и передаем туда все что насоздавали

print(list(loc_max),list(loc_min)) #смотрим что получилось

Bu nihai gerçek değil, eklemeler veya başka seçenekler var, yazın.

Dosyalar:
my_lib.zip  36 kb
 
esenlik :

Herkesi büyütün! Python için mql karalamalarımı kontrol etmenin (kendim için) harika bir yolunu buldum ve ayrıca dll kullanarak içindeki bazı işlevlerin çalışmasını önemli ölçüde hızlandırdım.

Python'a aktarmak istediğim orijinal mql5 işlevi burada. Burada, fiyatın en düşük ve en yüksek noktaları, düzleştirilmiş modeliyle basitçe aranır.

Bu birkaç adımda yapılır.

1. Nerede, görsel stüdyoda veya kod bloğunda, dll'mizi derliyoruz. Orada her şey basit, .cpp dosyasında fonksiyonumuzu gördük, .h dosyasında ilan ediyoruz. Benim için çalışan örnek gönderiye eklenmiştir. Klasörde kod blokları proje dosyası, ana .cpp, ana .h dosyaları, \bin\Debug klasöründe my_lib.dll dosyası bulunur. Kısacası, işte c++ 'daki fonksiyon başlığı :

2 Python'da aşağıdakileri yapın:

Bu nihai gerçek değil, eklemeler veya başka seçenekler var, yazın.

Ne elde etmek istiyorsun?
Hız varsa, kullanmayın
 ArrayResize (loc_max, ArraySize (loc_max)+ 1 );

döngü içinde ve işlevi çağırmadan 1 kez önce, C++ ve python'da yaptığınız gibi istediğiniz boyutu ayarlayın veya 3. parametre ile ayırın

 ArrayResize (loc_max, ArraySize (loc_max)+ 1, max_size );

Artık ArrayResize'a yapılan her çağrı bellekte yeni bir blok oluşturur, eskisini ona kopyalar ve eskisini siler. Çok yavaş.

Ve

 ArraySize (loc_max)

Her seferinde yapamazsınız, ancak bir değişkende saklayabilirsiniz.


Deneyin, basit bir işlevi 3 farklı programlama diline dağıtmanız gerekmeyebilir. Geliştiriciler, MQL'nin hız açısından C++ ile karşılaştırılabilir olduğunu ve bazı durumlarda daha da hızlı olduğunu söylüyor.

Ve DLL, MQL'den hemen çağrılabilirse neden Python?

Yoksa başka bir amacınız mı var?
 
elibrarius :
Ne elde etmek istiyorsun?
Hız varsa, kullanmayın

döngü içinde ve işlevi çağırmadan 1 kez önce, C++ ve python'da yaptığınız gibi istediğiniz boyutu ayarlayın veya 3. parametre ile ayırın

Artık ArrayResize'a yapılan her çağrı bellekte yeni bir blok oluşturur, eskisini ona kopyalar ve eskisini siler. Çok yavaş.

Ve

Her seferinde yapamazsınız, ancak bir değişkende saklayabilirsiniz.


Deneyin, basit bir işlevi 3 farklı programlama diline dağıtmanız gerekmeyebilir. Geliştiriciler, MQL'nin hız açısından C++ ile karşılaştırılabilir olduğunu ve bazı durumlarda daha da hızlı olduğunu söylüyor.

Ve DLL, MQL'den hemen çağrılabilirse neden Python?

Yoksa başka bir amacınız mı var?

Mesajdaki ekstrema arama fonksiyonu, mesajdaki prensibi göstermek için basit bir örnek olarak verilmiştir.

Amaç, python'da özellikler ve hedef arasındaki bağımlılıkları aramanın uygun olması, modelleri seçmesi ve MQL'nin iyi bir test cihazına sahip olması, kendinizi aldatmazsanız, araştırmanızın net bir değerlendirmesini alabileceğiniz gerçeğinden oluşur. .

Python ile çalışmak benim için uygun, ancak hala yeni öğreniyorum ve döngülerin olduğu mql5'te vektör hesaplamalı bir lib kullanarak python'da herhangi bir fonksiyon yazamıyorum. Ve onlarsız kod yazmak zaman kaybıdır çünkü python çok yavaştır. Her çubukta bazı işlevler çağrılabilir ve bu da aramayı çok daha zorlaştırır. Algib'i mümkün olan her yerde kullandım. hem python hem de mql5 için çözümleri var. Ama iş, sanrılı fantezimin uçuşuna gelince, sorunlar çıkıyor.

üzerinde kod   mql5 kolayca dönüştürülebilir   C++ ve dll olarak derleyin . Sonuç olarak hem test cihazında hem de python betiğinde aynı işlevi kullanıyorum.

 
esenlik :

Mesajdaki ekstrema arama fonksiyonu, mesajdaki prensibi göstermek için basit bir örnek olarak verilmiştir.

Amaç, python'da özellikler ve hedef arasındaki bağımlılıkları aramanın uygun olması, modelleri seçmesi ve MQL'nin iyi bir test cihazına sahip olması, kendinizi aldatmazsanız, araştırmanızın net bir değerlendirmesini alabileceğiniz gerçeğinden oluşur. .


Python'da bağımlılıklar buldunuz, aldınız, eğittiniz ve modeli test ettiniz. Ve test cihazında nasıl test edersiniz? Python, test cihazı veya MKL5 ile arkadaş değil.

 
TS için ise ortalama pozisyon tutma süresi 10 dakikadır. Ve mevcut konum 10 saat donduruldu, ardından sonucu - belki (tamamen sistemik değil)?
 
fxsaber :
TS için ise ortalama pozisyon tutma süresi 10 dakikadır. Ve mevcut konum 10 saat donduruldu, ardından sonucu - belki (tamamen sistemik değil)?

TS'nin mantığının/kurallarının nasıl yazıldığına bağlıdır. Belki de bu, alınan verilerden TS sonucunun mantığıyla tanımlanmayan bir olasılıktır. Mantık kesinlikle 10 saat boyunca çalıştıysa, bu sadece nadir bir durumdur.

 
Valeriy Yastremskiy :

Mantık kesinlikle 10 saat boyunca çalıştıysa, bu sadece nadir bir durumdur.

Mantığın çalışıyor olması sonucu sistematik hale getirmez.

 
fxsaber :

Mantığın çalışıyor olması sonucu sistematik hale getirmez.

Soru, neyin uygulanacağını ve tutarlılığı tanımlamaz. TS için ise, o zaman her şey TS'ye bağlıdır, eğer dış koşullara ise, o zaman nadir durumlar başlangıçta sistemik değildir. Ve kuralın istisnaları olabilir. Eurodollar 14 yıl Mayıs'tan 15 Mart'a kadar. Sistem durumu değil.