Ticaret fırsatlarını kaçırıyorsunuz:
- Ücretsiz ticaret 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
Nakit ödül alma koşullarını açıklayacağım:
Problemi ilk çözen kişiye 5 kredi verilecektir.
Kararların değerlendirilmesi için son tarih: 30 Haziran 2016
Bir ticaret stratejisini uygulamak için bilgilendirici özellikleri seçmek için algoritmayı kullanmanın bir örneği vardır.
Büyük Deney hakkındaki bloglarımı okumuş olmalısınız: https://www.mql5.com/en/blogs/post/661895
Ve işte bir resim:
Beş çift için bir kalıp bulmaya ve 25 yıllık bir doğrulama örneğinde doğru tahmin edilen işlemlerin yüzdesini tespit etmeye çalıştım. Hemen işe yaramadı. Herhangi bir ufuk için tahmin istenen doğruluğa ulaşmadı.
Ardından, sadece bir çift eurusd alalım. Önümüzdeki 3 saat için fiyat hareketinin sonucunun, tahmincilerimin bazı alt kümelerine bağlı olduğunu buldum.
Tahmin edicileri kategorize ettim ve Önemli Tahmin Bulucumu çalıştırdım. Şimdi, işteyken, 20 dakikada yaptım.
[1] "1.51%"
> final_vector <- c((sao$par >= threshold), T)
> names(sampleA)[final_vector]
[1] "lag_diff_45_var" "lag_diff_128_var" "lag_max_diff_8_var" "lag_max_diff_11_var" "lag_max_diff_724_var" "lag_sd_362_var"
[7] "output"
Yakınsamayı bu kadar çabuk sağlamadım ama açıklama gücünün yüzde bir buçuk düzeyinde bir sonuç elde ettim.
Yakınsama grafiği (minimizasyon).
Bir sonraki adım, modeli oluşturmaktır.
Birkaç kategorik tahmincimiz var. 3 saatlik bir perspektifte uzun veya kısa bir "kurallar kitabı" veya tahminciler ile çıktı arasında ne tür bir ilişki olduğunu inşa ediyoruz.
Sonuç olarak nasıl görünüyor:
Her satırdaki alış ve satış sayısının çarpıklığını ve 50/50 dağılımına uygunluk için ki-kare testinin bu rakamlara karşılık gelen p-değerini görüyoruz. Yalnızca olasılığın 0,01'in altında olduğu satırları seçiyoruz.
Ve girdilerin zaten seçildiği andan itibaren tüm deneyin kodu:
dat_test <- sampleA[, c("lag_diff_45_var"
, "lag_diff_128_var"
, "lag_max_diff_8_var"
, "lag_max_diff_11_var"
, "lag_max_diff_724_var"
, "lag_sd_362_var"
, "output")]
dat_test$concat <- do.call(paste0, dat_test[1:(ncol(dat_test) - 1)])
x <- as.data.frame.matrix(table(dat_test$concat
, dat_test$output))
x$pval <- NA
for (i in 1:nrow(x)){
x$pval[i] <- chisq.test(x = c(x$`0`[i], x$`1`[i])
, p = c(0.5, 0.5))$p.value
}
trained_model <- subset(x
, x$pval < 0.01)
trained_model$concat <- rownames(trained_model)
trained_model$direction <- NA
trained_model$direction [trained_model$`1` > trained_model$`0`] <- 1
trained_model$direction [trained_model$`0` > trained_model$`1`] <- 0
### test model
load('C:/Users/aburnakov/Documents/Private/big_experiment/many_test_samples.R')
many_test_samples_eurusd_categorical <- list()
for (j in 1:49){
dat <- many_test_samples[[j]][, c(1:108, 122)]
disc_levels <- 3
for (i in 1:108){
naming <- paste(names(dat[i]), 'var', sep = "_")
dat[, eval(naming)] <- discretize(dat[, eval(names(dat[i]))], disc = "equalfreq", nbins = disc_levels)[,1]
}
dat$output <- NA
dat$output [dat$future_lag_181 > 0] <- 1
dat$output [dat$future_lag_181 < 0] <- 0
many_test_samples_eurusd_categorical[[j]] <- subset(dat
, is.na(dat$output) == F)[, 110:218]
many_test_samples_eurusd_categorical[[j]] <- many_test_samples_eurusd_categorical[[j]][(nrow(dat) / 5):(2 * nrow(dat) / 5), ]
}
correct_validation_results <- data.frame()
for (i in 1:49){
dat_valid <- many_test_samples_eurusd_categorical[[i]][, c("lag_diff_45_var"
, "lag_diff_128_var"
, "lag_max_diff_8_var"
, "lag_max_diff_11_var"
, "lag_max_diff_724_var"
, "lag_sd_362_var"
, "output")]
dat_valid$concat <- do.call(paste0, dat_valid[1:(ncol(dat_valid) - 1)])
y <- as.data.frame.matrix(table(dat_valid$concat
, dat_valid$output))
y$concat <- rownames(y)
valid_result <- merge(x = y, y = trained_model[, 4:5], by.x = 'concat', by.y = 'concat')
correct_sell <- sum(subset(valid_result
, valid_result$direction == 0)[, 2])
correct_buys <- sum(subset(valid_result
, valid_result$direction == 1)[, 3])
correct_validation_results[i, 1] <- correct_sell
correct_validation_results[i, 2] <- correct_buys
correct_validation_results[i, 3] <- sum(correct_sell
, correct_buys)
correct_validation_results[i, 4] <- sum(valid_result[, 2:3])
correct_validation_results[i, 5] <- correct_validation_results[i, 3] / correct_validation_results[i, 4]
}
hist(correct_validation_results$V5, breaks = 10)
plot(correct_validation_results$V5, type = 's')
sum(correct_validation_results$V3) / sum(correct_validation_results$V4)
Ayrıca, her biri yaklaşık 5 yılı kapsayan 49 doğrulama örneği vardır. Burada üzerlerindeki modeli doğrularız, doğru tahmin edilen ticaret yönlerinin yüzdesini hesaplayacağız.
Örneklere göre doğru tahmin edilen anlaşmaların yüzdesine ve bu değerin histogramına bakalım:
Ve işlemin yönünü tahmin ettiğimiz tüm örneklerde toplamda kaç tane sayarız:
> sum(correct_validation_results$`total correct deals`) / sum(correct_validation_results$`total deals`)
[1] 0.5361318
Yaklaşık %54. Ancak Ask & Bid arasındaki mesafeyi aşmanız gerektiği gerçeğini hesaba katmadan. Yani yukarıdaki grafiğe göre eşik değer, spread=1 pip olması koşuluyla yaklaşık olarak %53 seviyesindedir.
Yani, 30 dakika içinde, örneğin terminalde kodlanması kolay basit bir model hazırladık. Ve bu bir komite bile değil. Ve 20 saat yerine 20 dakika bağımlılık arıyordum. Genel olarak, bir şey var.
Ve hepsi, bilgilendirici özelliklerin doğru seçimi sayesinde.
Ve her geçerli için ayrıntılı istatistikler. örneklem.
Tüm kaynak verilere blogdaki bağlantılar aracılığıyla erişilebilir.
Ve bu model pek karlı değil. MO yarım puan düzeyinde. Ama ben o yöne bağlıyım.
Hep geçmişten ders alıyoruz.
Yüzyıllardır grafiğe bakıyoruz. İkisi de açık ve "üç asker" görüyoruz, sonra "baş ve omuzlar" görüyoruz. Daha önce böyle nice rakamlar görüldü ve biz bu rakamlara inanıyoruz, ticaret yapıyoruz...
Ve görev şu şekilde ayarlanmışsa:
1. Bu tür rakamları otomatik olarak bulun ve genel olarak tüm çizelgeler için değil, belirli bir döviz çifti için, pirinç ticareti yaparken Japonlar tarafından üç yüzyıl önce değil, son zamanlarda karşılaşılanlar.
2. Bu tür rakamları - kalıpları otomatik olarak aradığımız ilk veriler bizim için uygun mu?
İlk soruyu yanıtlamak için "rastgele orman" - rastgele orman adı verilen bir algoritma düşünün. Algoritma, bir veya birkaç para biriminin, göstergelerin, fiyat artışlarının teklifini alır - bir kişinin çalışması için ilk veri olarak düşündüğü her şey. 10-5-100-200 ... girdi değişkenleri. Daha sonra, bir çubuğa karşılık gelen, zamanın bir anıyla ilgili değişkenlerin tüm değerleri kümesini alır ve bu girdi değişkenlerinin, örneğin, geçmiş veriler üzerinde iyi tanımlanmış bir sonuca karşılık gelen böyle bir kombinasyonunu arar. SATIN AL emri. Ve başka bir sipariş için başka bir kombinasyon seti - SAT. Bu tür kümelerin her biri ayrı bir ağaca karşılık gelir. Deneyimler, 18.000 barlık (yaklaşık 3 yıl) bir giriş saati seti için algoritmanın 200-300 ağaç bulduğunu göstermektedir. Bu, neredeyse "baş ve omuzların" analogları ve tüm asker şirketleri olan bir dizi kalıptır.
Bu algoritmanın sorunu, bu tür ağaçların gelecekte karşılaşılmayacak bazı özellikleri yakalayabilmesidir. Buna burada forumda "fazla uydurma", makine öğreniminde "fazla uydurma" denir. Tüm büyük başlangıç değişkenleri setinin iki bölüme ayrılabileceği bilinmektedir: çıkış değişkeni ile ilgili olanlar ve gürültü ile ilgili olmayanlar. Burnakov burada sonuçla ilgili olmayanları ayıklamaya çalışıyor.
not.
Trend olan TS (AL, SAT) oluştururken, her türlü araba gürültülüdür!
Gördüğünüz şey, pazarın küçük bir kısmı ve en önemlisi değil. Kimse piramidi baş aşağı inşa etmez.
Gördüğünüz şey, pazarın küçük bir kısmı ve en önemlisi değil. Kimse piramidi baş aşağı inşa etmez.
Girilen veriler üzerinde bir nöronu eğitmeye çalıştım, sonra ağırlıklara baktım. Girdi verilerinin küçük bir ağırlığı varsa, muhtemelen buna gerek yoktur. Bunu, https://www.mql5.com/ru/articles/1165 adlı makalesi için SanSanych sayesinde R (Rattle) kullanarak yaptım.
Uygulamada, bu yaklaşımı kontrol etmedim, ilginç çıktı ya da değil. input_1 input_3 input_5 input_7 input_9 input_11 alırdım
Girilen veriler üzerinde bir nöron eğitmeye çalıştım, sonra ağırlıklara baktım. Girdi verilerinin küçük bir ağırlığı varsa, muhtemelen buna gerek yoktur. Bunu, https://www.mql5.com/ru/articles/1165 adlı makalesi için SanSanych sayesinde R (Rattle) kullanarak yaptım.
Uygulamada, bu yaklaşımı kontrol etmedim, ilginç çıktı ya da değil. input_1 input_3 input_5 input_7 input_9 input_11 alırdım
) hm. çok ilginç çıktı.
Açıklayıcı soru. Ve neden ağırlığın küçük olduğu birkaç giriş daha açmıyorsunuz, örneğin 13, 14, 16? Ağırlığa göre sıralanmış bir girdi ve ağırlık şeması gösterebilir misiniz?
Üzgünüm, ilk başta anlamadım. Evet, bu girdiler olması gerektiği gibi büyük bir modülo ağırlığa sahiptir.
Görsel olarak, tüm ağırlıklar iki gruba ayrılır. Bunları anlamlı/önemli değil ilkesine göre bölmek gerekirse, o zaman 5,11,7,1,3,9 açıkça ayırt edilir, bu kümenin yeterli olduğunu düşünüyorum.