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

 
트레이더 박사 :

고마워, 나는 그것을 시도했다. 뉴런이 쉽게 학습하고 테스트 데이터 세트에도 결과를 저장하기 때문에 예측 변수를 선택하는 데 많은 노력을 기울였음을 알 수 있습니다.

아래 결과는 R1.F3에 대한 교육을 나타냅니다.

1) Rattle에서 재미있는 결과가 나왔습니다. 표준 구성의 HH는 훈련/검증/테스트 오류(30%/29%/33%)를 보여주었습니다. R2.F3의 오류 - 35%. 그러나 이 모든 것은 단지 좋은 경우일 뿐입니다. 사실, 다른 구성에서는 쉽게 부족하거나 과도하게 훈련될 것입니다. 여기에서는 운이 좋습니다.

2) 그런 다음 제어 없이 학습하는 간단한 대략적인 접근 방식, 200개의 숨겨진 뉴런, 결과가 개선되지 않을 때까지 네트워크를 훈련했습니다. 훈련/검증/테스트/R2.F3 오류 - 2%/30%/27%/45%. 이것은 이해할 수 있습니다. 네트워크가 재교육되었습니다.

3) 통제하면서 학습한다. 이것은 나무와 다르지만 뉴런의 경우 다시 훈련하지 않으려면 항상 이 작업을 수행해야 합니다. 요점은 때때로 훈련을 일시 중지하고 훈련/검증/테스트 결과를 확인하는 것입니다. 결과 확인을 위한 황금률을 모르지만 완전히 정상적인 접근 방식은 훈련 데이터 세트에서 훈련한 다음 검증 및 테스트 데이터 세트의 오류를 보고 검증/테스트의 오류가 감소하는 것을 멈추면 훈련을 중지하는 것입니다. 이것은 재교육에 대한 일종의 보장을 제공합니다. 이 전체 과정에서 R2.F3은 사용할 수 없는 것으로 간주되며, 이에 대한 테스트는 교육이 종료된 후에만 수행됩니다. 이 경우 훈련/검증/테스트/R2.F3 오류는 27%/30%/31%/37%입니다. 여기서 다시 오버트레이닝이 관찰되지만 작습니다. 기차 오류가 눈에 띄게 덜 검증/테스트 오류가 된 후 교육 프로세스를 더 일찍 중지할 수 있었지만 이것은 이미 추측하고 있습니다... 도움이 될 수 있지만 할 수 없습니다.

"R1.F1"에는 3개의 값이 있는 대상 변수가 있습니다. Rattle은 뉴런으로 이를 수행할 수 없으며 R로 고유한 코드를 작성해야 합니다. 이 데이터 세트를 놓쳤습니다.

"R1.F4" "R1.F5" "R1.F6"은 4가지 오류 모두에 대해 Rattle의 뉴런에서 거의 동일한 결과를 제공했습니다. 그들과 더 이상 일하지 않았습니다.

나는 숲과 에이다에 대해 비슷한 번호를 가지고 있습니다.

이제 "양"으로 돌아가면 임의의 예측자 목록에서 노이즈를 버리는 방법은 무엇입니까? 나는 170개 중 27개의 예측 변수를 선택한 경험적 알고리즘을 가지고 있습니다. 또한 다른 사람의 예측 변수 집합을 분석하고 성공적으로 분석하는 데 사용했습니다. 이 경험을 바탕으로 알고리즘에서 변수의 "중요성"을 사용하는 R의 모든 방법은 예측 변수 집합을 노이즈에서 지울 수 없다고 주장합니다.

나는 지부의 모든 독자들에게 호소한다. 나는 소스 데이터가 처리가 필요하지 않은 RData나 Excel 파일의 형태로 제시된다면 적절한 분석을 할 준비가 되어 있다.

게다가.

첨부 파일에는 초기 예측 변수 집합을 노이즈로부터 청소하는 문제를 훨씬 더 높은 품질로 해결하는 것으로 추정되는 여러 기사를 첨부하고 있습니다. 불행히도 지금은 시도할 시간이 없습니다. 누군가 그것을 시도하고 결과를 게시할 것입니까?

 
산산이치 포멘코 :

첨부 파일에는 초기 예측 변수 집합을 노이즈로부터 청소하는 문제를 훨씬 더 높은 품질로 해결하는 것으로 추정되는 여러 기사를 첨부하고 있습니다. 불행히도 지금은 시도할 시간이 없습니다. 누군가 시도하고 결과를 게시할 수 있습니까?

감사합니다. 문서를 살펴보았지만 필요한 것을 찾지 못했습니다. M15-H4 재배포의 어딘가에서 Forex용으로 모델을 훈련시키려고 합니다. 마지막 막대에 대한 데이터를 가져오는 것만으로는 충분하지 않습니다. 한 번에 수십 개의 막대에 대해 가져와서 모델 입력을 위해 하나의 긴 배열에 차례로 넣어야 합니다. 예를 들어(open_bar1, close_bar1, hh_bar1, open_bar2, close_bar2, hh_bar2, open_bar3, close_bar3, hh_bar3,...). 일부 선택 방법에서 두 번째 막대의 시간을 제거해야 한다고 말하면 도움이 되지 않습니다. 예를 들어 모든 시간 데이터를 제거할 수 있다고 말하는 방법(인덱스 3,6,9... ).

ALL_cod.RData 파일에서 Rat_DF1을 교육용으로 사용할 수도 있고(원하는 대상을 지정하여) Rat_DF2 및 Rat_DF3을 검증용으로 사용할 수도 있다는 것을 정확히 이해했습니다. 관심 있는 사람들을 위해 내 R 코드를 첨부했습니다. 오류 제어로 신경망 교육을 구현합니다. 다른 대상 변수를 선택하려면 자동 고침 파일의 "Short_Long.75"를 "Short_Long.35", "Flet_Long", "Short_Flet", "Flet_In"의 항목으로 바꾸면 됩니다. 따라서 다른 데이터 세트를 대체하는 것보다 더 편리합니다.

파일:
 
트레이더 박사 :
M15-H4 재배포의 어딘가에서 Forex용으로 모델을 훈련시키려고 합니다. 마지막 막대에 대한 데이터를 가져오는 것만으로는 충분하지 않습니다. 한 번에 수십 개의 막대에 대해 가져와서 모델 입력을 위해 하나의 긴 배열에 차례로 넣어야 합니다. 예를 들어(open_bar1, close_bar1, hh_bar1, open_bar2, close_bar2, hh_bar2, open_bar3, close_bar3, hh_bar3,...). 일부 선택 방법에서 두 번째 막대의 시간을 제거해야 한다고 말하면 도움이 되지 않습니다. 예를 들어 모든 시간 데이터를 제거할 수 있다고 말하는 방법(인덱스 3,6,9... ).

mmm 세션 시장이 다르게 작동하므로 시간 데이터가 필요할 수 있습니다.

내 외환 기능 세트를 살펴보십시오.

> names(sampleA)

  [1] "lag_diff_2"        "lag_diff_3"        "lag_diff_4"        "lag_diff_6"        "lag_diff_8"        "lag_diff_11"       "lag_diff_16"     

  [8] "lag_diff_23"       "lag_diff_32"       "lag_diff_45"       "lag_diff_64"       "lag_diff_91"       "lag_diff_128"      "lag_diff_181"    

 [15] "lag_diff_256"      "lag_diff_362"      "lag_diff_512"      "lag_diff_724"      "lag_mean_diff_2"   "lag_mean_diff_3"   "lag_mean_diff_4" 

 [22] "lag_mean_diff_6"   "lag_mean_diff_8"   "lag_mean_diff_11"  "lag_mean_diff_16"  "lag_mean_diff_23"  "lag_mean_diff_32"  "lag_mean_diff_45"

 [29] "lag_mean_diff_64"  "lag_mean_diff_91"  "lag_mean_diff_128" "lag_mean_diff_181" "lag_mean_diff_256" "lag_mean_diff_362" "lag_mean_diff_512"

[36] "lag_mean_diff_724" "lag_max_diff_2"    "lag_max_diff_3"    "lag_max_diff_4"    "lag_max_diff_6"    "lag_max_diff_8"    "lag_max_diff_11" 

 [43] "lag_max_diff_16"   "lag_max_diff_23"   "lag_max_diff_32"   "lag_max_diff_45"   "lag_max_diff_64"   "lag_max_diff_91"   "lag_max_diff_128"

 [50] "lag_max_diff_181"  "lag_max_diff_256"  "lag_max_diff_362"  "lag_max_diff_512"  "lag_max_diff_724"  "lag_min_diff_2"    "lag_min_diff_3"  

 [57] "lag_min_diff_4"    "lag_min_diff_6"    "lag_min_diff_8"    "lag_min_diff_11"   "lag_min_diff_16"   "lag_min_diff_23"   "lag_min_diff_32" 

 [64] "lag_min_diff_45"   "lag_min_diff_64"   "lag_min_diff_91"   "lag_min_diff_128"  "lag_min_diff_181"  "lag_min_diff_256"  "lag_min_diff_362"

 [71] "lag_min_diff_512"  "lag_min_diff_724"  "lag_sd_2"          "lag_sd_3"          "lag_sd_4"          "lag_sd_6"          "lag_sd_8"        

 [78] "lag_sd_11"         "lag_sd_16"         "lag_sd_23"         "lag_sd_32"         "lag_sd_45"         "lag_sd_64"         "lag_sd_91"       

 [85] "lag_sd_128"        "lag_sd_181"        "lag_sd_256"        "lag_sd_362"        "lag_sd_512"        "lag_sd_724"        "lag_range_2"     

 [92] "lag_range_3"       "lag_range_4"       "lag_range_6"       "lag_range_8"       "lag_range_11"      "lag_range_16"      "lag_range_23"    

 [99] "lag_range_32"      "lag_range_45"      "lag_range_64"      "lag_range_91"      "lag_range_128"     "lag_range_181"     "lag_range_256"   

[106] "lag_range_362"     "lag_range_512"     "lag_range_724"     "symbol"            "month"             "day"               "week_day"        

[113] "hour"              "minute"            "future_lag_2"      "future_lag_3"      "future_lag_4"      "future_lag_6"      "future_lag_8"    

[120] "future_lag_11"     "future_lag_16"     "future_lag_23"     "future_lag_32"     "future_lag_45"     "future_lag_64"     "future_lag_91"   

[127] "future_lag_128"    "future_lag_181"    "future_lag_256"    "future_lag_362"    "future_lag_512"    "future_lag_724"

나는 이동 평균 , 고점과 저가, 그리고 창의 가격 범위에서 두 데이터를 모두 가져옵니다. 그리고 시간, 일, 심지어 개월까지)

내 알고리즘은 실제로 114개의 예측 변수 중 10개 또는 5개를 남길 수 있습니다. 이것은 정상입니다. 이러한 데이터에는 PREDICTORS 간에 강력한 상관 관계가 있으므로 강력한 중복성이 있습니다.

 

정보 기능을 선택하는 방법에 대해 간단히 알려 드리겠습니다. 코드가 첨부되어 있습니다.

질문에는 두 가지 측면이 있습니다. 하위 집합을 선택하는 방법과 출력 변수의 선택된 예측 변수의 관련성을 측정하는 방법입니다.

첫 번째 질문입니다. Simulated Annealing을 사용하여 예측자의 조합을 확률적으로 열거하여 해결합니다. 유전학 및 비결정적 경사하강법과 결과가 유사합니다. 국부적 최소값에서 선택하여 자연에 존재하는 원리에 따라 작동하는 것이 장점입니다. 매끄럽지 않은 오류 표면에서 작동할 수 있지만 여기에서는 모든 것이 조건부입니다.

예를 들어 많은 작업에서 이 방법의 지지자들은 유전학보다 방법이 더 낫다고 생각합니다. 거의 표준으로 R의 패키지를 통해 구현됩니다. 비결은 연속 데이터용이고 예측자 인덱스가 있으므로 총 예측자 수의 길이로 연속 벡터를 만들고 주어진 임계값이 스칼라에 의해 깨지면 예측자 인덱스가 1로 바뀝니다.

두 번째 질문 은 훨씬 더 미묘합니다. 피트니스 기능.

예측 변수(및 예측 변수 집합)가 출력에 영향을 미치는지 측정하는 방법입니다. 관계는 비선형적일 수 있습니다. 표준 회귀는 일부 비선형 문제에서 많은 문제를 일으킬 수 있습니다. 동시에, 나는 블랙박스 훈련과 내장 중요도 추정기를 사용하는 것에 대해 말하는 것이 아닙니다. 나는 별도의 방법에 대해 이야기하고 있습니다.

종속성은 매우 복잡할 수 있으며 상호 작용, 중복, 비선형성을 다시 포함할 수 있음을 이해해야 합니다. 이 모든 것은 범주형 데이터와 숫자 모두에 적용될 수 있습니다.

정보 이론(Information Theory)의 좋은 도구가 있기 때문에 범주형 데이터를 선택했습니다. 쉽게 말해서 입구와 출구가 있습니다. 출력 상태가 입력에 최소한 약간 의존하는 경우(확률적으로) 종속적입니다. 그런 것이 있습니다 - 상호 정보. 그녀는 그것을 측정합니다.

이제 더 깊이. VI는 유한 크기의 표본에서 관찰된 분포에서 무언가를 측정합니다. 이것은 물론 포인트 추정치입니다.

따라서 독립적인 입출력 쌍의 경우 정보의 통계적 경계를 추정할 필요가 있습니다. 이것은 수치적 방법에 의한 자체 작성 함수에 의해 수행됩니다.

더 깊게. 두 개 이상의 예측 변수가 있는 경우 이를 어떻게 처리할까요?

첫째, 그들 자체가 연결될 수 있으며 연결이 더 강력할수록 집합의 중복성이 더 커집니다. 이 중복성은 소위 측정합니다. 다중 정보. 그러나 다중 정보는 표본에 대한 점 추정치이기도 합니다. 이를 위해 분포 분위수도 다른 자체 작성 함수를 통해 수치적으로 계산됩니다.

둘째, 예측 변수 범주 의 수준 수가 너무 커서(예: 2 ^ 15) 이러한 수준의 종속성에 대해 아무 말도 할 수 없습니다. 레벨당 관찰이 거의 없습니다.

마지막으로, 이 모든 작업이 완료되고 종합되면 미리 결정된 통계적 유의성을 가진 임의의 샘플 크기에 대한 임의의 수의 예측 변수 및 출력에 대한 임의 유형의 종속성을 측정할 수 있습니다. Information Theory의 기본 기능 자체는 패키지에서 가져옵니다.

이 모든 것이 첨부 파일에 있습니다. 물론 100g이 없으면 거기에서 그것을 알아내는 것이 쉽지 않습니다. 거래 규칙 및 유효성 검사를 생성하기 위한 완전한 코드도 있습니다. 귀하의 정보 및 지식 심화를 위한 모든 것.

기본적으로 결과는 일반적으로 다음과 같습니다.

[1] "1.69%"

> final_vector <- c((sao$par >= threshold), T)

> names(sampleA)[final_vector]

 [1] "lag_diff_23"      "lag_diff_45"      "lag_mean_diff_2"  "lag_mean_diff_8"  "lag_max_diff_11"  "lag_max_diff_181" "lag_min_diff_3"   "lag_min_diff_724"

 [9] "lag_sd_724"       "lag_range_32"     "symbol" "future_lag_181"  

하루 반 동안 작업하고 수만 개의 예측 변수 조합을 통해 정렬한 후 함수는 적합성 함수의 값을 제공합니다. 이는 예측 변수 세트의 중복으로 인해 불이익을 받는 중요한 상호 정보입니다. 그리고 예측자 자체.

이 모든 것이 범주적이며 사람이 읽을 수 있는 규칙을 만들 수 있습니다. 발견된 규칙성의 해석을 허용합니다.

예를 들어, 위의 전체 결정성(Forex에 나쁘지 않음)의 1.7%와 0.1의 신뢰 수준(이것이 내가 실험을 설정한 방법)에서 중요한 입력 무리가 상태를 결정합니다. 출력(바이너리). 즉, 외환 데이터에 명확한 정보가 있습니다. 질문은 실험적으로 입증되었습니다.

그런 다음 유효성 검사 중에 수익성을 평가하고 거래 시스템을 코딩할 수 있습니다.

알렉세이

 
트레이더 박사 :


ALL_cod.RData 파일에서 Rat_DF1을 교육용으로 사용할 수도 있고(원하는 대상을 지정하여) Rat_DF2 및 Rat_DF3을 검증용으로 사용할 수도 있다는 것을 정확히 이해했습니다. 관심 있는 사람들을 위해 내 R 코드를 첨부했습니다. 오류 제어로 신경망 교육을 구현합니다. 다른 대상 변수를 선택하려면 자동 고침 파일의 "Short_Long.75"를 "Short_Long.35", "Flet_Long", "Short_Flet", "Flet_In"의 것으로 바꾸면 됩니다. 따라서 다른 데이터 세트를 대체하는 것보다 더 편리합니다.

네. 덜렁거림의 편의를 위한 것입니다.

뉘앙스 하나 더.

모든 대상 변수는 두 개의 33인 33(35) 및 33(25)에서 파생됩니다. 그리고 여기에 당신의 의견을 반영하는 매우 불쾌한 뉘앙스가 있습니다.

대상 변수는 33개의 팔에 해당하는 0과 1의 시퀀스입니다. 그러나 우리는 항상 암 자체가 아니라 33 암의 단일 요소를 예측합니다. 따라서 추세를 예측한다고 하는 것은 잘못된 것입니다. 추세 요소 가 예측된다는 말이 맞습니다. 그리고 추세의 예측 요소를 모두 더하면 추세가 작동하지 않을 가능성이 큽니다.

 

feature_selector_modeller.zip에 감사드립니다. 자세히 살펴보겠습니다.

산산이치 포멘코 :

나는 지부의 모든 독자들에게 호소한다. 나는 소스 데이터가 처리가 필요하지 않은 RData나 Excel 파일의 형태로 제시된다면 적절한 분석을 할 준비가 되어 있다.

파일을 첨부했습니다. 이것은 forex의 데이터 세트입니다. 훈련 및 검증을 위한 두 개의 데이터 세트가 있는 내부 RData. 물리적으로 두 데이터 세트의 데이터는 서로 따르며 모델 테스트의 편의를 위해 두 개의 파일로 나뉩니다. 이 데이터 세트에서 모델을 훈련할 수 있습니다. 수동으로 예측 변수를 선별하고 뉴런을 훈련시켰습니다. 결과적으로 검증 데이터 세트의 최소 오류는 46%였으며 이는 실제로 수익성이 없었습니다. 오차가 40% 이하로 떨어지면 실질 이익을 생각할 수 있다. 이 파일에서 예측자를 제거해 보십시오.

산산이치 포멘코 :

대상 변수는 33개의 팔에 해당하는 0과 1의 시퀀스입니다. 그러나 우리는 항상 암 자체가 아니라 33 암의 단일 요소를 예측합니다. 따라서 추세를 예측한다고 하는 것은 잘못된 것입니다. 추세 요소 가 예측된다고 말하는 것이 맞습니다. 그리고 추세의 예측 요소를 모두 더하면 추세가 작동하지 않을 가능성이 큽니다.

다른 대상 변수를 시도했습니다. 한편으로, 당신은 한 바 앞서 가격을 예측할 수 있고, 그 다음 목표 변수는 다음 바의 가격이 상승했는지 하락했는지에 따라 1 또는 0이 될 것입니다. 짧은 기간 동안 나는 어떤 결과도 얻지 못했습니다. 종가는 다소 임의의 숫자인 것 같습니다. 그러나 H1 이상에서는 이미 긍정적인 결과가 있습니다.

또 다른 옵션은 지그재그 또는 기타 추세 표시기 입니다. 나는 그와 함께 약간의 긍정적 인 결과를 얻었지만 뉴런의 결과가 필터를 통과했다는 조건하에. 예를 들어, 마지막 막대에 대한 결과의 평균을 취하거나 일부 임계값 이상의 결과만 사용합니다. 이 모든 것이 적용되어서는 안된다고 생각합니다. 정확한 계산보다 운세가 더 많습니다. 문제는 모델이 다음 10-20개 막대를 매수하라는 신호만 제공하면 되며 때로는 그 사이에서 매도 신호를 주기도 한다는 것입니다. 이 경우 거래가 반전되고 수수료와 스프레드가 지급되는 등 트렌드별로 여러 번 발생합니다. 따라서 높은 정확도를 달성하거나 결과를 매끄럽게 하여 단 하나의 막대에 대해 이러한 반전이 없도록 해야 합니다. 즉, 네, 말씀하신 대로 추세 요소만 예측되며 이러한 요소에서 추세를 추가하는 것은 그다지 성공적이지 않습니다.

파일:
set56.RData.zip  525 kb
 
Dr.Trader :


다른 대상 변수를 시도했습니다. 한편으로, 당신은 한 바 앞서 가격을 예측할 수 있고, 그 다음 목표 변수는 다음 바의 가격이 상승했는지 하락했는지에 따라 1 또는 0이 될 것입니다. 짧은 기간 동안 나는 어떤 결과도 얻지 못했습니다. 종가는 다소 임의의 숫자인 것 같습니다. 그러나 H1 이상에서는 이미 긍정적인 결과가 있습니다.


내 결과는 일관되게 반대입니다. 나는 55%의 정확도(Ask to Ask)로 몇 분 앞서(최대 1시간) 가격 움직임을 쉽게 예측합니다. 23분 동안 최고의 결과를 얻었습니다. 이것은 검증 샘플에 대한 이진 분류입니다.

그리고 예측 범위가 증가함에 따라 정확도는 12시간 전에 천천히 51%로 떨어집니다. 그리고 이 의존성은 역사 전반에 걸쳐 존재합니다. 그러나 이익을 얻으려면 정확도가 훨씬 높아야 합니다(매도 - 입찰 거리 극복).

나중에 더 논의하겠습니다.

 
Dr.Trader :

feature_selector_modeller.zip에 감사드립니다. 자세히 살펴보겠습니다.

파일을 첨부했습니다. 이것은 forex의 데이터 세트입니다. 훈련 및 검증을 위한 두 개의 데이터 세트가 있는 내부 RData. 물리적으로 두 데이터 세트의 데이터는 서로 따르며 모델 테스트의 편의를 위해 두 개의 파일로 나뉩니다. 이 데이터 세트에서 모델을 훈련할 수 있습니다. 수동으로 예측 변수를 선별하고 뉴런을 훈련시켰습니다. 결과적으로 검증 데이터 세트의 최소 오류는 46%였으며 이는 실제로 수익성이 없었습니다. 오차가 40% 이하로 떨어지면 실질 이익을 생각할 수 있다. 이 파일에서 예측자를 제거해 보십시오.


나는 단일 예측자를 찾지 못했습니다. 모든 것이 소음입니다. 대상 변수에 대한 예측 변수에는 예측력이 없습니다. 일부 힌트 54,55,56. 그들에게서 무언가를 얻을 수 있을지도 모릅니다 ... 그래서 제 생각에는 모든 것을 버릴 수 있습니다.
 
알겠습니다. 감사합니다. 다른 소스 데이터를 찾아보겠습니다.
 
트레이더 박사 :
알겠습니다. 감사합니다. 다른 소스 데이터를 찾아보겠습니다.

기다리다. 또한 종속성에 대한 데이터를 실행합니다.

시작하기 전에 질문 하나. 데이터에 모든 막대가 연속적으로 포함되어 있습니까? 아니면 샘플링 전에 막대가 얇아졌습니까?