x64 platformları için yeni MQL5 derleyicisinin test edilmesi - hesaplamaların 2'den 10'a hızlandırılması! - sayfa 14

 

Bugün, süper hız beklentisiyle Uzman Danışmanımdaki hesaplamaların hızlanmasını kontrol etmek istedim (hatta daha güçlü bir yüzde aldım) ve... nedense, Optimizasyonlu Uzman Danışman test cihazında 3 kat daha yavaş çalıştı. Buna sahip değil miydin? Problemi lokalize edip çoğalttıkça kodu yazacağım. Sistem çağrısı yoktur, yalnızca bir dizi diziyle ve temel aritmetik işlemlerle çalışır .

Birkaç istek daha:

1. Komut dosyasını hata ayıklama olmadan düzenleyiciden çalıştırma yeteneği ekleyebilirsiniz, yani. Navigator'dan geliyormuş gibi. Bu tür bir başlangıç, herhangi bir geliştirme ortamında bulunur. Syah'da olduğu gibi Ctrl + F5'i önermeyi düşündüm, ancak bu kombinasyonu zaten aldınız :)

2. Komut dosyasının sonucunu görmek için her seferinde terminale geçmemek için komut dosyasından Windows stdout konsoluna bir çağrı ekleyin. Her ne kadar anladığım kadarıyla WinAPI kullanarak kendiniz demeyi deneyebilirsiniz.

3. Genetik algoritma için en azından bir miktar optimizasyon ayarı ekleyin. Örneğin, kombinasyon sayısı 1e35 olabilir ve 10k geçişler her zaman yeterli değildir (iyileştirici 10k'dan sonra yeni geçişler bile oluşturmaz), 20-30k'nin yeterli olacağını anlıyorsunuz, ancak hiçbirinde ayarlayamazsınız. yol. Öte yandan, bazı parametreleri sabitlediğinizde ve bazılarını daha hassas ayarlama ve dağılımı incelemek için bıraktığınızda... peki, kombinasyon sayısı küçük olduğunda, örneğin 50k olduğunda, GA optimizer yalnızca 2k çalıştırma sunar - ve bu bu belirli görev için de yeterli değil - işlevin bu parametreler üzerindeki davranışını daha iyi incelemek. Onlar. 50k'nin tamamını sıralamak aptalca ve GA yalnızca 2k çalışma üretiyor ve yeterli bir resim vermiyor. Umarım neden bahsettiğimi anlamışsınızdır.

 
Renat Fatkhullin :

İyileştirmeler gerekli olacaktır.

Strateji test cihazında geçmişte hata ayıklamayı test eden var mı?

Bence çoğu kişi bunu test etmekten mutlu olur, ancak karmaşıklık ve gerçek şu ki, genellikle nerede kod yazdıklarını ve ticaret yapacaklarını test ederler. MT5'i sunan çok az komisyoncu var, bu da tüccarlar tarafından tüm yeniliklerin test edilmesini önemli ölçüde yavaşlatacak ve bu kaçınılmaz olarak MT5'in gelişimini yavaşlatacaktır. Bu nedenle, bu sorunu çözecek ve MT5'i kullanma motivasyonunu artıracak önemsiz olmayan bir çözüm aramak mantıklı olabilir.
 
Renat Fatkhullin :

İyileştirmeler gerekli olacaktır.

Strateji test cihazında geçmişte hata ayıklamayı test eden var mı?

Yanlış bir şey yapıyorum. Görselleştirici benim için açılıyor ve her zamanki gibi çalışıyor. Kesme noktası, OnInit() işlevindeki ilk ifadenin tam üzerindedir - ancak çalışmaz.
 
Renat Fatkhullin :

İyileştirmeler gerekli olacaktır.

Strateji test cihazında geçmişte hata ayıklamayı test eden var mı?

Bağlam menüsünden "kullanımları bul" seçeneğini seçebilmek de güzel olurdu.

Biraz konu dışı anlıyorum, ancak gerçekten küresel değişiklikler yazmanıza gerek yok ve geliştiriciler için bu tür çiplere sahip olmak güzel.

Yeni Hareketli Ortalama derleyicisini iyice kontrol ettim, MACD Sample herhangi bir tutarsızlık bulamadı, görünüşe göre bunlar üzerinde iyi test edilmişler. Danışmanlarımda deneyeceğim.

 

Sonuna kadar hata ayıklamadım ve hatanın nasıl ortaya çıktığını (çok farklı bir şekilde) bulamadım, ancak şu ana kadar Optimize=1 ile ilgili aşağıdaki sorunları buldum. Hemen söylemeliyim ki Expert Advisor'ım yaklaşık 100 girdi parametresine sahip ve dizilerle çok çalışıyor. Artı, ticaret yapmıyor, sadece hesaplamalar yapıyor.

Prosedürümü anlatacağım:

1. Terminali başlatıyorum, test cihazında "Optimizasyon = Devre Dışı" seçeneğini seçiyorum ve referans giriş parametre setini veriyorum. Test cihazı doğru sonucu verir.

2. "Optimizasyon = Hızlı (genetik algoritma)" seçeneğini seçiyorum, başlatıyorum - test cihazı ilk adımı bile oluşturmuyor. Aracılar (işlemciler) yanıt vermiyor. İlk başta, hatalı parametre setlerinde bazı hesaplama hatalarının oluşabileceğini ve test cihazının basitçe öldüğünü düşündüm.

3. Yine "Optimization = Disabled" seçip tekrar referans setini veriyorum. Artık test cihazı hiçbir sonuç vermiyor.

4. Düzenleyicide EA kodunu açın, optimize edilmemiş kodu oluşturmak için F5'e basın. Test cihazında tekrar referans setinde çalıştırıyorum - işte, bir sonuç var. Genel olarak, optimizasyon nedeniyle içindeki bir şey hatalı.

EA'nın giriş parametrelerini dosyaya kaydeden bir işlev ekledim. Bu nedenle, 2. adımda (optimizasyon başlatılır ve test adımları neredeyse üretilmez), bazı parametreler için, parametre değişmediğinden veya değer dahil edilmediğinden, hiç sağlanmayan rastgele değerler atlanır. ayarlanan aralıkta. Örneğin, 80'e ayarlanmış bir parametrem vardı ve değişmezdi. Günlükte 0.01355835795402527 (?) değeri vardı. Diğeri, 4.940656458412465e-324 günlüğünde 0'a ayarlanmıştır; Her iki parametre de çiftti. Ama sonra int için de tamamen uygunsuz değerlerin kaydığını keşfettim.

İkincisi, "ekstra" EA kodunu, yalnızca bu tür kodu bırakmak için kestim, bu da bir hataya neden oluyor. Hala oldukça fazla çıktı. Ayrıca, kayıt işlevi TÜM parametrelerin değerini görüntüledi. Ancak, parametrelerin çoğunu kaldırdığımda (ve 64 veya 80'den az vardı), test cihazı ölmedi. Aynı zamanda, hata ile günlük tutma işlevim arasında garip bir bağlantı da keşfedildi. Yorum yapıldığında (yani tüm parametreler kodda KULLANILMAZ), test cihazı ölür. Günlüğe girdiğinde, test cihazı ölür. Çok ilginç.

Ve üçüncü. Hesaplamaların paralelleştirilmesinin, fırlatmaların genel hızında doğrusal bir artışa yol açmadığını fark ettim. Örneğin, dosyaları ekliyorum: aynı koda sahip bir komut dosyası ve bir uzman. Bu, uzmanımdan kesilen gerçek bir kod parçası, sadece diziler yeniden adlandırıldı. Optimize=1 ile komut dosyası benim için 156 ms'de çalışır, yani. belki saniyede 6 çalışır. (Optimize olmadan 3 kat daha uzun). 8 iş parçacığım var, yani Saniyede 48 çalışma teorik olarak mümkündür. EA'yı test cihazında çalıştırırken (Yavaş optimizasyon yapıyoruz, kukla parametreyi açıyoruz, örneğin 2000 çalıştırma için), saniyede sadece 4 çalıştırmadan biraz fazla aldım, yani. tek çekirdekten bile daha yavaş! Görev yöneticisi dürüstçe 8 işlem asmasına rağmen. Neden öyle? Birden çok işlem tarafından bellek erişimini engelleme? Uzun dizi başlatma? (Doğru, diziler küçüktür).

Test cihazında tek bir çalıştırma başlatıyoruz, günlükte Yazdır: 156 ms çıktısı görünüyor. Onlar. bir uzmanla, her şey yolunda.

Bu arada, MQL'de hiç işaretçiler olacak mı? :) Ve sonra kopya dizileri yapmak zorunda kaldım.

Dosyalar:
 
xfo :

nedense optimize edilmiş EA, test cihazında 3 kat daha yavaş çalıştı.

Şimdi neden yavaşladığını anlıyorum - yalnızca bir aracı (rastgele) çalışıyor, diğerleri - başarısız oluyor ve bu nedenle sürekli olarak birkaç saniyede bir deneme. Test kullanıcısı günlüğünden hiçbir şey net değil. Anladığım kadarıyla, en son aracı başarısız olursa, daha önce yazdığım şey gerçekleşir: test adımları hiç oluşturulmaz.

Yapı 1117, yukarıda açıklanan tüm sorunları çözmedi (yapı dizisi dahil).

 

Bugün 1117'ye güncellendi, ancak geçmiş verilerde hata ayıklama hala çalışmıyor.

ExpertMACD.mt5 alıyorum, Init işlevinin girişinde bir kesme noktası ayarlıyorum, geçmiş verilerde hata ayıklamaya başlıyorum (düğmeye basıyorum), editör penceresi gizleniyor ve strateji test cihazı ayarları açılıyor. Zaman periyodunu (2015 için, günler, tüm tikler) ayarladım, görselleştirme - bir onay işareti var, Başlat düğmesine basıyorum - ve görselleştirme başlıyor. Kesme noktası işe yaramadı.

Neyi yanlış yapıyorum ?

 
George Merts :

Bugün 1117'ye güncellendi, ancak geçmiş verilerde hata ayıklama hala çalışmıyor.

ExpertMACD'yi alıyorum. mt5 , Init işlevine girişte bir kesme noktası belirledim, geçmiş verilerde hata ayıklamaya başlıyorum (düğmeye basıyorum), editör penceresi kapatılıyor, strateji test cihazı ayarları açılıyor. Zaman periyodunu (2015 için, günler, tüm tikler) ayarladım, görselleştirme - bir onay işareti var, Başlat düğmesine basıyorum - ve görselleştirme başlıyor. Kesme noktası işe yaramadı.

Neyi yanlış yapıyorum ?

MetaQuotes-Demo'da bir demo hesabı açmanız gerekiyor, ardından

USDRUB_TOM sembolü, moex demo hesabındaki MACD Sample.mq5 üzerinde çalışmıyor (önce çalışmaya başlıyor, ardından birkaç adım sonra duruyor) ve basit bir geriye dönük test de çalışmıyor.

Ve moex demo hesabında Hareketli Ortalama.mq5, USDRUB_TOM sembolü iyi çalışıyor (ve basit bir geriye dönük test).

Demoforex demo hesabında, EURUSD sembolü iyi çalışıyor (ve basit bir geriye dönük test de) MACD Sample.mq5 ve Hareketli Ortalama.mq5

Demoforex demo hesabındaki MACD Sample.mq5 EURUSD sembolünde kaydedilen hata ayıklama videosu. (günışığı da iyi çalışır)

Dosyalar:
capture-mt5-1.zip  5457 kb
 
xfo :

Sonuna kadar hata ayıklamadım ve hatanın nasıl ortaya çıktığını (çok farklı bir şekilde) bulamadım, ancak şu ana kadar Optimize=1 ile ilgili aşağıdaki sorunları buldum. Hemen söylemeliyim ki Expert Advisor'ım yaklaşık 100 giriş parametresine sahip ve dizilerle çok çalışıyor. Artı, ticaret yapmıyor, sadece hesaplamalar yapıyor.

................................

................................

Bu arada, MQL'de hiç işaretçiler olacak mı? :) Ve sonra kopya dizileri yapmak zorunda kaldım.

İyi günler, daha fazla ayrıntı istiyorum.

1. Uzman Danışmanınız hesaplamalar yapar ancak ticaret yapmaz. Uzman ne ve nasıl çıktı verir? Strateji Test Cihazında kullanıma sunulduğunda bir Uzman Danışmandan ne bekliyorsunuz? Optimizasyonla test yaparken hangi verileri almayı umuyorsunuz? Tarafımızdan başvurduğunuz Expert Advisor'ın testlerinde herhangi bir hata ortaya çıkmamıştır. Anlattığınız hatalar onun için geçerli mi?

2. Lütfen adım adım eylemlerinizi ve beklentilerinizi kullanılan kodun uygulamasıyla açıklayın.

3. Optimizasyonlu ve optimizasyonsuz test günlükleri ekleyebilir misiniz?

4. Terminal sürümünüz, işletim sisteminiz?

 

Eduard Vavrin , ekli dosyada açıklanan hatalar için geçerli değildir. Hataya yol açan kodu hazırlayıp size göndermeye çalışayım. Sadece zaman alacak ve şu ana kadar bu kod orijinal Expert Advisor'dan çok fazla şey içeriyor.

Eklediğim dosya ile ilgili olarak: Ekli Expert Advisor'ın tek bir başlatmasının 156 ms sürdüğü söylendi, yani. 1/6 saniye. 8 iş parçacığında saniyede 48 başlatma alacağımızı varsayabiliriz. Gerçekte, 8 iş parçacığında birden çok çalıştırmayla (bunun için kukla bir parametre vardır, Yavaş optimizasyon modu), hız saniyede yalnızca 4-5 çalıştırmadır . Soru şuydu: hız neden düşüyor? Aracılar sekmesinde, tüm iş parçacıklarının çalıştığını ve her iş parçacığının 1 saniyeden fazla çalıştığını görüyorum. Expert Advisor'ın rand() tarafından döndürülmesi, ne işe yaradığını görmek için sadece gösteri amaçlıdır.

Neden: