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

 

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:

уровни предикторов
sell
buy
pval
concat
direction
121121
11
31
2.03E-03
121121
1
211112
3
15
4.68E-03
211112
1
222222
19
4
1.76E-03
222222
0
222311
8
0
4.68E-03
222311
0
321113
7
0
8.15E-03
321113
0
333332
53
19
6.15E-05
333332
0

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.

sample
correct sell correct buy total correct deals total deals share correct
1 37 10 47 85 0.5529412
2 26 7 33 65 0.5076923
3 30 9 39 80 0.4875
4 36 11 47 88 0.5340909
5 33 12 45 90 0.5
6 28 10 38 78 0.4871795
7 30 9 39 75 0.52
8 34 8 42 81 0.5185185
9 24 11 35 67 0.5223881
10 23 14 37 74 0.5
11 28 13 41 88 0.4659091
12 31 13 44 82 0.5365854
13 33 9 42 80 0.525
14 23 7 30 63 0.4761905
15 28 12 40 78 0.5128205
16 23 16 39 72 0.5416667
17 30 13 43 74 0.5810811
18 38 8 46 82 0.5609756
19 26 8 34 72 0.4722222
20 35 12 47 79 0.5949367
21 32 11 43 76 0.5657895
22 30 10 40 75 0.5333333
23 28 8 36 70 0.5142857
24 21 8 29 70 0.4142857
25 24 8 32 62 0.516129
26 34 15 49 83 0.5903614
27 24 9 33 63 0.5238095
28 26 14 40 66 0.6060606
29 35 6 41 84 0.4880952
30 28 8 36 74 0.4864865
31 26 14 40 79 0.5063291
32 31 15 46 88 0.5227273
33 35 14 49 93 0.5268817
34 35 19 54 85 0.6352941
35 27 8 35 64 0.546875
36 30 10 40 83 0.4819277
37 36 9 45 79 0.5696203
38 25 8 33 73 0.4520548
39 39 12 51 85 0.6
40 37 9 46 79 0.5822785
41 41 12 53 90 0.5888889
42 29 7 36 59 0.6101695
43 36 14 50 77 0.6493506
44 36 15 51 88 0.5795455
45 34 7 41 67 0.6119403
46 28 12 40 75 0.5333333
47 27 11 38 69 0.5507246
48 28 16 44 83 0.5301205
49 29 10 39 72 0.5416667
СОПРОВОЖДЕНИЕ ЭКСПЕРИМЕНТА ПО АНАЛИЗУ ДАННЫХ ФОРЕКСА: доказательство значимости предсказаний
СОПРОВОЖДЕНИЕ ЭКСПЕРИМЕНТА ПО АНАЛИЗУ ДАННЫХ ФОРЕКСА: доказательство значимости предсказаний
  • 2016.03.02
  • Alexey Burnakov
  • www.mql5.com
Начало по ссылкам: https://www.mql5.com/ru/blogs/post/659572 https://www.mql5.com/ru/blogs/post/659929 https://www.mql5.com/ru/blogs/post/660386 https://www.mql5.com/ru/blogs/post/661062
 

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.

 
San Sanych Fomenko :

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.
 
yerlan imangeldinov :
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.
Daha spesifik olarak, ne görmüyorum?
 
yerlan imangeldinov :
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.
Fiyat geçmişinin yanı sıra sisteme bilgi ekleyebilirsiniz. Ama yine de tarih öğretmek zorundasın. Veya Chuika.
 

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.

giriş girdi_1 input_2 input_3 input_4 input_5 input_6 input_7 input_8 input_9 input_10 input_11 input_12 input_13 input_14 giriş_15 input_16 input_17 input_18 input_19 input_20
ağırlık -186.905 7.954625 -185.245 14.88457 -206.037 16.03497 190.0939 23.05248 -182.923 4.268967 196.8927 16.43655 5.419367 8.76542 36.8237 5.940322 8.304859 8.176511 17.13691 -0.57317
alt küme Evet Evet Evet Evet Evet Evet

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

Случайные леса предсказывают тренды
Случайные леса предсказывают тренды
  • 2014.09.29
  • СанСаныч Фоменко
  • www.mql5.com
В статье описано использование пакета Rattle для автоматического поиска паттернов, способных предсказывать "лонги" и "шорты" для валютных пар рынка Форекс. Статья будет полезна как новичкам, так и опытным трейдерам.
 
Dr.Tüccar :

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.

giriş girdi_1 input_2 input_3 input_4 input_5 input_6 input_7 input_8 input_9 input_10 input_11 input_12 input_13 input_14 giriş_15 input_16 input_17 input_18 input_19 input_20
ağırlık -186.905 7.954625 -185.245 14.88457 -206.037 16.03497 190.0939 23.05248 -182.923 4.268967 196.8927 16.43655 5.419367 8.76542 36.8237 5.940322 8.304859 8.176511 17.13691 -0.57317
alt küme Evet Evet Evet Evet Evet Evet

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.

Neden: