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

 
알렉세이 버나코프 :
  • 최대 PV를 기준으로 모델을 선택하려고 합니다(이제 MO에 따라 선택). 즉, 모델의 품질을 평가하는 기능을 변경하겠습니다. 헐 ....

모델의 품질을 평가하기 위해 올바르게 선택된 기능은 매우 중요합니다. 왜냐하면 우리가 찾고 있고 최대화하려고 하는 것이 결국에는 얻을 것이기 때문입니다. 모델의 정확도를 사용하면 모델이 항상 예제 수가 가장 많은 클래스를 반환하는 로컬 최대값으로 쉽게 이동할 수 있습니다. 클래스가 불균형한 훈련 데이터의 경우 F-점수 또는 Cohen's Kappa가 더 좋습니다. 그러나 그것들을 가지고도 막대당 가격의 상승이 다를 수 있고 긍정적인 평가로도 마이너스로 끝날 수 있기 때문에 문제가 있었습니다. 동시에 여러 손실 거래는 대체할 수 없는 큰 손실을 입을 수 있습니다. 거래 시뮬레이션과 거래 결과를 기반으로 모델을 평가하는 것이 올바른 결정입니다. 저도 동의합니다. 저도 최근에 이 일을 시작했습니다. 약간의 감소가 있는 수익성이 필요하며 이는 모델 평가에서 이러한 개념을 사용해야 함을 의미합니다.

MO는 중요한 선택이 아니기 때문에 그다지 좋은 선택이 아닌 것 같습니다. MT5가 가지고 있는 EA 평가 기능 중 저는 Recovery Factor와 Sharpe 비율이 가장 마음에 듭니다.
회복 계수 - 최종 이익을 전체 기간 동안의 최대 손실로 나눕니다. 매우 간단하지만 효과적입니다.
Sharpe Ratio - 인터넷에 말로 설명은 많은데 공식은 많이 찾지 못했다. MT4에 그런 코드가 있는데, R에 이식해서 시도해 볼 가치가 있다고 생각합니다.

 double GetSharpeRatioFromHistory( double riskFreeYearlyIncome = 0.01 ){
   double profitsArray[];
   int profitsArraySize = 0 ;
   
   double profitsAvg = 0.0 ;
   int profitsAvgCount = 0 ;
   
   int ordersHistoryTotal = OrdersHistoryTotal ();
   if (ordersHistoryTotal == 0 ){
       return 0.0 ;
   }
   for ( int i= 0 ; i<ordersHistoryTotal; i++){
       if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )){
         if (( OrderSymbol () == _Symbol ) && ( OrderMagicNumber () == magic)){
             double profitForTrade = ( OrderProfit () + OrderCommission () + OrderSwap ());
             double seconds = double ( OrderCloseTime () - OrderOpenTime ());
             double riskFreeRate = riskFreeYearlyIncome / double ( 365 * 24 * 60 * 60 ) * seconds;
             double tradeResult = profitForTrade - riskFreeRate;
            
            profitsArraySize = ArrayResize (profitsArray, profitsArraySize+ 1 );
             if (profitsArraySize> 0 ){
               profitsArray[profitsArraySize- 1 ] = tradeResult;
            }
            
            profitsAvg += tradeResult;
            profitsAvgCount++;
         }
      }
   }
   
   if (profitsArraySize == 0 ){
       return 0.0 ;
   }
   
   profitsAvg /= double (profitsAvgCount);
   
   double stdDev = 0.0 ;
   for ( int i= 0 ; i<profitsArraySize; i++){
      stdDev += ((profitsArray[i]-profitsAvg)*(profitsArray[i]-profitsAvg)/ double (profitsArraySize));
   }
   
   if (stdDev == 0.0 ){
       return 0.0 ;
   }

   return profitsAvg/stdDev;
}

매개변수 riskFreeYearlyIncome - 무위험 투자(은행 예치금)에 대한 연간 이익, 예에서는 1%입니다. Sharpe Ratio는 그러한 투자보다 전략이 얼마나 더 나은지를 고려합니다.
double 초 = double(OrderCloseTime() - OrderOpenTime()) - 거래가 열린 시간(초). 막대 거래의 경우 이것은 각각 막대의 초 수입니다.

 
트레이더 박사 :

1) 모델의 품질을 평가하기 위해 올바르게 선택된 기능은 매우 중요합니다. 왜냐하면 우리가 찾고 있고 최대화하려고 하는 것이 결국에는 얻을 것이기 때문입니다.

2) 그러나 그것들을 가지고도 막대당 가격의 상승이 다를 수 있고 긍정적인 평가로도 마이너스로 끝날 수 있기 때문에 문제가 있었습니다. 동시에 여러 손실 거래는 대체할 수 없는 큰 손실을 입을 수 있습니다.

3) 거래 시뮬레이션과 거래 결과를 기반으로 모델을 평가하는 것이 올바른 결정입니다. 귀하의 의견에 동의합니다. 저도 최근에 이 일을 시작했습니다. 약간의 감소가 있는 수익성이 필요하며 이는 모델 평가에서 이러한 개념을 사용해야 함을 의미합니다.

4)

MO는 중요한 선택이 아니기 때문에 그다지 좋은 선택이 아닌 것 같습니다. MT5가 가지고 있는 EA 평가 기능 중 저는 Recovery Factor와 Sharpe 비율이 가장 마음에 듭니다.
회복 계수 - 최종 이익을 전체 기간 동안의 최대 손실로 나눕니다. 매우 간단하지만 효과적입니다.
Sharpe Ratio - 인터넷에 말로 설명은 많은데 공식은 많이 찾지 못했다. MT4에 그런 코드가 있는데, R에 이식해서 시도해 볼 가치가 있다고 생각합니다.


1) 절대적으로

2) 정확히.

3) 네, 평가에서 출발점 편향을 없애는 데 도움이 됩니다.

4) PV는 회복계수이다. 나는 그를 존경합니다. 평가함수에 적어둘께요, 쉽죠.

샤프. 모든 것이 간단합니다! 내가 설명한다.

a) 거래 결과의 벡터를 포인트로 얻었습니다. 맞죠?

b) 재투자로 거래를 시뮬레이션하고 포인트 벡터를 예금의 백분율 증가 벡터로 변환해야 합니다. 예시. 우리는 $100,000부터 시작합니다. 우리는 로트 0.1로 거래하고 0.001(10점)을 얻습니다. 로트당 $10입니다. 이는 이 값이 10/100,000으로 바뀌는 것을 의미하며, 로트 크기의 증감 등을 고려합니다.

c) 얻은 백분율 증가 벡터에 따라 평균, 표준 편차를 고려합니다.

d) 우리는 연간 특정 무위험 소득(3%)을 도입합니다. 이 숫자는 조건부 숫자이며 작은 것입니다.

e) 거래를 평균 연간 수익률로 전환하거나 연간 무위험 수익률을 거래당 평균 수익률로 분해해야 합니다. 완료.

e) (거래당 평균 수익률(기간) - 무위험 수익률) / 표준편차

아직 R 코드가 없습니다. 그러나 그러한 함수를 작성하는 것은 어렵지 않아야 합니다.

 

금융 시장에서 모든 것이 재교육되고 있습니다! 그들이 말하는 것조차도 재교육이 아니라 그곳에서 재교육을 받습니다.

강력한 선형 회귀는 더 적은 범위로 재학습하지만 새로운 데이터로 외삽하기 어려울 정도로 열악한 학습 품질을 제공합니다.

 
알렉세이 버나코프 :

처음부터 가격 인상을 분류하려는 당신의 아이디어는 나로부터 순전히 감정적인 거부와 만났습니다. 추세를 예측하면 ZZ를 보면 명확합니다. 여기에 한 클래스가 있고 여기에 다른 클래스가 있습니다. 가격 상승 차트를 보면 0 부근에서 혼란스러운 트위치입니다. 여기에서 명확하게 보이는 클래스는 어디에 있습니까?

이것들은 내가 통계에서 매우 중요하게 여기는 순전히 감정입니다. 수학 없이는 모든 것이 명확하고 분명해야 합니다.

또한 ARIMA-ARCH 장치는 금융 시장의 가격 인상을 위해 수년 동안 개발되었으며 꽤 잘 작동합니다. 이 오페라에는 심지어 허스트를 고려한 모델도 있습니다. 가장 좋은 분류는 무엇입니까?

분류는 패턴 - "머리와 어깨", 우리가 자동화하고 눈에 명확하게 보이는 클래스를 예측하는 검색입니다. 분류의 도움으로 패턴(예: 나무 형태)을 찾고 "이 패턴 뒤에 성장이 있을 것입니다. 목표 변수를 올바르게 공식화하면 그렇게 될 것입니다. 100 pips 나에게 훨씬 더 정확한 대상 변수처럼 보입니다.

결론. 항상 그렇듯이 목표 변수로 시작해야합니다. 목표는 우리의 모든 것입니다. 잘못된 목표는 늪으로 이어집니다.

 
산산이치 포멘코 :

처음부터 가격 인상을 분류 하려는 당신의 아이디어는 나로부터 순전히 감정적인 거부와 만났습니다. 추세를 예측하는 경우 ZZ를 보면 명확합니다. 여기에 한 클래스가 있고 여기에 또 다른 클래스가 있습니다. 가격 상승률 차트를 보면 0 부근에서 혼란스러운 트위치입니다. 여기에서 명확하게 보이는 클래스는 어디에 있습니까?

이것들은 내가 통계에서 매우 중요하게 여기는 순전히 감정입니다. 수학 없이는 모든 것이 명확하고 분명해야 합니다.

또한 ARIMA-ARCH 장치는 금융 시장의 가격 인상을 위해 수년 동안 개발되었으며 꽤 잘 작동합니다. 이 오페라에는 심지어 허스트를 고려한 모델도 있습니다. 가장 좋은 분류는 무엇입니까?

분류는 패턴 - "머리와 어깨", 우리가 자동화하고 눈에 명확하게 보이는 클래스를 예측하는 검색입니다. 분류의 도움으로 패턴(예: 나무 형태)을 찾고 "이 패턴 뒤에 성장이 있을 것입니다. 목표 변수 를 올바르게 공식화하면 그렇게 될 것입니다. 100 pips 나에게 훨씬 더 정확한 대상 변수처럼 보입니다.

결론. 항상 그렇듯이 목표 변수로 시작해야합니다. 목표는 우리의 모든 것입니다. 잘못된 목표는 늪으로 이어집니다.

감정적으로 뭐가 문제인지 모르겠네요. 이것은 옵션 중 하나입니다. 양초의 색깔은 또한 불립니다.

회귀 및 분류 작업은 수익성 있는 시스템을 구축하는 단계 이전의 대상이었습니다.

나아가 성장의 신호일 뿐만 아니라 모듈러스가 큰 성장을 예측한다는 결론에 이르렀다. 즉, 시스템이 성장뿐만 아니라 강력한 성장을 예측하는 경우에만 진입점을 구매하십시오. 또한 셀과 함께. 공식적으로 기계는 회귀를 학습합니다. 그리고 나서 나는 그것의 출구를 채널에 매달려 있는 강한 상승, 강한 하락으로 해석합니다.

이것은 100핍의 미래 발전을 예측하는 것과 매우 가깝습니다. 나 자신만이 그러한 목표의 공식화를 어떻게 보는지 이해하지 못합니다. 성장은 무엇을 의미하며, 성장 전에 90포인트 하락이 있었고 이 성장이 일주일 후에만 달성된다면?

나는 9시간, 약 20포인트의 수평선에 강한 성장을 가지고 있다. 9시 이후에는 거래가 마감됩니다.

그리고 사실 지금은 클래스(성장/하락/댕글/강성장)를 전혀 예측하지 못합니다. 사실, 나는 훈련 단계에서 평가가 거래의 기대 가치로 측정되는 시스템을 구축하고 있습니다. 즉, 분류 정확도가 낮을 수 있지만(저의 경우 53%), 올바른 방향으로 치면 치지 않는 것보다 약간 더 크게 증가합니다. 문제 공식의 차이를 느끼십니까? 분류 정확도는 상관 관계가 있지만 거래 수익성과 완전히 일치하지는 않습니다.

 

그건 그렇고, 모델의 품질을 평가하는 함수로서의 회복 계수도 단방향입니다. 나는 10개의 거래와 1개의 손실 거래, 또는 500개의 거래와 10개의 손실 거래를 얻을 수 있습니다. 두 번째 경우 EF는 더 낮을 수 있고 이익은 50배 더 높습니다.

또는 총 이익을 취하여 최대 손실액을 뺄 수 있습니다. 여기에서 최소한 이익이 최대화될 것입니다.

또는 전통적인 이익 요소: 총 이익/총 손실.

 
알렉세이 버나코프 :

두 번째 경우 EF는 더 낮을 수 있고 이익은 50배 더 높습니다.

그것은 당신이 기꺼이 감수할 위험에 관한 것입니다. 예를 들어, 두 가지 신호가 있습니다. 첫 번째 신호는 최대 10%의 손실로 연간 100%의 이익을 가져옵니다. 두 번째 신호 - 연간 300%의 이익과 40%의 손실을 가져옵니다. 따라서 이익 측면에서 두 번째 신호가 선두에 있습니다.
그러나 PV를 계산하면 첫 번째 신호가 리더가 되고 이것이 정확합니다. 첫 번째 신호의 트랜잭션 크기(로트 단위)를 4배로 간단히 늘릴 수 있기 때문에 동일한 손실을 줄 것이기 때문입니다. 두 번째 신호이지만 더 큰 이익이 있습니다. 또는 계정 잔액의 큰 비율을 위험에 빠뜨리고 싶지 않은 경우 두 번째 신호의 로트 크기를 4배로 줄일 수 있습니다. 그러면 원하는 잔액의 10%에 대한 위험이 있지만 이익은 또한 첫 번째 신호에 비해 적습니다.

즉, 전략에 따른 거래 계획은 다음과 같을 수 있습니다. 롤포워드를 사용하여 전략에 따라 거래할 때 가능한 최대 손실을 결정합니다. 이 인출액이 계정 잔액에 대해 허용한 값보다 많거나 적은 횟수를 계산합니다. 이 숫자가 수렴하도록 로트 크기를 계산합니다.
PV를 사용한다는 것은 거래를 시작하기 전에 모든 위험을 계산하고 적절한 로트 크기를 결정한다는 것을 의미합니다. 거래 시 전략의 드로다운이 작을수록 사용할 수 있는 거래의 크기가 커집니다.

 
알렉세이 버나코프 :

또는 전통적인 이익 요소: 총 이익/총 손실.

IMHO, 더 허용되는 것은 다음과 같습니다.

TS_evaluation_criteria = sum_of_profit_trades / (sum_of_profit_trades + sum_of_loss_trades)

고정 로트 거래 대상입니다.

이 경우 기준이 0.5보다 높으면 TS가 최종 이익을 표시하고 그렇지 않으면 손실을 표시합니다.

기준의 장점은 엄격하게 정규화되고 해당 값이 0에서 1.0까지의 범위를 벗어날 수 없다는 것입니다.

손실은 TS의 최종 이익에도 불구하고 이 기준의 가치에 부정적인 영향을 미칩니다. 부정적인 요소로 고려됩니다.

 
유리 레셰토프 :

IMHO, 더 허용되는 것은 다음과 같습니다.

TS_evaluation_criteria = sum_of_profit_trades / (sum_of_profit_trades + sum_of_loss_trades)

고정 로트 거래 대상입니다.

이 경우 기준이 0.5보다 높으면 TS가 최종 이익을 표시하고 그렇지 않으면 손실을 표시합니다.

기준의 장점은 엄격하게 정규화되고 해당 값이 0에서 1.0까지의 범위를 벗어날 수 없다는 것입니다.

손실은 TS의 최종 이익에도 불구하고 이 기준의 가치에 부정적인 영향을 미칩니다. 부정적인 요소로 고려됩니다.

"sum_of_losing_trades" - 분명히 할게요. 절대값 을 의미합니다. 감사합니다. 그런 정규화된 기준은 본 적이 없습니다.
 
유리 레셰토프 :

IMHO, 더 허용되는 것은 다음과 같습니다.

TS_evaluation_criteria = sum_of_profit_trades / (sum_of_profit_trades + sum_of_loss_trades)

고정 로트 거래 대상입니다.

이 경우 기준이 0.5보다 높으면 TS가 최종 이익을 표시하고 그렇지 않으면 손실을 표시합니다.

기준의 장점은 엄격하게 정규화되고 해당 값이 0에서 1.0까지의 범위를 벗어날 수 없다는 것입니다.

손실은 TS의 최종 이익에도 불구하고 이 기준의 가치에 부정적인 영향을 미칩니다. 부정적인 요인으로 고려됩니다.

그리고 몇 번의 거래에서 주요 이익이 나오고 수천 개의 다른 거래에서 작은 손실이 발생한다면? - 얼음이 아닌 것처럼.
사유: