トレーディングにおける機械学習:理論、モデル、実践、アルゴトレーディング - ページ 2802

 
Aleksey Vyazmikin #:

あなたは以前、私がもう一度使おうと思った脚本を作ってくれた。

サンプルで それを実行したところ、エラーが出たんだ。

バイナリサンプルではすべてうまくいきました。

エラーは、相関行列に未定義の値(NA)が出現し、findCorrelation関数がそれを使用できないというものです。パッケージを開いて関数の説明を読んでください。

スクリプトは乱雑で、不必要な中間結果の海です。

#=====================================================================
 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)
}

順に説明する:

1.caret "パッケージをグローバルスコープにロードする必要はありません。これは非常に重く、多くの依存関係とデータを引っ張ってくる。必要なのは1つの関数だけです。それをget.findCor関数に直接インポートします。

tidyftパッケージは非常に高速なデータフレーム操作パッケージです。それを使ってください。

 

コントロールのために、このスクリプトを使って私のキットでテストしました。結果は

# 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

かなり長い時間(12.9分)カウントしている。しかし、フレームも小さくない。もちろん、並列化し、より高速なcor関数を探す必要がある。

異なる閾値を持つ最初の21の予測変数から、我々は異なる数の予測変数を選択した。

しかし、これは正しい方法ではありません。

幸運を祈る。

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

あなたはsdのばらつきに注意を払っていない

次回は注意します。sdをsdからsdから数えます %)

 

特徴ウィンドウのオフセットを何らかの指標(例えばstd)にバインドしても、何も得られなかった。

値が大きければ大きいほど、オフセットの倍数は大きくなる。

またはその逆。両方試してみた。

拡大縮小(+オフセット?)のバリエーションもあるが、まだ試していない。

私は、フラクタルという枠組みの中で、このような変形を列挙することしかできない。

 
Vladimir Perervenko #:

1.caret」パッケージをグローバル・スコープにロードする必要はない。これは非常に重く、多くの依存関係とデータを引っ張ってくる。必要なのは1つの関数だけだ。get.findCor関数に直接インポートするのだ。

うわー、空洞だ

Vladimir Perervenko#

ウラジミール、トランザクションのログを保持するバックテスト用のパッケージがあるかどうか知っていますか。

 
Maxim Dmitrievsky #:

フィーチャー・ウィンドウのオフセットを何らかの指標(例えばstd)にバインドしても、何も得られなかった。

値が大きいほど、この値のオフセット倍数も大きくなる。

またはその逆。両方試してみました。

拡大縮小(+オフセット?)のオプションもあるが、まだ試していない。

私は、フラクタルという枠組みの中で、このようなバリアントのオーバーシュートしか見ることができない。

もちろんです。

ステップごとにすべてを 再計算しなければなりません。

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

もちろんだ。

すべての ステップですべてを 再計算しなければならない。

すべてのバーを再トレーニングするよりも、大規模なデータセットでラベルと特徴を再計算する方法の方が簡単だと思います。

そして、頻繁に再トレーニングを行うことで、グローバルに見れば、何らかの一般的なパターンを決定することができる。もちろん、この設計が注ぎ込まれたものでなければの話だが。
 
Maxim Dmitrievsky #:

すべてのバーを再トレーニングするよりも、大規模なデータセットでラベルとチップを再計算する方法を検討する方が簡単だ

まったく同感です。これがEAに乗り換えられない理由です。

しかし、それは原則の問題だ。私が「ステップごとにティーチングする」方式に切り替えたのは、データセット全体を準備するために生じる隠れた先読みのためです。私はまさにこの問題を抱えており、「先読み」効果を生み出す予測因子を見つけることができませんでした。

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

まったく同感で、これがEA行きに失敗する理由だ。

しかし、これは原則的なことです。私が「各ステップでティーチする」方式に切り替えたのは、データセット全体を準備するために生じる隠れた先読みのためです。私はまさにこの問題を抱えており、「先読み」効果を生み出す予測因子を見つけることができませんでした。

トレーニング・セクションとテストの間に間隔をあけましょう。少なくとも2、3日。最後の棒グラフは、最初の未知数と同じ未来を持っています。
エンバーゴ・プロットは、一種の呼び出しです。
トレーニングは1日、テストは1日に短縮。そして、数日先のマークアップの予測を見た。すなわち、それは新しいバーのためになるものを見た。
トレーニングの間隔を1週間に広げると、結果は50/50よりも高くなった。まあ、多ければ多いほど - 悪ければ悪いほど、ピーキングのあるラインはピーキングのないラインに追加され、すべてを台無しにした)))
.


一般的に、この禁足プロットは教師にとってピーキングに劣らないはずである。

 
mytarmailS #:

うわぁ、空洞だ

ウラジミール、バックテスト用のパッケージで、トランザクションのログとか(まあ、原始的とまではいかないけど)、遅い「quantstrat」と「SIT」以外のものを保存しているものがあるかどうか知ってる?

私は知りません。私は会ったことがない

理由: