트레이딩의 머신러닝: 이론, 모델, 실전 및 알고리즘 트레이딩 - 페이지 20

 
흥미로운 기사 https://geektimes.ru/post/144405/ , 아마도 누군가는 시뮬레이션을 사용하여 R에 어떻게 있는지 이해할 것입니다.
Прогнозирование финансовых временных рядов
Прогнозирование финансовых временных рядов
  • geektimes.ru
Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста. Пометьте топик понятными вам метками, если хотите или закрыть
 

그는 이전에 말한 동기를 기반으로 클러스터에 대한 실험을 시작했습니다. 나는 문제에 부딪쳤다 - 하나의 클러스터에 해당하는 조각의 가격을 붙이려고 할 때 접착하는 곳의 가격에 차이가있었습니다 (이것은 논리적이지만 나에게는 발생하지 않았습니다)) 문제는 이러한 격차를 제거하는 방법입니다

 # типа какая то цена
dat <- cumsum(rnorm( 1000 ))+ 1000
plot(dat,t= "l" )


# фун. матрицы хенкеля для имитации скользящего окна
hankel<- function(data, r= 10 ) {
   do .call(cbind,
          lapply( 0 :(r- 1 ),function(i) { data[(i+ 1 ):(length(data)-(r- 1 -i))]}))}
# делаем аналог скользящего окна глубиной в 50
glubina <- 50
D <- hankel(dat,r = glubina)


# скалирую и центрирую дату, проще сказать нормализирую
DC <- t(  apply(D, 1 ,    function(x) {  scale(x,T,T)  }    ))


library (SOMbrero)
# тренирую сеть кохонена на данных чтоб получить кластера
TS <- trainSOM(DC,  dimension=c( 3 , 3 ))

# край матрицы будет вектор нашей цены без первых значений
dt <- D[,glubina] 
# полученые кластера
cl <- TS$clustering

# график цены , график кластеров этой цены
par(mfrow=c( 2 , 1 ))
plot(dt,t= "l" )
plot(cl,t= "l" )
par(mfrow=c( 1 , 1 ))


# пробую посмотреть склееный график только одного кластера 
one_clust <- dt[cl== 3 ]
# график с разрывами в местах склейки
plot(one_clust,t= "l" )
 
트레이더 박사 :

나에게도 그런 문제가 있다. 일반적으로 속성(KZP)을 실행하여 사용 가능한 변수 목록을 찾은 다음, 예를 들어 KZP$window 등을 살펴보고 필요한 숫자를 찾는 것으로 충분합니다. 그러나 여기에서 이러한 숫자는 요약 기능 자체에서 생성되며 어디에도 저장되지 않습니다.

소스는 다음과 같습니다. https://cran.r-project.org/web/packages/kza/index.html, 다음과 같이 해야 합니다.

그건 그렇고, 이것은 지표를 사용하는 당신에게도 유용할 수 있습니다. 이 기능은 매우 시끄러운 데이터에서 주기적인 구성 요소를 보여줍니다. 즉, 이 기간은 시장에서 끊임없이 변화하고 있습니다.

결론은 모든 사람이 하는 것처럼 고정된 매개변수뿐만 아니라 이 지배적인 기간을 지속적으로 식별하고 이에 대한 지표를 조정하는 것입니다. 나는 이 접근 방식을 매우 피상적으로 테스트했고 임의의 날짜에 결과는 일반적인 접근 방식에 비해 긍정적이었습니다. RSI 지표를 가져 와서 고정 매개 변수와 병합하고 적응 형 지표로 얻었습니다 ... 따라서 관심이 있으시면 적용 할 수 있으며 연구 결과를 읽는 것이 매우 흥미로울 것입니다.

 
mytarmailS :

그는 이전에 말한 동기를 기반으로 클러스터에 대한 실험을 시작했습니다. 나는 문제에 부딪쳤다 - 하나의 클러스터에 해당하는 조각의 가격을 붙이려고 할 때 접착하는 곳의 가격에 차이가있었습니다 (이것은 논리적이지만 나에게는 발생하지 않았습니다)) 문제는 이러한 격차를 제거하는 방법입니다

가격 계열의 로그를 취하여 일련의 차이로 변환합니다. 결과 시리즈에 붙이기 위해 발견된 상태에 해당하는 간격만 남겨둡니다. 다음으로 이 시리즈에서 합산을 통해 새로운 시리즈를 만듭니다. 그리고 원한다면 나중에 폭로하십시오.
 
안톤 즈베레프 :
가격 계열의 로그를 취하여 일련의 차이로 변환합니다. 결과 시리즈에 붙이기 위해 발견된 상태에 해당하는 간격만 남겨둡니다. 다음으로 이 시리즈에서 합산을 통해 새로운 시리즈를 만듭니다. 그리고 원한다면 나중에 폭로하십시오.
감사합니다. 그렇게 상상했습니다. 시도해 보겠습니다.
 

몇 가지 다른 흥미로운 사실을 배웠습니다.

이전에 게시된 예측 변수 선별 기능(designTreatmentsN$scoreFrame)은 최종 예측 변수 집합을 명시적으로 제공하지 않습니다. 100% 상관된 예측자를 제거하지도 않으며 필요한 것을 제거하고 쓰레기를 남길 수 있습니다. 나는 그것들을 삭제하는 방법을 약간 복잡하게 했습니다. 먼저 designTreatmentsN$scoreFrame을 통해 이전 방식으로 예측자를 선택합니다(임계값이 2배가 되어 잠재적으로 더 적은 수의 예측자가 제거됨 - 2/N). 그런 다음 0.99보다 큰 서로 상관 관계가 있는 모든 예측 변수를 제거합니다(델타와 합계를 무작위로 생성한 후 많은 예측 변수가 있습니다. 그리고 대상 변수가 아닌 예측 변수 서로 간의 상관 관계를 봅니다). 그런 다음 유전자 알고리즘을 사용하여 나머지 예측 변수 중 가장 좋은 집합을 찾습니다.

주요 구성 요소에 대한 기사에서 다른 것을 사용하려고 합니다. 아래 함수는 주성분 모델을 빌드하고 발견된 모든 주성분이 사용되는 경우 R^2를 반환합니다. 기사의 다른 예와 같이 "Y 스케일"은 없지만 이 방법이 더 빠릅니다. 나는 이제 그것을 예측 변수 세트를 평가하는 데 사용합니다. srcTable 매개변수의 마지막 열은 대상 변수입니다. 예측 변수의 값이 너무 적으면 오류가 발생할 수 있으며 함수가 일부 데이터에 맞지 않을 수 있습니다.

library( 'caret' )
GetPCrsquared <- function(srcTable){
        targetName <- tail(colnames(srcTable), 1 )
        origVars <- setdiff(colnames(srcTable), targetName)
        # can try variations such adding/removing non-linear steps such as "YeoJohnson"
        prep <- preProcess(srcTable[,origVars], method = c( "zv" , "nzv" , "center" , "scale" , "pca" ))
        prepared <- predict(prep,newdata=srcTable[,origVars])
        newVars <- colnames(prepared)
        prepared$target <- srcTable$target
        modelB <- lm(paste(targetName, paste(newVars,collapse= ' + ' ),sep= ' ~ ' ),data=prepared)
         return (summary(modelB)$r.squared)
}

이전에 R^2가 약 0.1이었다면 지금은 0.3을 달성했습니다. 이것은 여전히 충분하지 않으며 최소 0.95가 권장됩니다. 또한 R^2=0.1일 때 전면 테스트에서 37%의 오류가 있었고 R^2=0.3일 때 이 오류가 45%로 증가한 이상한 순간이 있습니다. 아마도 문제는 예측 변수 집합에 더 많은 막대와 더 많은 지표를 추가했다는 것입니다. 한 걸음 앞으로, 두 걸음 뒤로, 이제 전체 지표 세트를 어떻게든 분석하고 불필요한 지표를 버려야 합니다. 또는 주성분 모델은 단순히 Forex에 적용할 수 없습니다(확인하기 어렵습니다. 먼저 R^2 > 0.95를 달성해야 하며, 전면 테스트에서 결과가 무엇인지 확인해야 합니다. 훈련되지 않은 모델).

또한 GA 패키지(유전학)와 GenSA(경사 어닐링, Alexey의 예)를 비교했습니다. 두 패키지 모두 동일한 결과를 얻었습니다. 유전학은 멀티 스레드로 작동할 수 있으므로 제 시간에 이겼습니다. 그러나 한 스트림에서는 GenSA가 이기고 있는 것 같습니다. 캐싱 결과에도 이러한 트릭이 있습니다. Alexey가 감사할 것이라고 생각합니다.

fitness_GenSA_bin <- function(selectionForInputs){
        testPredictorNames <- predictorNames[ which(selectionForInputs == TRUE ) ]
         #do the fitness calculation
}

library (memoise)
fitness_GenSA_bin_Memoise <- memoise(fitness_GenSA_bin)

fitness_GenSA <- function(selectionForInputs){
        selectionForInputs[selectionForInputs>= 0.5 ] <- TRUE
        selectionForInputs[selectionForInputs< 0.5 ] <- FALSE
         return (fitness_GenSA_bin_Memoise(selectionForInputs))
}

library (GenSA, quietly= TRUE )
GENSA <- GenSA(fn = fitness_GenSA,
                                lower = rep( 0 , length(predictorNames)),
                                upper = rep( 1 , length(predictorNames)),
                                control=list(smooth= FALSE , verbose= TRUE )
                                ) 

결론은 이러한 예측 변수 집합이 이미 한 번 이상 발생한 경우 중간 함수 fitness_GenSA_bin_Memoise가 캐시에서 데이터를 가져오는 것입니다. Fitness_GenSA_bin은 피트니스 함수 계산 자체를 포함해야 하며 각 고유 세트에 대해 한 번만 호출되어야 합니다.

mytarmailS :

그건 그렇고, 이것은 지표를 사용하는 당신에게도 유용할 수 있습니다. 이 기능은 매우 시끄러운 데이터에서 주기적인 구성 요소를 보여줍니다. 즉, 이 기간은 시장에서 끊임없이 변화하고 있습니다.

결론은 모든 사람이 하는 것처럼 고정된 매개변수뿐만 아니라 이 지배적인 기간을 지속적으로 식별하고 이에 대한 지표를 조정하는 것입니다. 나는 이 접근 방식을 매우 피상적으로 테스트했고 임의의 날짜에 결과는 일반적인 접근 방식에 비해 긍정적이었습니다. RSI 지표를 가져 와서 고정 매개 변수와 병합하고 적응 형 지표로 얻었습니다 ... 따라서 관심이 있으시면 적용 할 수 있으며 연구 결과를 읽는 것이 매우 흥미로울 것입니다.

지금은 지표에 표준 매개변수만 사용합니다. 그러나 그들은 선택해야합니다. 일반적으로 지표는 주로 D1의 주식 거래를 위해 개발 되었기 때문에이 기간에만 표준 매개 변수와 함께 유용 할 것입니다. 일반적으로 더 이상 D1에서 H1으로 결과를 전송할 수 없습니다. 더 많은 지표를 사용할수록 D1에 더 많이 갇히게 됩니다. 표시기의 매개변수는 시간대에 따라 변경되어야 하며 정시에 변경되어야 하는 것으로 나타났습니다.

 
트레이더 박사 :

몇 가지 다른 흥미로운 사실을 배웠습니다.

이전에 게시된 예측 변수 선별 기능(designTreatmentsN$scoreFrame)은 최종 예측 변수 집합을 명시적으로 제공하지 않습니다. 100% 상관된 예측자를 제거하지도 않으며, 필요한 것을 제거하고 쓰레기를 남길 수 있습니다. 나는 그것들을 삭제하는 방법을 약간 복잡하게 했습니다. 먼저 designTreatmentsN$scoreFrame을 통해 이전 방식으로 예측자를 선택합니다(임계값이 2배가 되어 잠재적으로 더 적은 수의 예측자가 제거됨 - 2/N). 그런 다음 0.99보다 큰 서로 상관 관계가 있는 모든 예측 변수를 제거합니다(델타와 합계를 무작위로 생성한 후 많은 예측 변수가 있습니다. 그리고 대상 변수가 아닌 예측 변수 서로 간의 상관 관계를 봅니다). 그런 다음 유전 알고리즘을 사용하여 나머지 예측 변수 중 가장 좋은 집합을 찾습니다.

주요 구성 요소에 대한 기사에서 다른 것을 사용하려고 합니다. 아래 함수는 주성분 모델을 구축하고 발견된 모든 주성분이 사용되는 경우 R^2를 반환합니다. 기사의 다른 예와 같이 "Y 스케일"은 없지만 이 방법이 더 빠릅니다. 나는 이제 그것을 예측 변수 세트를 평가하는 데 사용합니다. srcTable 매개변수의 마지막 열은 대상 변수입니다. 예측 변수의 값이 너무 적으면 오류가 발생할 수 있으며 함수가 일부 데이터에 맞지 않을 수 있습니다.

이전에 R^2가 약 0.1이었다면 지금은 0.3을 달성했습니다. 이것은 여전히 충분하지 않으며 최소 0.95가 권장됩니다. 또한 R^2=0.1일 때 전면 테스트에서 37%의 오류가 있었고 R^2=0.3일 때 이 오류가 45%로 증가한 이상한 순간이 있습니다. 아마도 문제는 예측 변수 집합에 더 많은 막대와 더 많은 지표를 추가했다는 것입니다. 한 걸음 앞으로, 두 걸음 뒤로, 이제 어떻게든 전체 지표 세트를 분석하고 불필요한 지표를 버려야 합니다. 또는 주성분 모델은 단순히 Forex에 적용할 수 없습니다(확인하기 어렵습니다. 먼저 R^2 > 0.95를 달성해야 하며, 전면 테스트에서 결과가 무엇인지 확인해야 합니다. 훈련되지 않은 모델).

또한 GA 패키지(유전학)와 GenSA(경사 어닐링, Alexey의 예)를 비교했습니다. 두 패키지 모두 동일한 결과를 얻었습니다. 유전학은 멀티 스레드로 작동할 수 있으므로 제 시간에 이겼습니다. 그러나 한 스트림에서는 GenSA가 이기고 있는 것 같습니다. 캐싱 결과에도 이러한 트릭이 있습니다. Alexey가 감사할 것이라고 생각합니다.

결론은 이러한 예측 변수 집합이 이미 한 번 이상 발생한 경우 중간 함수 fitness_GenSA_bin_Memoise가 캐시에서 데이터를 가져오는 것입니다. Fitness_GenSA_bin은 피트니스 함수 계산 자체를 포함해야 하며 각 고유 세트에 대해 한 번만 호출되어야 합니다.

지금은 지표에 표준 매개변수만 사용합니다. 그러나 그들은 선택해야합니다. 일반적으로 지표는 주로 D1의 주식 거래를 위해 개발 되었기 때문에이 기간에만 표준 매개 변수와 함께 유용 할 것입니다. 일반적으로 더 이상 D1에서 H1으로 결과를 전송할 수 없습니다. 더 많은 지표를 사용할수록 D1에 더 많이 갇히게 됩니다. 표시기의 매개 변수는 시간대에 따라 변경되어야 하며 정시에 변경되어야 합니다.

캐싱에 대한 멋진. 나는 이것을 직접 작성하려고 노력했다. 그리고 기성품 솔루션이 있습니다. 퀘루트. 고맙습니다.

그리고 반복할 때 어떤 피트니스 함수를 사용합니까? 나는 그것을 놓쳤다. 선형 의존성 또는 일종의 통계?
 
Dr.Trader :

기사의 다른 예에서와 같이 "Y 스케일"이 없습니다.

나는 기사의 전체 tsimus가 이것에 있다고 생각합니다. 다시 읽어보니 거기에 그렇군요.

예측자 목록을 준비하는 일반적인 계획으로 돌아가면.

노이즈 필터링은 문제의 일부일 뿐이며 이 영역의 나머지 문제 및 권장 사항을 해결하지 못합니다.

이 모든 작업이 완료되면 작업 알고리즘은 루프에 추가됩니다.

1. 선택되고 처리된 예측 변수 집합을 사용합니다. 이 목록은 영구적입니다.

2. 현재 창에서 예측 변수를 알고리즘 중 하나로 선택 합니다. 예를 들어 캐럿에는 두 가지가 있습니다.

3. 모델을 사용자 정의합니다.

4. 무역

5. 창을 이동하여 2단계로 이동

내가 손에 넣은 초기 예측기 세트에서 노이즈 예측기의 수는 80개가 넘었습니다!

또한, 알고리즘이 노이즈로 분류하지 않는 나머지 예측 변수 중에서 표준 알고리즘은 약 절반을 선택합니다. 창이 이동함에 따라 이 반쪽의 구성이 지속적으로 변경됩니다. 그러나 훈련 세트의 오류와 샘플의 오류는 항상 거의 같습니다. 여기서 나는 내 모델이 과적합되지 않았으며 이는 위에서 설명한 예측 변수 선택 알고리즘의 결과라고 결론지었습니다.

 

그리고 반복할 때 어떤 피트니스 함수를 사용합니까?

이전에 포리스트를 훈련했으며 유효성 검사 세트에서 오류를 반환했습니다. 원칙적으로는 효과가 있었습니다. 숲이 최소한 약간 재교육되면 오류는 즉시 50%가 되는 경향이 있습니다.

이제 위의 코드인 GetPCrsquared()를 사용하고 있습니다. feature_selector_modeller.txt의 예제도 있지만, 이를 파악하고 올바른 코드를 가져와야 하므로 아직 내 데이터에서 테스트하지 않았습니다.

 
산산이치 포멘코 :

나는 기사의 전체 tsimus가 이것에 있다고 생각합니다. 다시 읽어보니 거기에 그렇군요.

나는 Y 스케일도 시도했는데 두 경우 모두(Y 스케일이 있거나 없는) R^2가 동일하게 나왔습니다(이 경우 다른 패키지가 사용된다는 사실에도 불구하고!).

나는 Y-척도가 더 적은 수의 주성분으로 동일한 좋은 결과를 줄 수 있다는 것을 이해합니다. 그러나 모든 구성 요소를 사용해도 결과가 여전히 만족스럽지 않다면(지금처럼) 차이가 없습니다. 또한 더 빠르게 작동하므로 지금은 더 중요합니다. 사실, 나는 이 방법이 일반적으로 예측 변수를 선택하는 데 일반적으로 적합한지 여부를 이론이나 실습으로 아직 증명하지 못했습니다. 구성 요소. 그러나 쓰레기가 추가되면 R ^ 2 모델이 떨어지는 것을 알았습니다. 다른 예측 변수 세트를 시도하고 더 높은 R^2를 가진 예측 변수를 찾는 것이 논리적이지만 여전히 이론일 뿐입니다.

사유: