트레이딩의 머신러닝: 이론, 모델, 실전 및 알고리즘 트레이딩 - 페이지 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. "캐럿" 패키지를 전역 스코프에 로드할 필요가 없습니다. 매우 무겁고 많은 종속성과 데이터를 가져옵니다. 이 패키지는 하나의 함수만 필요합니다. 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에서 sd %로 계산하겠습니다.)

 

기능 창의 오프셋을 일부 지표(예: std)에 바인딩해도 아무 결과도 얻지 못했습니다.

값이 클수록 이 값의 오프셋 배수가 커집니다.

또는 그 반대의 경우도 마찬가지입니다. 둘 다 시도해 보았습니다.

확장 좁히기 (+ 오프셋?)의 변형도 있지만 아직 시도해 보지 않았습니다.

프랙탈의 프레임 워크 내에서 이러한 변형의 열거 만 볼 수 있습니다.

 
Vladimir Perervenko #:

1. "캐럿" 패키지를 전역 범위에 로드할 필요가 없습니다. 매우 무겁고 많은 종속성과 데이터를 가져옵니다. 하나의 함수만 필요합니다. get.findCor 함수로 직접 가져오면 됩니다.

와우, 비어 있네요

블라디미르 페레르벤코 #:

블라디미르, 느린 "quantstrat"과 "SIT"를 제외하고 트랜잭션 로그와 모든 것을 보관하는 백테스트용 패키지가 있는지 알고 계신가요 (원시적인 것은 아니지만)?

 
Maxim Dmitrievsky #:

기능 창의 오프셋을 일부 지표(예: std)에 바인딩해도 아무 결과도 얻지 못했습니다.

값이 클수록 이 값의 오프셋 배수가 커집니다.

또는 그 반대의 경우도 마찬가지입니다. 둘 다 시도해 보았습니다.

확장 좁히기 (+ 오프셋?) 옵션도 있지만 아직 시도해 보지 않았습니다.

프랙탈의 프레임 워크 내에서 이러한 변형의 오버 슈트 만 볼 수 있습니다.

물론이죠.

각 단계마다모든 것을 다시 계산해야 합니다.

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

물론입니다.

모든 단계에서 모든것을 다시 계산해야 합니다.

대규모 데이터 세트에서 레이블과 피처를 재계산하는 방법은 모든 막대를 재학습하는 것보다 훨씬 쉬우며, 오랜 시간이 걸립니다.

그리고 잦은 재학습을 통해 전 세계적으로 보면 어느 정도 일반적인 패턴을 파악할 수 있습니다. 물론 이 디자인이 쏟아지는 경우가 아니라면 말이죠.
 
Maxim Dmitrievsky #:

모든 막대를 다시 학습하는 것보다 대규모 데이터 세트에서 라벨과 칩을 다시 계산하는 방법을 검토하는 것이 더 쉽습니다.

전적으로 동의합니다. 이것이 제가 EA로 전환할 수 없는 이유입니다.

하지만 원칙의 문제입니다. 전체 데이터 세트의 준비로 인해 발생하는 숨겨진 앞보기 때문에 "모든 단계를 가르치는"계획으로 전환했습니다. 저는 바로 이 문제를 겪고 있으며, '미리 보기' 효과를 생성하는 예측 변수를 찾을 수 없었습니다.

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

전적으로 동의합니다. 이것이 EA로 가지 못하는 이유입니다.

그러나 그것은 원칙의 포브로스입니다. 저는 전체 데이터 집합을 준비하면서 발생하는 숨겨진 엿보기 때문에 "모든 단계에서 가르치기"체계로 전환했습니다. 저는 바로 이 문제를 가지고 있으며, '미리 보기' 효과를 생성하는 예측 변수를 찾을 수 없었습니다.

훈련 섹션과 테스트 사이에 간격을 두세요. 적어도 며칠은요. 마지막 막대는 첫 번째 미지의 미래와 동일한 미래를 갖습니다.
엠바고 플롯은 일종의 호출입니다.
일단 훈련이 1 일로 줄어들고 테스트가 1 일이었습니다. 그리고 며칠 전에 마크 업에 대한 예측을 보았습니다. 즉, 새로운 막대가 무엇인지 보았습니다.
훈련 간격을 일주일까지 늘리면 결과도 50/50보다 높았습니다. 글쎄, 더 나빠질수록 엿보기가있는 선이 엿보기없는 선에 추가되어 모든 것을 망쳤습니다))))
.


일반적 으로이 엠바고 플롯은 교사에게 엿보기 이상이어야합니다.

 
mytarmailS #:

와, 정말 공허하네요.

블라디미르, 느린 "퀀트스트랫"과 "SIT"를 제외하고 트랜잭션 로그와 모든 것을 보관하는 백테스트 패키지가 있는지 알고 계신가요?

모르겠습니다. 나는 만나지 못했습니다