Ticarette makine öğrenimi: teori, pratik, ticaret ve daha fazlası - sayfa 199
Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
O zaman, literalizm sırasına göre, düzgün bir sürekli dağılım için, uç noktadaki yoğunluk pozitif ve integral sıfırdır: https://en.wikipedia.org/wiki/Uniform_distribution_(continuous)
Makaledeki orijinal R hata ifadesine geri dönelim.
Görüşümüz geçerliliğini koruyor - hatalar var ve bunlar uygulamadaki ihmalden kaynaklanıyor.
Mesele şu ki, @Quantum en saf haliyle MQL5'te bir analog R matematik kütüphanesinin uygulanması ve tam olarak doğrulanması ile ilgilenmektedir.
Bu teorik bir mantık değil. Ve kitaplığın doğruluğuna güven veren birim testleri yazarken bulmak için derinlere iner.
R'de her şeyin doğru olduğunu önceden varsaymak gerekli değildir. Aksine, fonksiyonların C++ uygulaması olsa bile, her şeyin oldukça ilkel olarak uygulandığını söyleyebilirim. Ve hız olarak derleyicimizdeki kaynak kodlarda bulunan MQL5 kitaplığının ortalama 3 kat nasıl kazandığını görebilirsiniz.
Her şeyi tekrar kontrol etme zahmetine girdik ve bariz hatalar bulduk. Bu hatalar onaylandı:
Yayın tarihlerine bakın lütfen. Bilim adamlarının tavsiyesi ile çalışmaların nasıl gittiğini görün.
Ayrıca @Quantum'u bir bilim adamı olarak görmemek hata olur.
Sevgili Renat!
Son gönderilerinize dayanarak, benim için temel nitelikte olan aşağıdaki sorularım var:
1. Makalenin yayın tarihine bakılırsa, bu 2003'tür. Diğer yazılım sistemlerinde olduğu gibi R'de de hatalar olması ve sürümleri yayınlarken her zaman bir düzeltme listesi yayınlanması oldukça doğaldır. Aynı zamanda, R her zaman, R'nin avantajının, son derece fazla sayıda kullanıcı nedeniyle düşük düzeyde hata olduğunu vurgulamıştır. Ve burada, 2003'ten beri, yayın düzeyinde algoritmadaki bir hata tespit edildi ve düzeltilmedi. Bu benim için net değil.
Bu konuda R'de bir talepte bulundunuz mu?
2. R ve MQL5'in performansını karşılaştıran kodu görmek istiyorum.
Şimdiden teşekkürler.
Sevgili Renat!
Son gönderilerinize dayanarak, benim için temel nitelikte olan aşağıdaki sorularım var:
1. Makalenin yayın tarihine bakılırsa, bu 2003'tür. Diğer yazılım sistemlerinde olduğu gibi R'de de hatalar olması ve sürümleri yayınlarken her zaman bir düzeltme listesi yayınlanması oldukça doğaldır. Aynı zamanda, R her zaman, R'nin avantajının, son derece fazla sayıda kullanıcı nedeniyle düşük düzeyde hata olduğunu vurgulamıştır. Ve burada, 2003'ten beri, yayın düzeyinde algoritmadaki bir hata tespit edildi ve düzeltilmedi. Bu benim için net değil.
Bu temel ve kesinlikle anlaşılabilir.
Herkes hata yapar - geliştiricilerin doğası budur. Tonlarca hata yaparız ve cesaretimizi kaybetmeyiz.
R'deki bu hata, basitçe dikkatsizdir ve diğerlerini bozan temel bir işleve güvenir. Tamir edecekler.
Bu konuda R'de bir talepte bulundunuz mu?
Testler yaptık, kütüphaneyi yazarken her şeyi ayrıntılı olarak çözdük, MQL5 - Wolfram Alpha - R'nin sonuçlarını sürekli karşılaştırdık, sonuçlarımızı gösterdik ve herkese açık olarak cevaplamaya hazırız. Elbette, matematiksel paketimize (tümü kaynak kodunda olan) kontrol ünitesi testleri ve bir kıyaslama ile üç büyük komut dosyası ekledik.
@Quantum'un R'de bir hata raporu sunacağına eminim. Güncellenen makale birkaç saat önce yayınlandı.
2. R ve MQL5'in performansını karşılaştıran kodu görmek istiyorum.
MQL5 kıyaslama kodu \Scripts\UnitTests\Stat\TestStatBenchmark.mq5 içinde bulunur ve R kodu, MQL5'teki İstatistiksel dağılımlar makalesinin sonunda verilir - R'den en iyi şekilde alınır ve "Ek. İstatistiksel fonksiyonların hesaplama süresinin ölçülmesinin sonuçları".
MetaQuotes-Demo sunucusuna bağlanarak MetaTrader 5 build 1467'ye yükselttiğinizden emin olun, lütfen. Yeni kitaplığı ve tüm test komut dosyalarını bu beta sürümünde ekledik.
Bu temel ve kesinlikle anlaşılabilir.
Herkes hata yapar - geliştiricilerin doğası budur. Tonlarca hata yaparız ve cesaretimizi kaybetmeyiz.
R'deki bu hata, basitçe dikkatsiz ve diğerlerini bozan temel bir işleve güveniyor. Tamir edecekler.
Testler yaptık, kütüphaneyi yazarken her şeyi ayrıntılı olarak çözdük, MQL5 - Wolfram Alpha - R'nin sonuçlarını sürekli karşılaştırdık, sonuçlarımızı gösterdik ve herkese açık olarak cevaplamaya hazırız. Elbette, matematiksel paketimize (tümü kaynak kodunda olan) kontrol ünitesi testleri ve bir kıyaslama ile üç büyük komut dosyası ekledik.
@Quantum'un R'de bir hata raporu sunacağına eminim. Güncellenen makale birkaç saat önce yayınlandı.
MQL5 kıyaslama kodu \Scripts\UnitTests\Stat\TestStatBenchmark.mq5 içinde bulunur ve R kodu, MQL5'teki İstatistiksel dağılımlar makalesinin sonunda verilir - R'den en iyi şekilde alınır ve "Ek. İstatistiksel fonksiyonların hesaplama süresinin ölçülmesinin sonuçları".
MetaQuotes-Demo sunucusuna bağlanarak MetaTrader 5 build 1467'ye yükselttiğinizden emin olun, lütfen. Yeni kitaplığı ve tüm test komut dosyalarını bu beta sürümünde ekledik.
Performans karşılaştırması hakkında bir fikir oluşturamama rağmen. Ve bu temel niteliktedir.
Gerçek şu ki, R ideal bir geliştirme ortamıdır - tek kelimeyle bir tercüman. Ancak geliştirme sırasında var olan kod, çalışan koddan çok farklıdır - birçok kez satır sayısında. Ve işte çalışma kodu, çok kısa ve aynı zamanda içerikte çok geniş. Bu nedenle, hesaplama açısından yoğun algoritmalar, matris işlemleri kullanan, tüm çekirdekleri yükleyen rastgele orman gibi ticaret kararları verirken anlamlı olan paketlerdeki herhangi bir işlevi karşılaştırmak gerekir....
not.
R'nin eski bir sürümünü kullanıyorsunuz. MRAN - Microsofn R Open web sitesinden R sürüm 3.3.1'i (2016-06-21) almanız gerekiyor. Bu durumda, MKL'yi kurduğunuzdan emin olun. Microsoft, R'nin belirtilen sürümünde, bazı paketlerin ve işlevlerin yürütme hızını 50 (!) Kere kadar artırabildiğini iddia etti.
Performans karşılaştırması hakkında bir fikir oluşturamama rağmen. Ve bu temel niteliktedir.
Gerçek şu ki, R ideal bir geliştirme ortamıdır - tek kelimeyle bir tercüman. Ancak geliştirme sırasında var olan kod, çalışan koddan çok farklıdır - birçok kez satır sayısında. Ve işte çalışma kodu, çok kısa ve aynı zamanda içerikte çok geniş. Bu nedenle, hesaplama açısından yoğun algoritmalar, matris işlemleri kullanan, tüm çekirdekleri yükleyen rastgele orman gibi ticaret kararları verirken anlamlı olan paketlerdeki herhangi bir işlevi karşılaştırmak gerekir....
R yeteneklerini düzenli olarak MQL5'e çeviriyoruz. Ve böylece işlev çağrılarının özü çok yakındır.
İşte makaleden bir eşleşme örneği:
üniforma
MQL5'te yazmaya harcanan zaman ve boyut açısından R'den gelen kodu yakından aynı hale getirmeye çalışıyoruz.
Yarın, grafik kitaplığını beta sürümünde yayınlayacağız ve görüntülerle birlikte R ve MQL5'te eşit boyutta kod parçalarını göstereceğiz.
Normal R sürümünün aniden hızlanabileceğinden şüpheliyim - oradaki kod pek değişmiyor. Bazı fonksiyonların, özellikle matris fonksiyonlarının hızlandırılabileceği açıktır. Ayrıca, açıklamanız, R'deki kodun performans açısından oldukça dikkatsizce yazıldığı fikrimi doğrular.
Şimdi, makaleyi okursanız, temel işlevlerde bile, herhangi bir çoklu okuma ve MKL olmadan 46 kata kadar bir ivme elde ettiğimizi görürsünüz:
Hesaplamalar Intel Core i7-4790, CPU 3.6 Ghz, 16 GB RAM, Windows 10 x64 üzerinde yapılmıştır. Mikrosaniye cinsinden hesaplama süresi ölçüm sonuçları
hesaplama PDF'si (µs)
hesaplama PDF'si (µs)
R/MQL5
CDF hesaplaması (µs)
CDF hesaplaması (µs)
R/MQL5
nicelikler (µs)
nicelikler (µs)
R/MQL5
rastgele sayılar (µs)
rastgele sayılar (µs)
R/MQL5
Ama tabi ki belirtilen versiyonu kontrol edeceğiz. Hem hız hem de performans için.
"Yanlış cevap" konusunda yanılıyorsunuz
...
Örneğin, MQL belgeleri arksinüs hakkında bir örnek verir ve arksin(2) = sonsuz olduğunu belirtir. Bu doğru değil. Tam olarak: arcsin(2) = NaN, yani. sayısal bir değer yoktur, arcsine(1) = Inf, ancak ticaret sırasında teklifleri atlama = NA, yani. olmalı (veya hafta sonları olabilir), ama değiller.
Bunu cevapların yanlışlığı hakkında biraz ironi ile yazdım. Bir smiley eklemek gerekliydi... Genel olarak, bunun her iki durumda da bir hata olmadığını ekledim, çünkü derleyicilerin ve yorumlayıcıların tanımlanamayan fonksiyon alanlarındaki davranışları tamamen sistem mimarisine ve geliştiricilere bağlıdır. Bu durumda, elbette, nan'ı iade etmek daha iyidir.
Genel olarak, tanımlı olmadığı parametrelerle bir fonksiyon çağırmanın ve ardından sonuçları başka bir kütüphane ile karşılaştırmanın gerekli olmadığından bahsediyorum, aksi takdirde bu şekilde yüzlerce "hata" bulabilirsiniz.
Bu arada arksinüs ile ilginç bir örnek.
mql-
MathArcsin(1) = MathArcsin(2) = -nan(ind)
wolfram-
Arcsin(1) = Pi/2
Arcsin(2) = karmaşık bir şey. Gerçek bir çözüm yok.
R-
asin(1) = Pi/2
asin(2) = nan (gerçek sayılar için cevap)
asin(2+0i) = wolframdaki gibi karmaşık bir şey
wiki, asin(1)'in hala tanımlı olduğunu söylüyor ( https://en.wikipedia.org/wiki/Inverse_trigonometric_functions ), servis masasına bir hata raporu yazabilirsiniz.
ama asin(2) zaten tanımsız bir alandır, bununla her şey normal ve her yerde aynı.
Ve bir kez daha son gönderi hakkında - basit matematikte 0'a bölmek imkansızdır, bu nedenle mql betiğinin bir hatayla çökmesi mantıklıdır, burada hata yoktur. Ancak 16 ondalık basamağa kadar sonuçların doğruluğunda böyle bir titizliği görmek çok garip ve nedense sıfıra bölerken nan veya Inf döndürmek imkansız. IMHO, Inf'i döndürmeniz ve geliştiricilere komut dosyalarının ani çökmeleriyle eziyet etmemeniz gerekir.
Gerçekten sıfıra bölme üzerindeki denetimi devre dışı bırakmak için metaeditor.ini dosyasının [Uzmanlar] bölümündeki FpNoZeroCheckOnDivision=1 parametresini kullanın.
Bu parametre verildiğinde, aşağıdaki kod inf değerini döndürür.
Doğal olarak, bu parametrenin varlığı, 0.0 sabitine bölünürken derleme hatasından kurtulmaz.
'0.0' - division by zero in the constant expression s1.mq5 8 12
Renat, birkaç fonksiyonun R'den mql'ye transferi, bir süre önce bahsettiğin sürpriz miydi gerçekten?
Numara.
Sürpriz mantıklı değil, her şeyi MQL5 ve MetaTrader 5 çerçevesinde yapacağız.
Bu parametre verildiğinde, aşağıdaki kod inf değerini döndürür.