환율 시계열 데이터를 클러스터링 한 이야기

본 기사 내용 요약


  • 환율 데이터를 클러스터링해 보았습니다.
  • k-means, 유클리드 거리를 사용했습니다.

  • 상위 다리 (보다 긴 시간축) 데이터를 결합하면 유용합니다.
  • 상위 다리를 사용하면, 라벨(이식:1, 손해:-1, 보유 시간에 의한 결제:0)의 비율의 편향이 양호화되었다.


  • 개발 환경


  • Colaboratory
  • scikit-learn


  • 데이터 준비



    2018.01~2019.04의 USD/KRW 사용,
    5분 다리에서의 이동 평균선의 골든 크로스의 엔트리 포인트를 샘플 데이터로 했습니다. (2482 데이터)
    * 특징량:
    * 엔트리 포인트 전 약 3 시간 분의 데이터 (ohlc)
    * RSI

    라벨링



    라벨링은 다음 규칙에 따라 수행되었습니다.


    Result
    라벨


    Profit
    1

    Loss
    -1

    보유시간에 의한 결제
    0


    이번은, 대략 3등분되도록 손절과 이식의 라인을 설정했습니다.

    클러스터링



    예상 결과

    이하의 그래프와 같이, 클러스터마다 "이식"/"손절"/"보유 시간에 의한 결제"가 각각 깨끗하게 나누어질 것을 기대했습니다.



    이것이라면, 클러스터 2의 경우는 다마시라고 판단해, 트레이드를 배웅할 수 있군요.

    결과

    scikit-learn의 TimeSeriesKMeans를 사용하여 클러스터링하고 각 클러스터의 레이블 비율을 표시하고 승률 순서로 정렬했습니다.



    이마이치. .
    승률 최대 클러스터는 45%, 최소 클러스터는 22%였습니다.
    원래가 거의 3등분(33%)이므로, 조금은 나눌 수 있을 것 같습니다만, 좀 더 깨끗하게 나누어져 싶은 곳입니다.

    상위 발 추가

    개선을 목표로 다음의 더 긴 시간 발 정보를 특징 량에 추가하기로 결정했습니다.
    * 30분 발로 오실레이터계의 인디케이터
    * 2시간 발로 트렌드 팔로우형 인디케이터

    그 결과는 다음과 같습니다.


    승률 최대 클러스터는 63%, 최소 클러스터는 14%였습니다.
    상위 다리의 정보를 추가하여 오이타 양화했습니다.
    상위 다리의 정보가 유용하다는 것을 다시 확인할 수 있었기 때문에 좋았던 것이 아닐까요.
    이 정도의 결과라면 다마시를 회피하는 것은 어려울 것 같습니다만, 포지션의 수량의 조정에는 사용할 수 있을 것이라고 개인적으로는 생각했습니다.

    기사를 읽어 주셔서 감사합니다.

    참고


  • 파이썬에서 시계열 데이터를 클러스터링해 봅시다.
  • 금융 기계 학습
  • 좋은 웹페이지 즐겨찾기