[초보의 Coding 따라가보기] ft. 퀀트 도전... (neurodoc님) LPPL 관련

[초보의 Coding 따라가보기] ft. 퀀트 도전... (neurodoc님) LPPL 관련

avatar
Pioneer
2025.03.05조회수 41회

neurodoc님의 포스팅

퀀트 도전- 월간 퀀트스터디, LPPL) 파이썬 LPPL 코드로 과거 TSLA 주가 분석해보기(코드 수정됐으니 받아가신 분들 필독!!)

이게 급 궁금해졌다.


이 블로그 포스팅 생성의 직접 원인이 된 글은,

자산의 버블을 예측하는 수학공식(Log Periodic Power Law, LPPL)

이거였다.


사실 처음 이 퀀트 스터디 칼럼을 읽었을 때 나는

와~ 흥미롭다. 이런 분석은 기술적 분석의 심화 버전이 될 수 있겠다.'

정도의 반응이었다.


그런데 무슨 일인지 위 뉴로닥님 포스팅을 우연히 보다가 호기심이 커졌다.


코딩의 로직을 분해해보기로 했다.

어렸을 때 아무것도 모르지만, 집에 반쯤 망가진 라디오 카셋트 플레이어를 분해하듯이,

코드를 분해해보면 어떨까 생각했다.


코딩 무지렁이인 내가 어떻게... 할 수 있을까?


우선 GPT AI 도움을 받아보자.


https://www.perplexity.ai/search/haeseoghaejweo-.M_QqsXPTTSQgT900H5TTg


알겠습니다. 첨부된 파일은 LPPL(Log-Periodic Power Law) 모델을 구현하는 Python 코드입니다. 이 모델은 금융 시장에서 거품(bubble) 붕괴를 예측하는 데 사용됩니다.

LPPL 모델 주요 내용

이 코드는 다음과 같은 주요 기능들을 포함합니다.

  1. 클래스: LPPL 클래스는 LPPL 모델의 핵심이며, 다음을 포함합니다.

    • 초기화: 과거 가격 데이터를 사용하여 모델을 초기화합니다.

    • 데이터 변환: 날짜 데이터를 시작일로부터 경과일로 변환하고, 가격에 로그를 취합니다.

    • LPPL 행렬 생성: 주어진 파라미터에 대한 LPPL 행렬을 생성합니다.

    • 목적 함수: 최적화할 목적 함수를 정의합니다.

    • 단순 모델 피팅: 초기 tc (임계 시간) 값을 추정하기 위해 단순 모델을 피팅합니다.

    • 유전 알고리즘: 유전 알고리즘을 사용하여 LPPL 파라미터를 최적화합니다.

    • 파라미터 미세 조정: 로컬 최적화를 사용하여 파라미터를 미세 조정합니다.

    • 거품 조건 확인: 피팅된 파라미터가 거품 조건에 부합하는지 확인합니다.

    • 다중 윈도우 시도: 여러 윈도우 크기에 대해 피팅을 시도하여 최적의 파라미터를 찾습니다.

  2. 유전 알고리즘: 이 코드에서는 유전 알고리즘을 사용하여 LPPL 모델의 파라미터를 최적화합니다. 유전 알고리즘은 다음과 같은 단계를 포함합니다.

    • 초기 모집단 생성: 초기 파라미터 집합을 생성합니다.

    • 적합도 평가: 각 파라미터 집합의 적합도를 평가합니다.

    • 선택: 적합도가 높은 파라미터 집합을 선택합니다.

    • 교차: 선택된 파라미터 집합을 교차하여 새로운 파라미터 집합을 생성합니다.

    • 돌연변이: 새로운 파라미터 집합에 돌연변이를 적용합니다.

    • 반복: 위의 단계를 반복하여 최적의 파라미터 집합을 찾습니다.

  3. 거품 조건: 이 코드에서는 다음과 같은 거품 조건을 확인합니다.

    • A > 0

    • B < 0

    • |C| < 1

    • m in $$0.1, 0.9]

    • omega in $$2, 25]

    • phi in $$0, 2π]

    • tc > last time point and tc < last time point + 0.1

    • Number of oscillations >= 2.5

    • Damping factor >= 1

    • Max relative error <= 0.2

코드 사용법

이 코드를 사용하려면 다음과 같은 단계를 따르십시오.

  1. 필요한 라이브러리 설치: numpy, pandas, yfinance, matplotlib, scipy 라이브러리가 필요합니다.

  2. 데이터 준비: 과거 가격 데이터를 pandas DataFrame으로 준비합니다. DataFrame은 DatetimeIndex와 'Adj Close' 열을 포함해야 합니다.

  3. LPPL 객체 생성: LPPL 클래스의 객체를 생성하고, 가격 데이터를 전달합니다.

  4. 모델 피팅: simple_model_fit, genetic_algorithm_fit, fine_tune_parameters 메서드를 사용하여 모델을 피팅합니다.

  5. 결과 분석: 피팅된 파라미터를 사용하여 거품 붕괴를 예측합니다.

추가 설명

  • 주석: 코드에는 자세한 주석이 포함되어 있어 각 기능과 단계를 이해하는 데 도움이 됩니다.

  • 예외 처리: 코드에는 예외 처리가 포함되어 있어 발생할 수 있는 오류를 처리합니다.

  • 파라미터 범위: 코드에는 파라미터 범위가 정의되어 있어 최적화 과정에서 파라미터가 유효한 범위 내에 있도록 합니다.

  • 다중 윈도우: 코드에서는 다중 윈도우 크기를 사용하여 모델을 피팅하여 더 나은 결과를 얻을 수 있습니다.

이 코드는 LPPL 모델을 사용하여 금융 시장의 거품 붕괴를 예측하는 데 유용한 도구가 될 수 있습니다.

다음 단계

이 코드를 실제로 사용하려면 다음을 수행하는 것이 좋습니다.

  1. 주식 데이터 가져오기: yfinance 라이브러리를 사용하여 관심 있는 주식의 과거 데이터를 가져옵니다.

  2. 데이터 전처리: 필요한 경우 데이터를 정리하고 전처리합니다.

  3. 모델 실행: 코드를 실행하고 결과를 분석합니다.

  4. 파라미터 조정: 필요에 따라 파라미터를 조정하여 모델의 정확도를 높입니다.

궁금한 점이 있다면 언제든지 다시 질문해주세요.

Citations:

  1. https://ppl-ai-file-upload.s3.amazonaws.com/web/direct-files/12049626/c1aabbd6-8fba-4956-bd1f-057ea08e040f/paste.txt

  2. https://ppl-ai-file-upload.s3.amazonaws.com/web/direct-f...

회원가입만 해도
이 글을 무료로 읽을 수 있어요.

이미 계정이 있으신가요?로그인하기
댓글 12
avatar
Pioneer
구독자 711명구독중 399명
안녕하세요! 투자 아이디어의 지경을 넓혀 나가는 한, 확률적 우위를 조금씩이라도 높여가는 한, 건강하게 오래 살고 싶은 투자자입니다. 지경이 넓어지지 않거나, 확률적 우위가 한계체감되어 사라지거나, 건강하지 않으면... 꼭 오래 살 필요는 없다고 생각하기도 합니다. ^^ (비관적 표현이 아닌데 오해 없으시길)