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

 
Aleksey Vyazmikin #:

Bir keresinde tekrar kullanmaya karar verdiğim bir senaryo yazmıştınız.

Bir örnek üzerinde çalıştırdım ve bir hata veriyor - hatayı nerede bulacağımı ve nasıl düzelteceğimi anlayamıyorum - belki bu kütüphaneleri / paketleri kullandığınız için biliyorsunuzdur?

İkili bir örnek üzerinde her şey yolunda gitti.

Hata, korelasyon matrisinde tanımlanmamış değerlerin (NA) ortaya çıktığını ve findCorrelation fonksiyonunun bunu kullanamayacağını söylüyor. Paketi açın ve fonksiyon açıklamasını okuyun.

Komut dosyaları dağınık ve gereksiz ara sonuçlar denizi. aşağıda düzeltilmiş komut dosyası

#=====================================================================
 require(tidyft)
#--get  df1------------------------------------------------------------
way <-         "D:\\FX\\MT5_CB\\MQL5\\Files\\Po_Vektoru_TP_0_SL_0\\EURUSD_0\\Setup"
df1 = read.csv(paste0(way, "train.csv"), header = TRUE, sep = ";",dec = ".")
#df1 = fread(paste0(way, "train1.csv"))
#fst::write_fst(df1, "train1.fst")
#-----archiv--------------------------------
 ft <- as_fst(df1) #
 rm(df1)


#---constanti--------------------------------------------
 cor.test.range <- seq(from = 0.1,to = 0.9,by = 0.1)  #  диапазон перебора в коеф корр
not.used.colums = c("Target_100_Buy","Target_100_Sell","Target_P","Time","Target_100")

ft %>% select_fst(cols = not.used.colums, negate = TRUE)-> dt
#--function--------------------------------------------
 get.findCor<- function(data , cor.coef = cor.test.range){
    import::here(.from = caret, findCor = findCorrelation)
    data %>%
        cor(method = "kendall", use = "pairwise" ) %>%
        findCor(cutoff = cor.coef, exact = FALSE, names = TRUE)->nms
        if(nms!= 0)
        select_dt(data, cols = nms, negate = TRUE)
}
#----Calculate--------------------------------------------------------------
for(i in seq_len(length(cor.test.range))){
    get.findCor(dt, cor.coef = cor.test.range[i])-> dt.n
    paste0("train2_" , cor.test.range[i]*10 , ".csv") %>%
        paste0(way , .) %>% fwrite(dt.n, .)
    rm(dt.n)
}

Açıklamalar sırayla:

1. "caret" paketini global kapsama yüklemenize gerek yoktur. Çok ağırdır, çok fazla bağımlılık ve veri çeker. Sadece bir fonksiyonuna ihtiyacınız var. Onu doğrudan get.findCor işlevine içe aktarırsınız.

tidyft paketi çok hızlı bir veri çerçevesi manipülasyon paketidir. Onu kullanın.

 

Kontrol için, bu komut dosyasını kullanarak kitimde test ettim. Sonuç:

# patch <- "C:/RData/Project/FEDOT/"
# df1 <- fread(paste0(patch, "DF_train_M5.csv"))
# object.size(df1) #780184 bytes
# dim(df1) #[1] 4030   25
# ft <- as_fst(df1)#
# rm(df1)
#ft %>% select_fst(cols = c(1:3,25), negate = TRUE)-> dt
#dim(dt) [1] 4030   21
bench::workout({
    for(i in seq_len(length(cor.test.range))){
        get.findCor(dt, cor.coef = cor.test.range[i])-> dt.n
        paste0("train2_" , cor.test.range[i]*10 , ".csv") %>%
            paste0(patch , .) %>% fwrite(dt.n, .)
        rm(dt.n)
    }
})->t1 #(12.9  m)
setwd(patch)
dim(fread("train2_1.csv"))
#[1] 4030    3
dim(fread("train2_2.csv"))
#[1] 4030    6
dim(fread("train2_3.csv"))
#[1] 4030   10
dim(fread("train2_4.csv"))
#[1] 4030   13
dim(fread("train2_5.csv"))
#[1] 4030   16
dim(fread("train2_6.csv"))
#[1] 4030   17
dim(fread("train2_7.csv"))
#[1] 4030   18
dim(fread("train2_8.csv"))
#[1] 4030   18
dim(fread("train2_9.csv"))
#[1] 4030   18

Oldukça uzun bir süre sayıyor (12,9 dakika). Ancak çerçeve de küçük değil. Elbette bunu paralelleştirmemiz, daha hızlı bir cor fonksiyonu aramamız gerekiyor.

Farklı eşik değerlerine sahip ilk 21 tahmin ediciden farklı sayıda tahmin edici seçtik.

Ama bu gidilecek yol değil.

İyi şanslar

 
СанСаныч Фоменко #:

Sd'nin değişkenliğine dikkat etmediniz

Bir dahaki sefere dikkat edeceğim, sd'den sd'ye sd'den sd'ye sayacağım %)

 

Özellik penceresinin ofsetini bir göstergeye (örn. std) bağlamak hiçbir sonuç vermedi

değer ne kadar büyükse, bu değerin ofset katı da o kadar büyük olur.

ya da tam tersi. İkisini de denedim.

Ayrıca bir genişleme-daralma (+ ofset?) çeşidi de var, henüz denemedim.

Sadece fraktallar çerçevesinde bu tür varyantların bir numaralandırmasını görebiliyorum.

 
Vladimir Perervenko #:

1. "Caret" paketini global kapsama yüklemenize gerek yoktur. Çok ağırdır, çok fazla bağımlılık ve veri çeker. Sadece bir fonksiyonuna ihtiyacınız var. Doğrudan get.findCor işlevine içe aktarırsınız.

Vay canına, içi boş.

Vladimir Perervenko #:

Vladimir, yavaş "quantstrat" ve "SIT" hariç, işlemlerin ve her şeyin günlüğünü tutan (ilkel olmamak için) bir backtest paketi olup olmadığını biliyor musun?

 
Maxim Dmitrievsky #:

Özellik penceresinin ofsetini bir göstergeye (örn. std) bağlamak hiçbir sonuç vermedi

değer ne kadar büyük olursa, bu değerin ofset katı da o kadar büyük olur.

ya da tam tersi. İkisini de denedim.

ayrıca genişleme-daralma (+ ofset?) seçeneği de var, henüz denemedim.

Sadece fraktallar çerçevesinde bu tür varyantların aşıldığını görebiliyorum

Kesinlikle.

Her adımda herşeyin yeniden hesaplanması gerekir.

 
СанСаныч Фоменко #:

Kesinlikle.

Her adımda herşeyin yeniden hesaplanması gerekiyor.

Her çubuğu yeniden eğitmektense büyük bir veri kümesinde etiketleri ve özellikleri yeniden hesaplama yollarından geçmeyi daha kolay buluyorum, uzun süre takılıp kalacağım.

Ve sık sık yeniden eğiterek, küresel olarak bakarsanız bazı genel kalıplar belirlersiniz. Tabii bu tasarım dökülmüyorsa.
 
Maxim Dmitrievsky #:

Her çubuğu yeniden eğitmektense büyük bir veri kümesinde etiketleri ve çipleri yeniden hesaplamanın yollarını gözden geçirmek benim için daha kolay, uzun süre tak ılıp kalırım

Tamamen katılıyorum, EA'ya geçemememin nedeni de bu.

Ama bu bir prensip meselesi. Tüm veri setinin hazırlanması nedeniyle ortaya çıkan gizli ileriye bakma nedeniyle "her adımı öğret" şemasına geçtim. Tam olarak bu sorunu yaşıyorum ve "ileriye bakma" etkisini yaratan tahmin ediciler bulamadım.

 
СанСаныч Фоменко #:

Tamamen katılıyorum, EA'ya gitmemesinin nedeni de bu.

Ama bu bir prensip meselesi. Tüm veri setinin hazırlanması nedeniyle ortaya çıkan gizli ileriye bakma nedeniyle "her adımda öğret" şemasına geçtim. Tam olarak bu sorunu yaşıyorum ve "ileriye bakma" etkisini yaratan tahmin ediciler bulamadım.

Eğitim bölümü ile sınav arasında bir boşluk bırakın. En azından birkaç gün. Son çubuklar ilk bilinmeyenle aynı geleceğe sahiptir.
Ambargo grafiği olarak adlandırılır.
Eğitim 1 güne indirildiğinde ve test 1 gün olduğunda. Ve birkaç gün öncesindeki işaretleme tahminini izledi. Yani yeni çubuklar için ne olacağını gördü. Çok iyi sonuçlar elde edildi.
Eğitim aralığının bir haftaya çıkarılmasıyla, sonuç da 50/50'den daha yüksekti. Ne kadar çok olursa o kadar kötü)))) göz atma olan çizgiler göz atma olmayan çizgilere eklendi ve))))
her şeyi bozdular.


Genel olarak bu ambargo planı, öğretmen için bir göz atmadan daha az olmamalıdır.

 
mytarmailS #:

Vay canına, bu içi boş bir şey.

Vladimir, yavaş "quantstrat" ve "SIT" dışında işlemlerin ve her şeyin günlüğünü tutan (ilkel olmamak kaydıyla) bir backtest paketi olup olmadığını biliyor musun?

Bilmiyorum. Henüz tanışmadım.