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

 
mytarmailS :

1) 네, 맞습니다. 하지만 이 네트워크는 스스로 의사결정을 하는 방법을 배울 수 있습니다. 이것은 교사가 없는 일반적인 분류가 아닙니다. 즉, 내가 오랫동안 이야기해 온 개념을 네트워크에서 구현할 수 있음을 의미합니다. time - by-sat-by 또는 00011101011의 형태로 표준 목표가 아니라고 가르칠 수 있습니다. 더 추상적으로 예를 들어 다음과 같은 조건을 설정하는 것은 어리석은 일입니다. 네트워크! 나는 당신이 그곳에서 어떻게 거래할지 상관하지 않지만, 나는 당신의 하루 수입이 최소 1% 드로우다운 0.5%가 되기를 원하며 그녀는 이 문제를 해결하기 위해 규칙과 조합을 찾을 것입니다. 내가 여기 어딘가에서 틀렸고 말도 안 되는 말을 했다면, 나를 위해 정정해 주세요)

정확히, 그것에 대해 생각하지 않았다, 당신이 맞습니다. 그런 다음 신경망에 샤프 비율(또는 회복 계수)을 최대화하기 위한 조건을 제공하고 R에서 실제 견적에 대한 간단한 외환 테스터와 같은 것을 만들어 진화를 평가하기 위해 모델을 테스트하는 것이 좋습니다. 그러나 기적은 저절로 일어나지 않을 것이고, 재훈련의 문제는 남을 것이고, 여전히 데이터를 훈련 세트와 테스트 세트로 나누어 진화 중에 모델의 최종 평가를 위해 교차 검증을 수행해야 합니다. 교차 검증 중에 샤프 비율로 작업하는 빠른 방법을 생각할 수 없었습니다. 제 생각에는 테스트 샘플에서 임의의 막대를 제거하는 것이 불가능할 것입니다. 중요한 것은 각 막대의 정확도가 아니기 때문입니다. 그러나 각 새로운 거래의 모든 손실, 스프레드 및 수수료와 함께 지속적인 거래 자체.

알렉세이 버나코프 :

그곳에서 R용 패키지를 준비하고 있는 것 같습니다. 우리는 주의해야 합니다.

패키지는 이미 존재하지만 얼마나 준비되었는지는 모르겠습니다. 지금은 github에 있습니다. 다음은 더 간단한 예입니다. 이 기사의 계속입니다. 네트워크에 루트를 추출하도록 가르칩니다.

http://gekkoquant.com/2016/07/17/rneat-square-root-neural-net-trained-using-augmenting-topologies-simple-example/

나중에 추가됨:

나는 첨부 파일의 코드(모델을 분류할 수 없음, 회귀를 위해 모든 클래스를 숫자로 대체하고 결과를 가장 가까운 수치 수준으로 반올림)에 따라 홍채를 분류했습니다. 아마도 이것은 어떻게 든 더 쉽게 수행될 수 있었을 것입니다. ).
데이터의 50%만 학습에 사용하고 95%는 검증에 성공했습니다. 꽤 괜찮습니다. 그래프로 판단하면 모델은 첫 번째 예측 변수 자체도 제거했습니다.

Forex는 홍채보다 더 복잡합니다. :) 결과는 훨씬 더 나빠질 것입니다.

또한 이 기사의 3부와 4부에서 모델을 훈련하는 데 서로 다른 기능이 사용된다는 사실도 확인했습니다.
모든 동적 프로세스를 모델링하기 위한 파트 3, 예를 들어 모델은 외환 차트를 모니터링하고 실시간으로 트랜잭션을 열고 닫을 수 있습니다.
파트 4 - 미리 만들어진 예제에서 모델을 훈련하고 결과를 예측하기만 하면 됩니다.

파일:
 
Dr.Trader :

1) 정확히, 나는 그것에 대해 생각하지 않았습니다. 모든 것이 맞습니다. 그런 다음 신경망에 샤프 비율(또는 복구 계수)을 최대화하기 위한 조건을 부여하고 R의 실제 따옴표에 대한 간단한 외환 테스터와 같은 것을 만드는 것이 좋습니다.

2) 나는 또한 이 기사의 파트 3과 4에서 모델을 훈련하는 데 서로 다른 기능이 사용된다는 것을 알았습니다.
모든 동적 프로세스를 모델링하기 위한 파트 3, 예를 들어 모델은 외환 차트를 모니터링하고 실시간으로 트랜잭션을 열고 닫을 수 있습니다.
파트 4 - 미리 만들어진 예제에서 모델을 훈련하고 결과를 예측하기만 하면 됩니다.

1) 절대적으로 옳다! 그것이 바로 내가 의미한 것입니다. 이익 / 손실은 단지 예일뿐입니다. 나는 회복 계수를 취할 것이라고 생각했지만 원칙적으로 샤프는 더 나쁘지 않습니다

2) 기사 4에서 작성자가 이미 패키지와 같은 것을 만들었으며 모든 "R" 표준에 따라 "예측" 예측을 통해 가능한 한 간단하게 모델을 가지고 있다는 점을 정확히 지적하셨습니다. 대상 벡터가 있습니다. - 하지만 이 특정 접근 방식은 모든 기능이 이미 패키지에 숨겨져 있기 때문에 우리에게 적합하지 않습니다. 소스 코드를 처리하고 모든 것을 직접 작성해야 합니다. "예제와 함께 기성품 패키지"보다 훨씬 더 복잡합니다. 파트 3의 기능조차도 우리가 필요한 것에 충분하지 않을 것 같습니다. 그래서 우리 모두가 이 문제에 연루된다면 정말 멋진 일이 될 것입니다.

 
mytarmailS :

1) 절대적으로 옳다! 내 말은 이익 / 손실은 단지 예일뿐이며 회복 계수를 취할 것이라고 생각했지만 원칙적으로 날카로운 것은 나쁘지 않습니다

2) 기사 4에서 작성자가 이미 패키지와 같은 것을 만들었으며 모든 "R" 표준에 따라 "예측" 예측을 통해 가능한 한 간단하게 모델을 가지고 있다는 점을 정확히 지적하셨습니다. 대상 벡터가 있습니다. - 하지만 이 특정 접근 방식은 모든 기능이 이미 패키지에 숨겨져 있기 때문에 우리에게 적합하지 않습니다 ... 소스 코드를 처리하고 모든 것을 직접 작성해야 합니다. "예제와 함께 기성품 패키지"보다 훨씬 더 복잡합니다. 파트 3의 기능조차도 우리가 필요한 것에 충분하지 않을 것 같습니다. 그래서 우리 모두가 이 문제에 연루된다면 정말 멋진 일이 될 것입니다.

그리고 당신 외에 누가 당신을 가르 칠 것입니까? 여기에서 소스 코드를 가져옵니다. 공부하다. 그리고 동시에 기능의 미분 가능성에 대해서도. 일부 부드러운 기능은 네트워크에 공급되어야 합니다. 그리고 알려주십시오) 우리는 조언 할 것입니다.
 
알렉세이 버나코프 :
일부 부드러운 기능은 네트워크에 공급되어야 합니다. 그리고 알려주십시오) 우리는 조언 할 것입니다.

방해하는 것을 용서하지만 매끄럽고 표준화되어 있습니다.

국회가 알고 있는 영역을 넘어서는 일이 없도록.

이 같은.

 

왜 그들이 이러한 네트워크에 집착하는지 이해할 수 없습니까?

결국, 그들은 가난한 패키지를 넘어 R의 확장으로 나아갔습니다! 그래서 아니, 오래된 죄가 당기고 당기고 ...

예를 들어 주의합시다. 150개의 모델뿐만 아니라 유용한 전처리 기능, 예측 ...

아니요, 네트워크와 네트워크 ...

 
산산이치 포멘코 :

이 그물이 무엇에 달라붙어 있는지 알 수 없습니까?

결국, 그들은 가난한 패키지를 넘어 R의 확장으로 나아갔습니다! 그래서 아니, 오래된 죄가 당기고 당기고 ...

예를 들어 주의합시다. 150개의 모델뿐만 아니라 유용한 전처리, 예측 기능도 많이 있습니다 ...

아니요, 네트워크와 네트워크 ...

그러니 가능한 한 빨리 캐럿과 150명의 모델이 작동하는 모습을 보여주세요! :)

 
바딤 쉬쉬킨 :

그러니 가능한 한 빨리 캐럿과 150명의 모델이 작동하는 모습을 보여주세요! :)

그건 그렇고, 나 자신도 캐럿을 사용하고 외환에서 만족스러운 결과를 얻습니다.

내 실험의 샘플 코드:

####
##########
############## start experiment
##########
####

library(caret)
library(gbm)
library(doParallel)

        
# tuning GBM - перебор параметров обучения по сетке
gbmGrid <- expand.grid(interaction.depth = seq( from = 3 , to = 9 , by = 2 )
                  , n.trees = seq( from = 600 , to = 1200 , by = 300 )
                  , shrinkage = seq( from = 0.01 , to = 0.02 , by = 0.005 )
                  , n.minobsinnode = seq( from = 30 , to = 60 , by = 30 ))

######################
# start training cycle - ввод основных переменных и массива для результатов

validating_arr <- data.frame()
max_best_models <- 1
counter <- 1
max_inputs <- 15
max_cv_folds <- 5
max_bag_fract <- 1
distributions <- c( 'gaussian' , 'laplace' )
start <- Sys.time()
        
for (best_inp_num in seq( from = 3 , to = max_inputs, by = 3 )){
        
         for (cv_folds in 2 :max_cv_folds){
                
                 for (bag_frac in seq( from = 0.2 , to = max_bag_fract, by = 0.2 )){

#########################
# prepare training scheme - параметры caret
                                        gbmControl <- trainControl(method = 'cv'
                                                                      , number = cv_folds
                                                                      , verboseIter = F
                                                                      , returnData = F
                                                                      , returnResamp = 'all'
                                                                      , savePredictions = 'none'
                                                                      , summaryFunction = mymetrics
                                                                      , search = 'grid'
                                                                      , allowParallel = T)

########################
# initiate paralleling
                        cores <- 4 #detectCores()
                        cl <- makePSOCKcluster(cores)
                        registerDoParallel(cl)
                        
                        # train the model - обучение моделей с кроссвалидацией. Используется GBM.
                        best_models <- train(training[, ncol(training)] ~.
                                                , data = training[, 1 :(ncol(training) - 1 )]
                                                , method = 'gbm'
                                                , distribution = distributions[ 2 ]
                                                , bag.fraction = bag_frac
                                                , metric = 'mae_improve'
                                                , maximize = T
                                                , trControl = gbmControl
                                                , tuneGrid = gbmGrid)
                        
                        # stop paralleling
                        stopCluster(cl)
                        
                        # summarize the model - сохранение n лучших моделей
                        best_models_arr <- as .data.frame(cbind(best_models[[ 4 ]][ 1 ]
                                                                    , best_models[[ 4 ]][ 2 ]
                                                                    , best_models[[ 4 ]][ 3 ]
                                                                    , best_models[[ 4 ]][ 4 ]
                                                                    , best_models[[ 4 ]][ 5 ]
                                                                    , best_models[[ 4 ]][ 6 ]
                                                                    , best_models[[ 4 ]][ 7 ]
                                                                    , best_models[[ 4 ]][ 8 ]))
                        
                        rm(best_models)
                        
                        best_models_arr_ordered <- best_models_arr[order(best_models_arr$mae_improve, decreasing = T), ]

# далее - обучение лучших моделей и их валидация


 
고맙습니다. :)
 
산산이치 포멘코 :

왜 그들이 이러한 네트워크에 집착하는지 이해할 수 없습니까?

결국, 그들은 가난한 패키지를 넘어 R의 확장으로 나아갔습니다! 그래서 아니요, 오래된 죄는 끌어 당기고 ...

예를 들어 주의합시다. 150개의 모델뿐만 아니라 유용한 전처리 기능, 예측 ...

아니요, 네트워크와 네트워크 ...

일반적으로 도서관에는 평범하지만 많은 것이 있거나 한 가지만 있으면 고품질일 수 있습니다. Caret은 첫 번째 경우로, 실제로 수십 개의 모델을 확인하고 결과를 비교하기는 쉽지만 작업에 대해 무언가를 개선하기는 어렵습니다. 내 규칙에 따라 예측 변수를 선택하는 데 큰 어려움을 겪었습니다. 캐럿은 예측 변수(및 유전학)를 열거하기 위해 어닐링을 시뮬레이션할 수 있지만 단순히 평가를 위해 내 적합성 함수를 사용할 수는 없습니다. 훈련, 검증 및 피트니스 기능을 사용하여 캐럿에 대한 새 모델을 생성해야 합니다. 그러나 캐럿은 여전히 자체 교차 검증과 함께 자체 규칙에 따라 훈련 및 테스트 데이터 세트를 제어합니다.
GA 또는 GenSA 패키지를 사용하여 예측자를 열거하고 필요한 규칙에 따라 모델 생성과 교차 검증이 모두 있는 하나의 피트니스 함수만 작성하는 것이 더 쉽습니다.

Neuronka는 숲보다 나쁘지 않습니다. 나는 여전히 긍정적 인 결과를 얻거나 최악의 경우 퇴적물을 배수하지 않고 있습니다. 알고리즘이 다르기 때문에 뉴런은 포리스트보다 다른 예측자를 선호하지만 예측자를 선택하는 모든 규칙은 포리스트의 경우와 완전히 동일합니다.

뉴런을 mt5 EA로 전송하는 것은 몇 분의 문제입니다(R에서 csv로 가중치를 저장하고 EA에서 읽기). 숲을 mt5로 옮기는 것은 훨씬 더 어려울 것이므로 뉴런을 선호합니다.

 

RNeat로 조금 더 실험을 해보니 일반 신경망 과 같은 방식으로 작업할 수 없다는 결론에 도달했습니다.

1) RNeat 훈련은 기존 모델과 달리 원시 데이터를 사용하지 않습니다. 모델은 무작위로 생성되고 개선되며 마지막에만 원본 데이터에 대해 테스트됩니다. 일반적으로 모델은 초기 데이터를 사용하여 논리를 구축한 다음 유효성 검사 세트에서 모델의 논리가 올바른지 또는 단순히 원본 예제를 암기했는지 여부를 확인할 수 있습니다. 다른 것들과 달리 RNeat는 원본 데이터에 대해 알지 못하기 때문에 원본 데이터를 전혀 기억할 수 없으며 모델이 알고 있는 모든 것은 필요한 결과와 원본 데이터에 얼마나 가까운지뿐입니다.

2) 교차 검증은 전면 테스트의 결과를 개선하는 데 도움이 되지 않습니다. 우리 모두는 일반 모델을 훈련하고, 몇 가지 교차 검증을 수행하고, 모델의 최종 적합성 평가를 위해 모든 샘플의 오류를 어떻게든 처리하는 것이 가능하다는 데 동의하는 것 같습니다. RNeat는 원본 데이터를 모르기 때문에 데이터가 훈련 또는 테스트 중 어느 샘플에 있는지는 중요하지 않으며 어떤 경우에도 논리를 원하는 결과로 조정합니다. 이론적으로 피트니스 기능에 사용되는 모든 샘플에 대해 "학습"(더 정확하게는 변경 :))합니다. 가능한 모든 것은 모델을 필요한 정확도로 훈련하고 과도하게 훈련되지 않기를 바라는 것입니다. 이는 외환에 대한 다소 위험한 접근 방식입니다. 교차 검증은 훈련 후에만 전면 테스트에서 가능한 결과에 대한 최종 평가로 사용할 수 있으며 어떤 경우에도 이 검증 세트를 피트니스 함수 내에서 사용해서는 안 됩니다.

사유: