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

 
Alexey Burnakov :

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.

 
Renat Fatkhullin'in fotoğrafı.

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.

 
San Sanych Fomenko :

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.

 
Renat Fatkhullin'in fotoğrafı.

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.

Microsoft R Open: The Enhanced R Distribution · MRAN
  • Microsoft Corporation
  • mran.revolutionanalytics.com
Microsoft R Open, formerly known as Revolution R Open (RRO), is the enhanced distribution of R from Microsoft Corporation. It is a complete open source platform for statistical analysis and data science. The current version, Microsoft R Open 3.3.1, is based on (and 100% compatible with) R-3.3.1, the most widely used statistics software in the...
 
San Sanych Fomenko :

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:

Numara.
Dağıtım
MQL5 Fonksiyonları
R dil işlevleri
1 Normal
 MathProbabilityDensityNormal
MathCumulativeDistributionNormal
MathQuantileNormal
MathRandomNormal
dnorm
pnorm
qnorm
rnorm
2 Beta
 MathProbabilityDensityBeta
MathCumulativeDistributionBeta
MathQuantileBeta
MathRandomBeta
dbeta
pbeta
qbeta
rbeta
3 iki terimli
 MathProbabilityDensityBinomial
MathCumulativeDistributionBinomial
MathQuantileBinomial
MathRandomBinomial
dbinom
pbinom
qbinom
rbinom
4
Cauchy
 MathProbabilityDensityCauchy
MathCumulativeDistributionCauchy
MathQuantileCauchy
MathRandomCauchy
dcauchy
pcauchy
qcauchy
rcauchy
5 ki-kare
 MathProbabilityDensityChiSquare
MathCumulativeDistributionChiSquare
MathQuantileChiSquare
MathRandomChiSquare
dchisq
pchisq
qchisq
rchisq
6 üstel
 MathProbabilityDensityExponential
MathCumulativeDistributionExponential
MathQuantileExponential
MathRandomExponential
dexp
pexp
qexp
rexp
7 F Balıkçı
 MathProbabilityDensityF
MathCumulativeDistributionF
MathQuantileF
MathRandomF
df
pf
qf
rf
sekiz Gama
 MathProbabilityDensityGamma
MathCumulativeDistributionGamma
MathQuantileGamma
MathRandomGamma
dgamma
pgamma
qgamma
rgamma
dokuz Geometrik
 MathProbabilityDensityGeometric
MathCumulativeDistributionGeometric
MathQuantileGeometric
MathRandomGeometric
dgeom
pgeom
qgeom
rgeom
on hipergeometrik
 MathProbabilityDensityHypergeometric
MathCumulativeDistributionHypergeometric
MathQuantileHypergeometric
MathRandomHypergeometric
dhyper
phyper
qhyper
rhyper
on bir
Lojistik
 MathProbabilityDensityLogistic
MathCumulativeDistributionLogistic
MathQuantileLogistic
MathRandomLogistic
dlogis
plogis
qlogis
rlogis
12 lognormal
 MathProbabilityDensityLognormal
MathCumulativeDistributionLognormal
MathQuantileLognormal
MathRandomLognormal
dlnorm
plnorm
qlnorm
rlnorm
on üç negatif binom
 MathProbabilityDensityNegativeBinomial
MathCumulativeDistributionNegativeBinomial
MathQuantileNegativeBinomial
MathRandomNegativeBinomial
dnbinom
pnbinom
qnbinom
rnbinom
on dört Merkezi olmayan beta
 MathProbabilityDensityNoncentralBeta
MathCumulativeDistributionNoncentralBeta
MathQuantileNoncentralBeta
MathRandomNoncentralBeta
dbeta
pbeta
qbeta
rbeta
on beş Merkezi olmayan ki-kare
 MathProbabilityDensityNoncentralChiSquare
MathCumulativeDistributionNoncentralChiSquare
MathQuantileNoncentralChiSquare
MathRandomNoncentralChiSquare
dchisq
pchisq
qchisq
rchisq
on altı
Merkez dışı F
 MathProbabilityDensityNoncentralF ()
MathCumulativeDistributionNoncentralF ()
MathQuantileNoncentralF ()
MathRandomNoncentralF ()
df
pf
qf
rf
17 Merkezi Olmayan Öğrencinin T'si
 MathProbabilityDensityNoncentralT
MathCumulativeDistributionNoncentralT
MathQuantileNoncentralT
MathRandomNoncentralT
dt
pt
qt
rt
on sekiz zehir
 MathProbabilityDensityPoisson
MathCumulativeDistributionPoisson
MathQuantilePoisson
MathRandomPoisson
dpois
ppois
qpois
rpois
on dokuz Öğrenci T
 MathProbabilityDensityT
MathCumulativeDistributionT
MathQuantileT
MathRandomT
dt
pt
qt
rt
20
üniforma
 MathProbabilityDensityUniform
MathCumulativeDistributionUniform
MathQuantileUniform
MathRandomUniform
dunif
punif
qunif
runif
21 Weibulla
 MathProbabilityDensityWeibull
MathCumulativeDistributionWeibull
MathQuantileWeibull
MathRandomWeibull
dweibull
pweibull
qweibull
rweibull

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.



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.

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ı

Numara.
Dağıtım
MQL5 zamanı
hesaplama PDF'si (µs)
R zamanı
hesaplama PDF'si (µs)
PDF
R/MQL5
MQL5 zamanı
CDF hesaplaması (µs)
R zamanı
CDF hesaplaması (µs)
CDF
R/MQL5
MQL5 hesaplama süresi
nicelikler (µs)
R hesaplama süresi
nicelikler (µs)
çeyreklik
R/MQL5
MQL5 oluşturma süresi
rastgele sayılar (µs)
R nesil zamanı
rastgele sayılar (µs)
Rastgele
R/MQL5
1
iki terimli
4.39
11.663
2.657
13.65
25.316
1.855
50.18
66.845
1.332
318.73
1816,463
5.699
2
beta
1.74
17.352
9.972
4.76
15.076
3.167
48.72
129.992
2.668
688.81
1723.45
2.502
3
Gama
1.31
8.251
6.347
8.09
14.792
1.828
50.83
64.286
1.265
142.84
1281.707
8.973
4
Cauchy
0.45
1.423
3.162
1.33
15.078
11.34
1.37
2.845
2.077
224.19
588.517
2.625
5
üstel
0.85
3.13
3.682
0.77
2.845
3.695
0,53
2.276
4.294
143.18
389.406
2.72
6
üniforma
0.42
2.561
6.098
0.45
1.423
3.162
0.18
2.846
15.81
40.3
247.467
6.141
7
Geometrik
2.3
5.121
2.227
2.12
4.552
2.147
0.81
5.407
6.675
278
1078.045
3.879
sekiz
hipergeometrik
1.85 11.095
5.997
0.9
8.819
9.799
0.75
9.957
13.28
302.55
880.356
2.91
dokuz
Lojistik
1.27
4.267
3.36
1.11
4.267
3.844
0.71
3.13
4.408
178.65
626.632
3.508
on
weibull
2.99
5.69
1.903
2.74
4.268
1.558
2.64
6.828
2.586
536.37
1558.472
2.906
on bir
zehir
2.91
5.974
2.053
6.26
8.534
1.363
3.43
13.085
3.815
153,59
303.219
1.974
12
F
3.86
10.241
2.653
9.94
22.472
2.261
65.47
135.396
2.068
1249.22
1801.955
1.442
on üç
Ki Meydanı
2.47
5.974
2.419
7.71
13.37
1.734
44.11
61.725
1.399
210.24
1235.059
5.875
on dört
Merkezi Olmayan KiKare
8.05
14.223
1.767
45.61
209.068
4.584
220.66
10342.96
46.873
744,45
1997.653
2.683
on beş
merkezi olmayan F
19.1
28.446
1.489
14.67
46.935
3.199
212.21
2561.991
12.073
1848.9
2912.141
1.575
on altı
Merkezi olmayan Beta
16.3
26.739
1.64
10.48
43.237
4.126
153.66
2290.915
14.909
2686.82
2839.893
1.057
17
negatif iki terimli
6.13
11.094
1.81
12.21
19.627
1.607
14.05
60.019
4.272
1130.39
1936.498
1.713
on sekiz
Normal
1.15
4.267
3.71
0.81
3.983
4.917
0.7
2.277
3.253
293.7
696.321
2.371
on dokuz
lognormal
1.99
5.406
2.717
3.19
8.819
2.765
3.18
6.259
1.968
479,75
1269.761
2.647
20
T
2.32
11.663
5.027
8.01
19.059
2.379
50.23
58.596
1.167
951.58
1425.92
1.498
21
merkezi olmayan T
38.47
86.757
2.255
27.75
39.823
1.435
1339.51
1930.524
1.441
1550.27
1699.84
1.096
<PDF R/MQL5>
3.474 <CDF R/MQL5>
3.465
<Quantile R/MQL5>
7,03
<Rastgele R/MQL5>
3.13



Ama tabi ki belirtilen versiyonu kontrol edeceğiz. Hem hız hem de performans için.

 
San Sanych Fomenko :

"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.

 
Renat, birkaç fonksiyonun R'den mql'ye transferi, bir süre önce bahsettiğin sürpriz miydi gerçekten?
 

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.

 void OnStart ()
  {
   double x= 0 ;  
   Print ( 1 /x);
  }

Doğal olarak, bu parametrenin varlığı, 0.0 sabitine bölünürken derleme hatasından kurtulmaz.
Print(1/0.0);

'0.0' - division by zero in the constant expression    s1.mq5    8    12
 
mytarmailS :
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.

 
Renat Fatkhullin'in fotoğrafı.

Bu parametre verildiğinde, aşağıdaki kod inf değerini döndürür.

Teşekkürler, çok iyi kurulum. Ve sıfırı sıfıra bölerseniz, o zaman inf değil, nan çıkıyor ve bu daha da doğru, böyle bir doğruluk bile beklemiyordum!