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

 
Renat Fatkhullin'in fotoğrafı.

R, MetaTrader/MQL'de gerçek "karmaşık hesaplamaları basit ve hemen şimdi yapma" ihtiyacından ne kadar uzakta olduğumuzu görmemi sağlayan harika bir sistem.

Biz (C++ geliştiricileri) kanımızda "her şeyi kendiniz yapabilirsiniz ve düşük seviyeli bir taban ve hesaplama hızı veriyoruz" yaklaşımına sahibiz. Performans konusunda fanatikiz ve başarılıyız - 64 bitte MQL5 harika.

R ile bizzat oturduğumda, tek bir satırda mümkün olduğunca çok sayıda güçlü fonksiyona ihtiyacınız olduğunu fark ettim ve genellikle size araştırma yapma fırsatı veriyor.

Bu nedenle keskin bir dönüş yaptık ve MetaTrader 5'i yükseltmeye başladık:

  • Daha önce yeniden yazılmış Alglib ve Fuzzy matematik kitaplıklarını standart dağıtıma dahil etti, birim testleri ile kaplandı
  • R'den istatistiksel fonksiyonların bir analogunu geliştirdi, araştırma yaptı ve testlerle kapladı. çalışmalar devam ediyor ve kütüphane genişliyor
  • grafik kitaplığının ilk beta sürümünü geliştirdi R'de bir çizim analogu olarak Graphics. hızlı çıktı için tek satırlık işlevler ekledi
  • terminalin çıkış pencerelerindeki arayüzleri tablo verilerle çalışabilecek şekilde değiştirmeye başladı. çıktı yönünü değiştirdi, gereksiz sütunları devre dışı bıraktı, uzman çıktı penceresinde yazı tipini monospace olarak değiştirdi
  • yapılar da dahil olmak üzere dizileri otomatik olarak yazdırmak için güçlü bir ArrayPrint işlevi eklendi
  • dizileri diske hızlı bir şekilde yazmak/okumak için FileLoad ve FileSave işlevleri eklendi


Tabii ki, yolculuğun başlangıcındayız, ancak kuvvetlerin uygulanması için doğru vektör zaten belli.

Motivasyonunuz harika! Her şey tam dediğiniz gibiyse ninjayı iliklerine kadar ısırırsınız . çoklu grafik)))

Ancak, IMHO, burada uv yazdıklarınıza ek olarak, radikal olarak yeni bir şey yaratmanız gerekecek. Bay Reshetov, sadece piyasadan indirilenlerle değil, keyfi veri kümeleriyle çalışmak için bir araştırma stüdyosuna ihtiyacımız var, çünkü neler olduğunu anlamak için birçok şeyin tamamen önemsiz, sentetik örnekler üzerinde denenmesi gerekiyor. ben bir programcı programcısı olarak)) Farklı grafikler, dağılımlar, isabet haritaları, dağılımlar vb. çizin. Genel olarak, böyle bir araç setinin doğrudan metaeditrden temin edilmesi çok güzel olurdu, ama açıkçası, ummuyorum bile ...

Ama genel olarak, elbette, düşüncelerinizin eğilimini seviyorum))

 
Renat Fatkhullin'in fotoğrafı.

Ayrıntılar veya doğrulama olmadan kibar bir yanıttı. Ve cevap Wolfram Alpha ve Matlab ile uyuşmadı, ki bu bir problem.

Kenara gitmeye gerek yok - temel sorun açıkça belirlendi.

Cevabı Wolfram'ınkiyle eşleşmedi de ne demek? Kişinin cevabının "sıfır" olmaması çakışmadı mı? Adam, integralin = 0 olduğu sıfır noktasında, yoğunluğun mutlaka sıfır olması gerektiğini düşünmediğini söyledi (soruyu ona böyle koydum). Aynen öyle dedi. Ve herhangi bir noktadaki yoğunluk değerinin alakalı olmadığını da ekledi (eldeki konuyla alakalı olmadığı için "alakasız" okudum). Bu oldukça açık bir matematiksel ifadedir.

Tartışılan konuda matematik önemlidir.

Böyle ve böyle bir fonksiyonun integraline sahibiz (gama dağılımının olasılık yoğunluk fonksiyonu ). Herkes, parametrelerle bir denklemi Wolfram'a kaydırabileceğiniz gerçeğine zaten alıştı: entegrasyon alanını ve fonksiyon parametrelerini belirtin, o entegre edecek ve cevabı verecektir. Kendiniz oturup bu integrali belirli bir alan üzerinde hesaplarsanız, sıfırda 0, tüm alanda 1 ve bazı alt alanlarda [0,1] değeri alacağınızı düşündünüz. Sadece denklemi çözerek!

Gama dağılımının olasılık yoğunluk fonksiyonunun uç noktadaki limitinin pozitif alanda bir yere gitmesi bu fonksiyonun bir özelliğidir. Bu işlevi entegre ederek olanlarla hiçbir ilgisi yoktur. Bu adam bunun hakkında yazdı.

Kök sorulardan çekinmiyorum. Bakış açımızın bizden bağımsız bir kişi tarafından onaylandığını bir kez daha tekrarlayacağım - sıfırda hangi yoğunluğun önemli olmadığı (ilgili değil).

 
Zhenya :

Motivasyonunuz harika! Her şey tam dediğiniz gibiyse ninjayı iliklerine kadar ısırırsınız . çoklu grafik)))

Ancak, IMHO, burada uv yazdıklarınıza ek olarak, radikal olarak yeni bir şey yaratmanız gerekecek. Bay Reshetov, sadece piyasadan indirilenlerle değil, keyfi veri kümeleriyle çalışmak için bir araştırma stüdyosuna ihtiyacımız var, çünkü neler olduğunu anlamak için birçok şeyin tamamen önemsiz, sentetik örnekler üzerinde denenmesi gerekiyor. ben bir programcı programcısı olarak)) Farklı grafikler, dağılımlar, isabet haritaları, dağılımlar vb. çizin. Genel olarak, böyle bir araç setinin doğrudan metaeditrden temin edilmesi çok güzel olurdu, ama açıkçası, ummuyorum bile ...

Ama genel olarak, elbette, düşüncelerinizin eğilimini seviyorum))

Reshetov'un bu "atışını" mı kastediyorsunuz?

" Bir çeşit çürük bu R, kare tekerlekli bir bisiklet. Tabanın kendisi, yani R eğrisinde YaP ve bir "piç törpüsü" ile ciddi bir iyileştirmeye ihtiyaç duyduğunda, bazı paketleri hakkında ne söyleyebiliriz? bunca yıldır R'deki temel işlevlerin doğruluğunu kontrol etme zahmetine bile girmedi mi?

MetaQuotes'un bazı kullanıcıların gözlerini gerçekler ve açık kaynak testleri üzerinde bu R'nin gerçekte neyi temsil ettiğine açması iyi oldu, böylece herkes iki kez kontrol edebilir ve kendi başına emin olabilir ve asılsız değil. Elbette herkes açılmadı çünkü. Yıkıcı tarikat R'den bireysel dini fanatikler, sunulan testlere atıfta bulunmak ve bunları kendi başlarına yeniden kontrol etmek ve fanatik bir kar fırtınası sürmek yerine, çarpık dil ve paketlerindeki hesaplamaların "yanılmazlığına" körü körüne inanmaya devam edecekler. "genel olarak kabul edilen standart" olarak R'nin eğriliği.

Sonuç daha doğru olacağından ve bunu eğri ve eğik R üzerinden yapmaya çalışacağından, ticaret stratejileri oluşturmak için MQL işlevini kullanmanın daha iyi olduğu artık oldukça açıktır.

Yapıcı bir yaklaşım, testler ve kaynakları ile " çıplak kral - R " yi ortaya çıkarmak için MetaQuotes geliştiricilerine özellikle teşekkür edilmelidir! "

 
Vladimir Perervenko :

Reshetov'un bu "atışını" mı kastediyorsunuz?

hayır, mesaj şu:

Yuri Reshetov :

R, diğer birçok PL'ler gibi, diziler biçimindeki verileri işlemek için açıkça işlevsellik sağlaması nedeniyle MQL'ye kıyasla makine öğrenimi için hala daha uygundur. Gerçek şu ki, makine öğrenimi için bir seçim genellikle iki boyutlu bir veri dizisidir ve buna bağlı olarak dizilerle çalışmak için işlevsellik gereklidir:

  1. Satırları ve sütunları başka bir diziye daha küçük diziler olarak ekleyin
  2. Bir dizideki satırları ve sütunları daha küçük diziler olarak değiştirme
  3. Bir diziden satırları ve sütunları kaldırma (örneğin, önemsiz tahmin edicileri veya bariz "aykırı değerlere" sahip örnekleri örnekten kaldırmak için).
  4. Dizileri parçalara bölme, bunun sonucunda orijinal diziden iki veya daha fazla dizi elde edilir, bunlar onun parçalarıdır (örneği eğitim ve test bölümlerine veya daha fazla parçaya bölmek için gereklidir, örneğin Wallking Forward için).
  5. Düzgün bir dağılıma sahip bir dizideki satırların ve sütunların rastgele karıştırılması (örnekteki belirli örneklerin farklı parçalara, tercihen bu parçalara eşit olarak dağılmış olması gerekir).
  6. Tek tek satırlar veya sütunlardaki verileri işlemek için çeşitli işlevler (örneğin, bir satır veya sütunun aritmetik ortalamasını hesaplama, varyans veya sonraki normalleştirme için bir satırdaki maksimum veya minimum değeri bulma).
  7. Vb. vb.

Bu arada, örneklerin diziler biçiminde işlenmesi için gerekli olan yukarıdaki işlevsellik MQL'de uygulanmamıştır, makine öğrenme algoritması geliştiricilerinin önemli bir kısmı, tüm bunların uzun süredir mevcut olduğu diğer PL'leri tercih edecektir. Veya, hafızam bana hizmet ederse, kolaylık sağlamak için iki boyutlu dizilerin tek boyutlu olarak sunulduğu AlgLib kütüphanesinden iddiasız MLP'yi (geçen yüzyılın 60'larının algoritması) kullanacak.

Elbette rastgele dağılımların yoğunluk fonksiyonları da gerekli bir fonksiyoneldir. Ancak bu tür işlevler, makine öğrenimi görevlerinde her zaman gerekli değildir ve bazılarında hiç kullanılmazlar. Ancak, çok boyutlu dizilerde olduğu gibi, seçimli işlemler, makine öğrenimi algoritmalarının uygulanmasının herhangi bir görev olmadan yapamayacağı bir şeydir, tabii ki, önemsiz bir XOR'dan bilinen normalleştirilmiş verileri ezberlemek için bir ızgarayı eğitmek bir görev değilse.

 
Vladimir Perervenko :

Reshetov'un bu "atışını" mı kastediyorsunuz?

" Bir çeşit çürük bu R, kare tekerlekli bir bisiklet. Tabanın kendisi, yani R eğrisinde YaP ve bir "piç törpüsü" ile ciddi bir iyileştirmeye ihtiyaç duyduğunda, bazı paketleri hakkında ne söyleyebiliriz? bunca yıldır R'deki temel işlevlerin doğruluğunu kontrol etme zahmetine bile girmedi mi?

MetaQuotes'un bazı kullanıcıların gözlerini gerçekler ve açık kaynak testleri üzerinde bu R'nin gerçekte neyi temsil ettiğine açması iyi oldu, böylece herkes iki kez kontrol edebilir ve kendi başına emin olabilir ve asılsız değil. Elbette herkes açılmadı çünkü. Yıkıcı tarikat R'den bireysel dini fanatikler, sunulan testlere atıfta bulunmak ve bunları kendi başlarına yeniden kontrol etmek ve fanatik bir kar fırtınası sürmek yerine, çarpık dil ve paketlerindeki hesaplamaların "yanılmazlığına" körü körüne inanmaya devam edecekler. "genel olarak kabul edilen standart" olarak R'nin eğriliği.

Sonuç daha doğru olacağından ve bunu eğri ve eğik R üzerinden yapmaya çalışacağından, ticaret stratejileri oluşturmak için MQL işlevini kullanmanın daha iyi olduğu artık oldukça açıktır.

Yapıcı bir yaklaşım, testler ve kaynakları ile " çıplak kral - R " yi ortaya çıkarmak için MetaQuotes geliştiricilerine özellikle teşekkür edilmelidir! "

"Vizon MQL" hakkındaki gönderinizi zaten sildiniz mi? Tıpkı Radov'un figürlerinin Trump seçildikten sonra Facebook'larını ovuşturduğu gibi gönderilerinizi ovuşturuyorsunuz.

 

İşte eğlence için Wolfram Alpha'da bir gama dağılımı örneği.

Bir fonksiyon verilir, biraz basitleştirilmiş bir gama dağılım yoğunluk fonksiyonu.

Öz, payda x'tedir. Sağdaki limit, görebileceğiniz gibi, x->0 Wolfram'da doğru bir şekilde değerlendirilir: inf.

Yani, sağdaki limitte, sonsuzdaki sıfır noktasındaki yoğunluk (bu tam olarak dgamanın cevabıdır).

Bu işlevi büyük bir desteğe entegre edelim:

İntegral 1'e eşittir (tabii ki tam bir destek alınmadığından yuvarlatılmış).

Sonuç olarak, uç noktada fonksiyonun sonsuza gitmesine rağmen, bu fonksiyonun integrali olması gerektiği gibi mükemmel bir şekilde kabul edilir.

 
Alexey Burnakov :

İşte eğlence için Wolfram Alpha'da bir gama dağılımı örneği.

Sonuç olarak, uç noktada fonksiyonun sonsuza gitmesine rağmen, bu fonksiyonun integrali olması gerektiği gibi mükemmel bir şekilde kabul edilir.

Örnek için teşekkürler, haklısın. Bu integral yakınsar.

Yoğunluğu belirlemek için x=0 noktasındaki sınır değerler de kullanılabilir ve bu durum sapmalara yol açmaz.

 
kuantum :

Örnek için teşekkürler, haklısın. Bu integral yakınsar.

Yoğunluğu belirlemek için x=0 noktasındaki sınır değerler de kullanılabilir ve bu durum sapmalara yol açmaz.


Teşekkür ederim! Saygı duyuyorum.

 

Hızlı işleme için paketler içeren bir R örneği.

library(data.table)

library(ggplot2)


start <- Sys.time()


set.seed(1)

dummy_coef <- 1:9


x <- as.data.table(matrix(rnorm(9000000, 0, 1), ncol = 9))

x[, (paste0('coef', c(1:9))):= lapply(1:9, function(x) rnorm(.N, x, 1))]


print(colMeans(x[, c(10:18), with = F]))


x[, output:= Reduce(`+`, Map(function(x, y) (x * y), .SD[, (1:9), with = FALSE], .SD[, (10:18), with = FALSE])), .SDcols = c(1:18)]


x[, sampling:= sample(1000, nrow(x), replace = T)]


lm_models <- x[, 

{

lm(data = .SD[, c(1:9, 19), with = F], formula = output ~ . -1)$coefficients

}, 

by = sampling]


lm_models[, coefs:= rep(1:9, times = 1000)]


avg_coefs <- lm_models[, mean(V1), by = coefs]

plot(dummy_coef, avg_coefs$V1)


lm_models[, 

  print(shapiro.test(V1)$p.value)

  , by = coefs]


ggplot(data = lm_models, aes(x = V1)) +

geom_histogram(binwidth = 0.05) +

facet_wrap(~ coefs, ncol = 3)


Sys.time() - start

Çalışma süresi: 5 sn. 1000 lineer model inşa edildi. Her biri 1000 gözlemde.

[1] 0.8908975

[1] 0.9146406

[1] 0.3111422

[1] 0.02741917

[1] 0.9824953

[1] 0.3194611

[1] 0.606778

[1] 0.08360257

[1] 0.4843107

Tüm katsayılar normal dağılmıştır.

Ve görselleştirme için ggplot-ik.

 

Ve başka bir örnek. Ayrıca, istatistikleri simüle etmek için büyük örnekleri döndürmekle de ilişkilidir.

########## simulate diffference between mean density with different sample size


library(data.table)

library(ggplot2)


rm(list=ls());gc()


start <- Sys.time()


x <- rnorm(10000000, 0, 1)

y <- rnorm(10000000, 0, 1)


dat <- as.data.table(cbind(x, y))

dat[, (paste0('sampling_', c(100, 1000, 10000))):= lapply(c(100, 1000, 10000), function(x) sample(x, nrow(dat), replace = T))]


dat_melted <- melt(dat, measure.vars = paste0('sampling_', c(100, 1000, 10000)))


critical_t <- dat_melted[, 

   {

    mean(x) - mean(y)

   }

   , by = .(variable, value)]


ggplot(critical_t, aes(x = V1, group = variable, fill = variable)) + 

stat_density(alpha = 0.5)


Sys.time() - start


gc()

Çalışma süresi 3.4 saniye.

Sıfır merkezli normal olarak dağıtılmış örnekler oluşturulur:

1000 ila 10.000 değer çifti

10.000'e 1.000 değer çifti

100.000'e 100 değer çifti

Her numune için ortalamalar (MO == 0) arasındaki fark dikkate alınır.

Numune araçlarının dağılım yoğunlukları, farklı büyüklükteki numuneler için türetilir.

Sadece burada örnekleme_100, örnek boyutunun elde edilmesinin 10.000.000 / 100 gerektiği anlamına gelir. Yani, daha küçük örnekler için standart hata daha büyüktür...