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

 
마이클 마르쿠카이테스 :
아니, 아니, 시스템이 병합되었습니다. 표시하는 것조차 의미가 없습니다.

삼항 분류기가 논리를 변경했다는 경고를 깜빡했기 때문일까요?

이진 논리의 경우 논리는 동일하게 유지됩니다. 출력 값이 0보다 작으면 샘플에서 0과 같습니다. 더 많은 경우 샘플에서 1과 같습니다.

그리고 삼항 if 출력: 선택 항목에서 1로, 선택에서 0으로, jPrediction에서 "-"로 -1.

 


관심을 끌기 위해 8개 모델로 구성된 위원회로 구성되었으며 4000건의 거래(5.5년 거래)의 검증을 기반으로 합니다. 이것은 거래의 시작점(전략 테스터에서 실행을 제공함)을 조정하지 않고 예금 성장의 가능한 범위에 대한 아이디어를 얻기 위한 몬테카를로 시뮬레이션입니다. 여기에서 검증에 대한 MO는 0.00026 포인트입니다. 더 낮은 분위수는 분명히 0보다 높으며, 이는 내가 얻고자 했던 것입니다.

다음은 이 시리즈에 대한 회복 계수의 분포에 대한 분석입니다.

이것이 회복 계수가 분배되는 방식입니다. 중앙값 3.7은 일종의 목표값(계획)입니다. 낮은 분위수도 좋습니다.

다른 80개의 훈련 샘플에 대한 훈련이 실행될 때까지 기다려야 하며 위원회가 더 커질 것입니다.

 
유리 레셰토프 :

삼항 분류기가 논리를 변경했다는 경고를 깜빡했기 때문일까요?

이진 논리의 경우 논리는 동일하게 유지됩니다. 출력 값이 0보다 작으면 샘플에서 0과 같습니다. 더 많은 경우 샘플에서 1과 같습니다.

그리고 삼항 if 출력: 선택 항목에서 1로, 선택에서 0으로, jPrediction에서 "-"로 -1.

나는 이것을 이해하지 못했습니다. 모든 것이 이것으로 순서가 있습니다 .... 여기 문제가 다릅니다. 사실 Optimizer는 출력에 대한 정보가 포함된 데이터를 찾는 데 매우 유용합니다. 데이터가 80% 이상의 일반화로 발견되면. 그런 다음 이러한 데이터는 다른 네트워크 토폴로지에서 성공적으로 사용될 수 있으며 훈련 결과는 재훈련 등 없이 맨 위에 있게 됩니다. 옵티마이저를 거래에서 직접 사용하고 싶지 않은 분들을 위한 것입니다. 제 경우에는 출구를 분류하는 데 사용된 데이터가 완전히 성공적이지 않은 것으로 밝혀져 금요일 거래 결과가 우리가 원하는 것과 약간 다른 것으로 나타났습니다. 그러나 나는 우울해지지 않았고 모델을 반복적으로 구축할 때 입력 및 출력에서 쓰레기 상태로 이어지지 않는 또 다른 예측자 세트를 찾았습니다........ 어쨌든, 다음은 사용에 대한 몇 가지 권장 사항입니다. 분류기는 스마트 신호로 차량을 필터링합니다(예측 아님).

1. 매수 신호와 매도 신호를 따로 분리합니다. 이전 값의 데이터를 사용하고 그러한 분할이 데이터의 순서를 무너뜨리면 예측자 중 하나가 신호의 부호여야 합니다. 매수=1, 매도=-1 즉, 예측 변수 중 하나가 신호의 방향이 됩니다.

2. 예측은 어떤 식으로든 예측 시스템에 연결되어야 합니다. 나는이 Zscore 신호, Kelli 신호, 신호 순서를 가지고 있습니다 (시스템은 되돌릴 수 없으므로 한 방향으로 여러 신호가있을 수 있습니다). 일반적으로 어떤 방식으로든 시스템과 관련된 정보입니다. MT4 옵티마이저에서 별도로 모멘텀을 취할 수도 있습니다. 테스트 기간에 이익을 주는 매개 변수를 선택 하여 시스템의 신호를 거래합니다. 즉, 훈련 영역 등에서 시스템의 신호에 대해 모멘텀이 최적화됩니다.

3. 종료합니다. 내가 100핍의 이익을 빠져나가서 50%의 일반화를 주었고 10핍으로 변경되었고 일반화가 65%로 증가했기 때문에 이것은 가장 중요한 부분입니다. 이는 출력이 적절해야 함을 나타냅니다. Demark TS에서는 이것이 매우 어렵습니다. 이 경우 접근 방식의 공식화가 작동하지 않기 때문에 종종 수동으로 살펴봐야 합니다........ 그리고 훈련 영역에서는 신호에서 실수를 하는 것이 좋지만 동시에 모델을 얻습니다. 높은 수준의 일반화와 함께. 훈련에서 신호가 100핍을 얻었지만 시장이 신호의 반대 쪽에 경향이 있기 때문에 여전히 0으로 표시했다고 가정해 보겠습니다. 즉, 일반화 수준을 높이고 향후 TS가 더 잘 작동하도록 하기 위해 의도적으로 TS를 잃도록 합니다. 결국, 우리의 출력은 이상적입니다. 글쎄요, 조금 이상적이지는 않지만 정확합니다 ....

4. 예측에 CME 거래량을 사용하십시오. 이것은 실제로 작동하고 모델의 일반화 수준을 크게 높입니다. ...... 델타 클러스터에서 가져옵니다. 그래서 .....

 
알렉세이 버나코프 :

이것은 거래의 시작점(전략 테스터에서 실행을 제공함)을 조정하지 않고 예금 성장의 가능한 범위에 대한 아이디어를 얻기 위한 몬테카를로 시뮬레이션입니다.

트랜잭션의 시작점을 어떻게 이동시키든 모두 학습 기간 이후이기를 바랍니다. 예를 들어, 2015년 1월과 3월 데이터에 대해 모델을 훈련한 경우(2월 데이터 제거) 2월에 최종 검증을 수행하면 안 됩니다. 이러한 데이터는 훈련 샘플에 없었지만 이러한 결과는 신뢰할 수 없습니다. 검증은 모델 매개변수를 선택하기 위해 훈련 또는 교차 검증 동안 모델에서 사용할 수 있는 모든 날짜 이후에 2015년 4월부터 시작하는 경우에만 실제 거래에서 예상되는 적절한 결과를 보여줍니다.

귀하의 데이터에 대한 두 번째 시도(회귀는 [0;0.5;1]로 반올림)가 만족스럽지 않게 종료되었습니다. 모델과 유전학은 "거래하지 않음" 상수 클래스를 가진 변이체를 다시 선택했습니다.
분명히 3개의 클래스를 예측하려면 뉴런에 3개의 출력이 있어야 합니다. 그렇지 않으면 3개의 클래스를 레벨이 있는 하나의 출력에 맞출 수 없습니다. 아니면 "거래 금지" 클래스를 즉시 제거하고 2개를 남겨두고 작업해야 했습니다.

프론트 테스트에서 최소한 무언가를 확인하기 위해 유전학에서 선택한 예측 변수 목록을 가져 와서 교차 검증이있는 캐럿을 통해 뉴런을 훈련 시켰습니다 (모든 것이 옳고 입력이 3 개이고 요인이 있음). (메서드 = "repeaatedcv") . 결과적으로는 훈련 데이터에서도 정확도가 40%에 불과했습니다.
방금 유효성 검사 파일에 클래스가 출력으로 포함되지 않고 실수라는 것을 알았습니다. 나는 단순히 모든 양수에 대해 +1로, 모든 음수에 대해 -1로 대체했습니다.
다음으로 전면 테스트에 대해 두 가지 정확도를 얻었습니다.
1) 모델이 예측=0으로 거래되지 않아야 하는 경우 거래가 열리지 않고 최종 통계에 영향을 미치지 않기 때문에 올바른 결과는 중요하지 않습니다. 이 경우 예측 -1과 1이 51%의 시간 동안 정확합니다(예측=0인 모든 예는 무시).
2) 모든 예측을 수행하고 모든 올바른 결과와 비교합니다. 이 경우 정확도는 14%로 무작위보다 훨씬 나쁩니다.

트레이딩 에뮬레이터에서 모델을 매매하면 어떤 결과가 나올지 궁금합니다. 위와 같은 차트를 만들어주실 수 있으실까요? 그런데 제가 첨부한 모델로 매매를 하면 될까요?
RData 파일이 너무 커서 포럼에서 즉시 수락하지 않았습니다. 나는 두 개의 winrar 아카이브를 만들고 zip 아카이브에 별도로 넣었습니다. 두 zip 아카이브를 모두 추출한 다음 첫 번째 rar 아카이브를 열고 데이터를 추출해야 합니다. 두 번째 rar 아카이브는 자체적으로 선택합니다. 가장 중요한 것은 동일한 폴더에 있다는 것입니다.
또는 첨부된 r 스크립트를 실행할 수 있습니다. 여기에는 선택한 예측자 목록이 포함되어 있으며 이를 사용하여 모델을 생성합니다. 게시한 원본 csv 파일이 있어야 사용됩니다.
첨부 파일에서 RData를 연 후 동일한 스크립트를 실행할 수 있습니다. 스크립트는 새 모델을 만드는 대신 기성 모델을 사용합니다. 코드에는 예측 및 정확도 평가의 예가 있습니다. 프론트 테스트를 위해서는 이전에 게시한 RData 파일이 필요합니다.

과거의 실수를 감안하여 세 번째 시도를 시작합니다.

 
트레이더 박사 :

1) 모델이 예측=0으로 거래되지 않아야 하는 경우 거래가 열리지 않고 최종 통계에 영향을 미치지 않기 때문에 올바른 결과는 중요하지 않습니다. 이 경우 예측 -1과 1은 51%의 시간 동안 정확합니다(예측=0인 모든 예 무시).

오답의 경우 -2점, 정답의 경우 -1점, 정답의 경우 -1점을 부여했습니다. 답변에 대해 받은 점수의 비율은 어느 한 방향으로 또는 다른 방향으로 변경될 수 있지만 네트워크가 그렇지 않은 것이 중요합니다. 헛되이 유휴 상태이므로 "제지"에 대해 처벌해야합니다.

두 개의 네트워크로 구성된 위원회에서 각각 1개의 신호, -1(또는 0) 신호 없음, 신호가 모순되는 경우 최종 신호는 0입니다. 따라서 네트워크의 신호는 공통 신호 [-1 , 0, 1].

 

트레이더 박사 :

트랜잭션의 시작점을 어떻게 이동시키든 모두 학습 기간 이후이기를 바랍니다. 예를 들어, 2015년 1월과 3월 데이터에 대해 모델을 훈련한 경우(2월 데이터 제거) 2월에 최종 검증을 수행하면 안 됩니다. 이러한 데이터는 훈련 샘플에 없었지만 이러한 결과는 신뢰할 수 없습니다. 검증은 모델 매개변수를 선택하기 위해 훈련 또는 교차 검증 동안 모델에서 사용할 수 있는 모든 날짜 이후에 2015년 4월부터 시작하는 경우에만 실제 거래에서 예상되는 적절한 결과를 보여줍니다.


예, 물론, 당신은 절대적으로 확신할 수 있습니다. 이것은 검증일 뿐입니다. 트랜잭션의 시퀀스는 대량의 관찰에서 무작위 샘플을 기반으로 작성되었습니다. 거래 곡선이 어디에 있는지 이해하려면 몬테카를로가 필요합니다. 한 방향 또는 다른 방향으로 몇 분 동안 트랜잭션이 이동하면 자체 곡선이 생성됩니다. MT 테스터에서 하나의 곡선 - 하나의 구현을 봅니다. 각 계산에 난수 생성기 가 있는 조건을 만들고 난수로 여는 경우 전략 테스터를 500번 실행하고 동일한 곡선을 얻을 수 있습니다. 그러나 MT에서는 길 것입니다. 그리고 30초가 필요합니다.

그런 다음 위원회에 고문을 만들 때 전략 테스터에서 유효성 검사를 실행합니다. 곡선이 팬에 맞아야 하고 고유한 회복 계수 값과 기대 값을 얻습니다. 그러나 단 한 번의 실행으로 결론을 내리는 것은 불가능합니다. 탐탁지 않은.

 
트레이더 박사 :


트레이딩 에뮬레이터에서 모델을 트레이딩한 결과가 어떨지 궁금합니다. 차트를 위와 같이 만들어주실 수 있지만 제가 첨부한 모델로 트레이딩을 해주실 수 있나요?
RData 파일이 너무 커서 포럼에서 즉시 수락하지 않았습니다. 나는 두 개의 winrar 아카이브를 만들고 zip 아카이브에 별도로 넣었습니다. 두 zip 아카이브를 모두 추출한 다음 첫 번째 rar 아카이브를 열고 데이터를 추출해야 합니다. 두 번째 rar 아카이브는 자체적으로 선택합니다. 가장 중요한 것은 동일한 폴더에 있다는 것입니다.
또는 첨부된 r 스크립트를 실행할 수 있습니다. 여기에는 선택한 예측자 목록이 포함되어 있으며 이를 사용하여 모델을 생성합니다. 게시한 원본 csv 파일이 있어야 사용됩니다.
첨부 파일에서 RData를 연 후 동일한 스크립트를 실행할 수 있습니다. 스크립트는 새 모델을 만드는 대신 기성 모델을 사용합니다. 코드에는 예측 및 정확도 평가의 예가 있습니다. 프론트 테스트를 위해서는 이전에 게시한 RData 파일이 필요합니다.

과거의 실수를 감안할 때 나는 세 번째 시도를 시작합니다.

그리고 어떤 모델을 배우고 있습니까, 신경망 ?

나중에 해보도록 하겠습니다. 내 모델은 모든 코어에서 24시간 내내 학습하고 있습니다.

일반적으로 나는 당신 자신이 감사하다고 생각했습니다. 내가 참조로 제공한 검증 파일에서 모델의 예측을 대체하기만 하면 됩니다. 이것은 +1 / -1 / 0 방향이어야 합니다. 새 예측 열이 있을 것입니다. 예측 열에 대상 열을 곱합니다. 0.0001 스프레드를 뺍니다. 모델 출력이 0인 항목을 제거합니다. cumsum 함수를 사용합니다.

plot(cumsum(your_data$trades_simulated_after_spread), type = 'l')

 mean(your_data$trades_simulated_after_spread)

대략적으로 이것은 모든 관찰과 MO 수에 대한 거래 차트가 될 것입니다. 간단 해.

 
알렉세이 버나코프 :

신경망, 어떤 모델을 배우고 있습니까?

...

예측 열에 대상 열 곱하기

네, 신경망인 nnet 패키지를 배우고 있습니다. 이 경우 몇 가지 모델 매개변수를 선택하는 캐럿을 사용하여 모델을 훈련합니다.

RData 파일의 결과가 포함된 열을 다시 보았는데, 이제 이것이 가격 인상임을 즉시 알 수 있었습니다. 지난 번에는 일종의 가능성이라고 생각했습니다.
가격 인상을 목표 변수에 저장하는 방식이 마음에 들었습니다. 필요한 경우 교육용 클래스로 쉽게 변환하거나 이익을 계산할 수 있습니다. 나도 그렇게 할 것이다.

설명 덕분에 모든 것을 이해하고 이익을 계산하고 스프레드를 고려하고 차트를 그렸습니다. 불량, MO = -2.052423e-05, 느리지만 꾸준한 배수.

확산은 4가지 경우에만 고려되어야 합니다.
1, 2) 마지막 막대에 대한 예측값 = 0; 새 막대에 대한 예측 = -1 또는 1. 새 위치를 엽니다.
3) 마지막 막대에 대한 예측 = -1; 새 막대에 대한 예측 = 1. 반전, 이전 위치가 닫히고 새 위치가 열립니다.
4) 마지막 막대에 대한 예측 = 1; 새로운 막대 예측 = -1. 쿠데타, 이전 위치는 닫히고 새 위치가 열립니다.
다른 모든 경우에는 이전 위치가 이전 막대에서 그대로 유지되거나 이전 위치가 단순히 닫히거나 위치가 전혀 없습니다. 이 모든 것은 스프레드가 필요하지 않습니다.

(좀 더 정확히 말하면 매수 딜은 비드+스프레드에서 열리고, 매도 딜은 비드에서 열리고, 비드+스프레드에서 닫힙니다. 비드는 보통 단말기에 표시되는 가격입니다. 그러나 편의상 일정한 스프레드로 새 포지션을 열 때 한 번만 고려하면 충분합니다. 더 쉽습니다)

이 모든 것을 어드바이저에서 고려 하여 포지션을 닫지 않도록 해야 합니다. 포지션은 새 바에서 같은 방향으로 즉시 다시 열립니다. 한번은 그런 실수를 해서 브로커에게 리베이트를 받을 줄 알았다. 그러나이 경우 리베이트에 대한 거래 빈도는 효과가 없으며 모든 것이 악화됩니다.

 
Dr.Trader :

네, 신경망인 nnet 패키지를 배우고 있습니다. 이 경우 몇 가지 모델 매개변수를 선택하는 캐럿을 사용하여 모델을 훈련합니다.

RData 파일의 결과가 포함된 열을 다시 보았는데, 이제 이것이 가격 인상임을 즉시 알 수 있었습니다. 지난 번에는 일종의 가능성이라고 생각했습니다.
가격 인상을 목표 변수에 저장하는 방식이 마음에 들었습니다. 필요한 경우 교육용 클래스로 쉽게 변환하거나 이익을 계산할 수 있습니다. 나도 그렇게 할 것이다.

설명 덕분에 모든 것을 이해하고 이익을 계산하고 스프레드를 고려하고 차트를 그렸습니다. 불량, MO = -2.052423e-05, 느리지만 꾸준한 배수.

확산은 4가지 경우에만 고려되어야 합니다.
1, 2) 마지막 막대에 대한 예측값 = 0; 새 막대에 대한 예측 = -1 또는 1. 새 위치를 엽니다.
3) 마지막 막대에 대한 예측 = -1; 새 막대에 대한 예측 = 1. 반전, 이전 위치가 닫히고 새 위치가 열립니다.
4) 마지막 막대에 대한 예측 = 1; 새로운 막대 예측 = -1. 반전, 이전 위치가 닫히고 새 위치가 열립니다.
다른 모든 경우에는 이전 위치가 이전 막대에서 그대로 유지되거나 이전 위치가 단순히 닫히거나 위치가 전혀 없습니다. 이 모든 것은 스프레드가 필요하지 않습니다.

(좀 더 정확히 말하면 매수 딜은 비드+스프레드에서 열리고, 매도 딜은 비드에서 열리고, 비드+스프레드에서 닫힙니다. 비드는 보통 단말기에 표시되는 가격입니다. 그러나 편의상 일정한 스프레드로 새 포지션을 열 때 한 번만 고려하면 충분합니다. 더 쉽습니다)

이 모든 것을 어드바이저에서 고려 하여 포지션을 닫지 않도록 해야 합니다. 포지션은 새 바에서 같은 방향으로 즉시 다시 열립니다. 한번은 그런 실수를 해서 브로커에게 리베이트를 받을 줄 알았다. 그러나이 경우 리베이트에 대한 거래 빈도는 효과가 없으며 모든 것이 악화됩니다.

순서대로.

MO - 0.00002. 이것은 이미 확산 이상입니다. 즉, 모델은 노이즈로부터 무언가를 배웠지만 예측력이 충분하지 않습니다.

두번째. 교차 검증이 있는 캐럿. 데이터의 어느 부분이 특정 폴드에 들어갈지 지정했습니까? 기본적으로 CV(반복 CV)를 선택하면 모델은 테스트를 위해 무작위로 선택된 관찰을 사용합니다. 시계열의 경우 최선의 선택이 아닙니다.

다음으로 거래 시뮬레이션입니다. 특정 시간이 지나면 열리고 닫히는 신호가 있습니다. 그러면 하기가 훨씬 더 어려울 수 있습니다. 따라서 각 거래에 대한 스프레드를 고려할 때 나는 긍정적인 MO를 가지고 있습니다. 그리고 얻는 것이 현실입니다.

교차 검증을 처리합니다. 캐럿은 접기에 시계열의 특정 부분을 포함하도록 인덱스 세트를 생성하는 기능을 포함합니다.

그리고 뉴런 외에도 많은 다른 방법이 있습니다. 오늘날 최고의 제품 중 하나는 GBM 또는 XGBOOST입니다. 패키지가 호출됩니다. 지금까지는 첫 번째를 선택했습니다. 좋아요.

 

기본 분할과 함께 trainControl에서 "repeaatedcv" 메서드를 사용했습니다. 최근에 교차 검증을 위한 코드를 직접 작성했고 무작위로 가져온 막대와 간격 없이 순차적으로 가져온 조각으로 교차 검증을 시도했습니다. 전면 테스트에서는 차이가 없었습니다. 두 경우 모두 거의 동일한 결과를 보였습니다. 나는 훈련/교차 검증을 위해 데이터를 50%/50%로 나누었습니다. 아마도 이 비율에서는 더 이상 중요하지 않을 것입니다.
이것을 캐럿으로 실험합니다 ...

나는 당신이 최근에 게시한 기사에서 그에 비해 부스트 트리가 Platt 방법(이와 비슷한 것)에서 선두에 있었던 것을 기억합니다. 이 방법에 대해 Google에서 찾은 모든 것 - 모델의 출력을 시그모이드로 전송하고 결과를 가져와야 합니다. gbm 또는 xgboost 가 이것을 할 수 있습니까? 이 접근 방식은 2위인 숲, 뉴런 및 일부 "배지 나무"보다 나은 것 같습니다.

사유: