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

 

내 실험의 현재 상태입니다.

코드의 오류를 수정한 후 내 데이터에서 실제로 유효성 검사에서 다음과 같은 결과를 얻었습니다.

차트는 시장 진입에 대한 결정이 내려지지 않았을 때 통화 쌍, 예측 범위 및 소위 회색 영역(예측 기계의 출력 값의 간격)을 거칩니다.

보시다시피, 저는 이미 여러 쌍에 대해 긍정적인 MO를 가지고 있습니다. EURUSD의 경우 최대입니다. 동시에 모든 쌍(내 DC에서)에 대한 실제 스프레드를 사용하여 실험을 훨씬 더 정확하게 만듭니다.

spreads <- as.data.frame(cbind(

c('audusd'

, 'eurusd'

, 'gbpusd'

, 'usdcad'

, 'usdchf')

, c(0.00018

, 0.0001

, 0.00014

, 0.00013

, 0.00012)

)

)

이제 더 많은 매개변수를 분류하는 진정으로 강력한 일반화 실험을 시작했으며 약 1주일 동안 계속됩니다. 약 60배 더 많은 평가가 있을 것입니다. 그러나 그때 나는 확실히 비교를 위해 좋은 결과를 얻을 것입니다. 그리고 어디선가 약속한 대로 기본 논리로 테스트할 준비가 된 Expert Advisor(훈련된)를 게시합니다. 당신은 그것을 향상시킬 수 있습니다. MQL 코드에 다양한 개선제를 직접 추가하여 직접 수정하겠습니다.

소통까지.

 
알렉세이 버나코프 :

아니오, 당신은 비정상성의 중요성을 확실히 이해하지 못하고 있습니다. 신경망이든 선형 모델이든 내 모델이든 상관없습니다. 데이터가 고정적이지 않으면 해당 데이터에서 찾은 종속성이 샘플 외부에서 발생하지 않도록 보장됩니다. 형식에 있는 모든 데이터: 원가, MA(원가), 봉봉(원가) 등 모델에서 제거해야 합니다. 마지막으로 알려진 가격과의 차이를 가져와야 합니다.

여기에서는 간격으로 확장할 수 없습니다.

그렇게 나쁜 것만은 아닙니다. 각 훈련 예제를 별도로 고려하면(즉, 정규화할 때 훈련 테이블에서 한 줄로 작업) 모든 데이터를 각 훈련 예제에서 별도로 그룹별로 정규화할 수 있습니다. 예를 들어, 하나의 훈련 예제 내에서 모든 100개 막대(총 400개)에 대해 열 o, h, l, c를 가져와 최소값과 최대값, 척도를 찾습니다. 각 훈련 예제에 대해 개별적으로 이것을 차례로 반복합니다. 이러한 정규화는 각 행에서 훈련 테이블의 가격이 항상 엄격하게 [0..1] 간격에 있도록 보장합니다. 이제 미래에 가격이 교육 중 가격 제한을 훨씬 넘어선 새로운 예가 발견되면 정규화는 이를 [0..1]의 제한으로 되돌리며 이것은 일부 새로운 데이터가 아닙니다. 뉴런에 알려지지 않은 영역. 훈련된 모델은 "마지막 N개의 막대에 대한 가격이 0.8보다 한 번 이상 높았습니다"와 같은 일부 규칙을 쉽게 찾고 인식할 수 있으며 이 규칙은 가격이 두 번 하락하더라도 모든 새 데이터에 적용됩니다.

관례대로 각 열에 대해 개별적으로 정규화를 수행하면 전면 테스트에서 모델의 결과가 더 나빠집니다. 동일한 훈련 예제 내에서 동일한 유형의 예측자 간의 종속성이 손실되었습니다. (예를 들어, 동일한 훈련 예시의 Open[1], Open[2], Open[3],..는 모든 훈련 예시에 따라 다른 간격으로 조정됩니다.) 또한 수천 개의 훈련 예제를 기반으로 훈련 중에 정규화를 수행해야 하는 문제가 여전히 존재하며 실제 거래에서는 자체 클론에 의해 어떻게든 확장되어야 하는 단일 라인이 있을 것입니다. 이는 이해할 수 없고 이상합니다.

정규화를 전혀 하지 않으면 모든 것이 가능합니다. 그러나 가격이 훈련 중 사용 가능한 간격을 초과하여 하락/상승하면 이는 모델에 완전히 알려지지 않은 새로운 데이터 영역이 됩니다. 그녀는 그것을 꺼내 병합하지 않을 것입니다.

이것은 모두 경험에서 뉴런에 엄격하게 적용됩니다.

 

y-scale pca로 조금 더 일했습니다. 분산 공식이 있는 좋은 기사를 찾았습니다 . http://www.chemometrics.ru/materials/textbooks/pca.htm , R에서 했습니다.

같은 기사의 주요 코드 http://www.r-bloggers.com/principal-components-regression-pt-2-y-aware-methods/
" princ <- prcomp(dmTrain, center = FALSE, scale. = FALSE)" 코드를 실행하고 중지해야 합니다. 더 멀리:

extractProjection <- function(ndim,princ) {
   return (princ$rotation[, 1 :ndim]) #Эта функция уже была определена ранее, но в этот раз нельзя менять знаки в матрицах как раньше
}
countOfComponentsToUse <- ncol(princ$x) # сюда можно в цикле подставлять числа от 2 до ncol(princ$x), увеличивая число компонент до необходимой точности
PCnameList <- colnames(princ$x)[ 1 :countOfComponentsToUse]
proj <- extractProjection(countOfComponentsToUse, princ)
residualsMatrix <- dmTrain - ((princ$x[, 1 :countOfComponentsToUse]) %*% (t(proj)))
V0 <- sum(residualsMatrix*residualsMatrix)/nrow(dmTrain)
TRV <- V0/ncol(dmTrain)                           #полная дисперсия остатков (средний квадрат ошибок)
ERV <- 1 -nrow(dmTrain)*V0/sum(dmTrain*dmTrain)    #объяснённая дисперсия остатков, нужно увеличивать число компонент если ERV < 0.95

본질은 다음과 같습니다. princ 객체는 계정 행렬(princ$x)과 부하 행렬(princ$rotation)을 포함합니다. 이 두 행렬 princ$x %*% t(princ$rotation)를 곱하면 dmTrain 데이터(Y 스케일링, 대상 변수 없음)가 있는 원래 테이블을 다시 얻습니다.

주성분의 수를 제한할 수 있으며, 그러면 초기 데이터가 특정 오류와 함께 결정됩니다. 느린 인터넷과 로드할 때 더 선명하게 나타나는 특수 jpeg 이미지를 기억하는 사람이 있다면, 비슷한 것이 있을수록 더 많은 주요 구성 요소를 사용할수록 원본 데이터를 더 정확하게 얻을 수 있습니다.

구성 요소 수 N에 대해 초기 데이터는 다음과 같이 정의됩니다. princ$x[,1:N] %*% t(princ$rotation[,1:N]). 오류는 dmTrain에서 결과 행렬을 빼서 계산할 수 있습니다. 우리는 residualsMatrix 행렬을 얻습니다. 실제 데이터가 발견된 데이터와 얼마나 다른지 오류입니다. TRV는 제곱 오차의 평균입니다. ERV는 평균 오차와 같습니다. ERV=0.8일 때 원본 데이터는 테이블의 각 셀에서 발견된 데이터와 ~20% 차이가 납니다. 즉, 숫자 10이 발견되면 초기 데이터에서 8에서 12 사이일 가능성이 가장 큽니다. 이것은 매우 대략적인 정의이지만 의미는 이렇게 하면 더 명확해집니다. 그리고 PCA 모델에 충분한 구성 요소가 포함되어 있다고 간주하려면 0.95 이상이어야 하는 ERV입니다.

그것은 무엇을 제공합니까? 이제 새 매개변수 tol을 princ <- prcomp(dmTrain, center = FALSE, scale. = FALSE, tol=0.01)에 추가하여 수천 개의 주성분을 생성하지 않고 새 구성 요소는 < sdev(PC1) * tol 입니다. 그 후 위의 기능으로 사용하는 부품의 수를 2개부터 1개까지 점차적으로 선택할 수 있습니다.

아무 것도 생각나지 않을 때까지 예측 변수를 필터링하는 데 사용할 수 있는 방법을 알아 내려고 노력했습니다. 예를 들어, princ$rotation에서 하나의 예측 변수에 대해 부하를 0으로 바꾸고 ERV를 다시 계산하고 결과가 어떻게 악화되는지 확인할 수 있습니다. 사실, 나는이 행동의 요점을 알지 못하며이 결과를 적용하는 방법이 명확하지 않습니다. 아마도 이런 식으로 새로운 정보를 전달하지 않는 상관된 예측 변수를 찾을 수 있으므로 이를 삭제해도 결과가 악화되지 않을 수 있습니다. 잡음 예측자를 찾고 싶지만 이 행렬에는 대상 변수와 관련이 없습니다. 즉, 일반적으로 무엇이 잡음이고 무엇이 아닌지에 대한 기준이 없습니다.

 
Dr.Trader :

y-scale pca로 조금 더 일했습니다. 분산 공식이 있는 좋은 기사를 찾았습니다 . http://www.chemometrics.ru/materials/textbooks/pca.htm , R에서 했습니다.

같은 기사의 주요 코드 http://www.r-bloggers.com/principal-components-regression-pt-2-y-aware-methods/

기사를 다시 방문했습니다. 기사의 예를 어리석게도 한 점씩 반복하여 자신의 데이터로 바꾸려고 하지 않는 것 같습니다. 아니면 내가 뭔가를 놓쳤나요? 놓치지 않았다면 그 이유는 무엇입니까?
 

나는 그 예를 반복했다. 내 데이터로 대체하여 0.95의 분산에 대해 100개 이상의 주성분을 얻었습니다. 로딩 차트를 보았지만 명확하게 눈에 띄는 좋은 예측 변수는 없었습니다. 즉, 자신의 데이터에 대한 기사 작성자는 차트에서 2개의 주요 구성 요소와 5개의 예측 변수를 남길 수 있음을 알 수 있지만 내 데이터에는 100개 이상의 구성 요소와 1000개 이상의 예측 변수가 있습니다(로딩이 점차 감소하고 무엇인지도 명확하지 않습니다. 필터링할 부하의 임계값) .

Y-aware PCA를 인정해야 하지만 사전 심사 없이 방금 데이터를 연결하고 Y-aware PCA 모델을 구축했는데 전면 테스트에서 45% 오류가 발생했습니다. FX는 아직 수익이 나지 않지만 기사는 거기서 끝나기 때문에 y-ware pca를 사용하면 다른 것을 생각해 내야합니다.

다른 방법으로, 나는 12개의 예측 변수만 유지하고 nnet을 훈련할 수 있으며 전면 테스트에서 30%의 오류만 얻을 수 있습니다. y-aware pca로 비슷한 결과를 얻고 싶습니다.
 
트레이더 박사 :

나는 그 예를 반복했다. 내 데이터로 대체하여 0.95의 분산에 대해 100개 이상의 주성분을 얻었습니다. 로딩 차트를 보았지만 명확하게 눈에 띄는 좋은 예측 변수는 없었습니다. 즉, 자신의 데이터에 대한 기사 작성자는 차트에서 2개의 주요 구성 요소와 5개의 예측 변수를 남길 수 있음을 알 수 있지만 내 데이터에는 100개 이상의 구성 요소와 1000개 이상의 예측 변수가 있습니다(로딩이 점차 감소하고 무엇인지도 명확하지 않습니다. 필터링할 부하의 임계값) .

y-aware PCA를 인정해야 하지만 사전 심사 없이 데이터를 연결하고 Y-aware PCA 모델을 구축했는데 전면 테스트에서 45% 오류가 발생했습니다. FX 아직 수익이 안나는데 기사가 거기서 끝나서 y-aware pca를 쓰면 다른게 나와야지.

다른 방법으로, 나는 12개의 예측 변수만 유지하고 nnet을 훈련할 수 있으며 전면 테스트에서 30%의 오류만 얻을 수 있습니다. y-aware pca로 비슷한 결과를 얻고 싶습니다.
한 글자 한 글자씩 반복해야 한다고 생각합니다. 내가 당신에게서 보지 못한 PC를 제외하고 패키지가 사용됩니다.
 

https://c.mql5.com/3/97/Principal_Components_Regression__1.zip

여기 기사의 R 코드, 파일 _03.txt 및 _04.txt가 있습니다. 이미 내 데이터에 대해 이 모든 작업을 수행했습니다. _04.txt에 fronttest 데이터에 대한 검사도 추가했습니다. 내가 보는 유일한 차이점은 기사 끝에 제안된 etal 패키지입니다. 그러나 거기에는 예도 없으며 결과를 vtreat prune이 수행하는 것과 비교하려고 제안합니다.

 
트레이더 박사 :

https://c.mql5.com/3/97/Principal_Components_Regression__1.zip

여기 기사의 R 코드, 파일 _03.txt 및 _04.txt가 있습니다. 이미 내 데이터에 대해 이 모든 작업을 수행했습니다. _04.txt에 fronttest 데이터에 대한 검사도 추가했습니다. 내가 보는 유일한 차이점은 기사 끝에 제안된 etal 패키지입니다. 그러나 거기에는 예도 없으며 결과를 vtreat prune이 수행하는 것과 비교하려고 제안합니다.

꽤 견고해 보입니다.

그리고 유용한 결과가 없습니까?

 

기능 선택에 대한 내 기사.

https://habrahabr.ru/company/aligntechnology/blog/303750/

Методические заметки об отборе информативных признаков (feature selection)
Методические заметки об отборе информативных признаков (feature selection)
  • habrahabr.ru
Всем привет! Меня зовут Алексей. Я Data Scientist в компании Align Technology. В этом материале я расскажу вам о подходах к feature selection, которые мы практикуем в ходе экспериментов по анализу данных. В нашей компании статистики и инженеры machine learning анализируют большие объемы клинической информации, связанные с лечением пациентов...
 

안녕하세요!

한 가지 아이디어가 있습니다. 확인하고 싶지만 구현 도구를 모릅니다... 내 데이터에 따르면 3 또는 5와 같이 앞으로 여러 지점을 예측할 수 있는 알고리즘이 필요합니다(다음을 수행하는 것이 바람직합니다. 신경망)

그 전에는 분류 작업만 했습니다. 어떻게 생겼는지 도무지 이해가 되지 않고, 어떻게 했는지 알려주거나, R에서 패키지를 추천해 드리기도 했습니다.

추신 좋은 기사 알렉스

사유: