0. 서론
일주일 만에 게시물이네요 블로그를 돌봐야 하는데 바빠서 잘 못 돌보고 있는 것 같습니다.
최근에 항공 테마주로 대한항공, 델타항공이 주식시장에서 아주 뜨겁습니다. 저 같은 경우에는 델타항공이 폭락하는 걸 보고 대한항공 폭락을 예견해 대한항공을 고점에서 익절 칠 수 있었습니다. 오늘 풀어볼 문제입니다. 최근 한 달 동안 델타항공의 종가가 다음날 Kospi 시장의 델타항공 주가에 영향을 주는가? 이것을 풀어보겠습니다. 물론 주식시장이 매우 변동성이 높은 장이다 보니, 이런 코드를 짜서 풀어놔도 시간이 지나면 맞지 않게 될 확률이 높습니다. 그러니 정기적으로 시스템이 잘 동작하는지 확인해야겠지요?
일단 지난 30일간의 KAL, DLA의 주가입니다. 뭔가 벌써 비슷해 보입니다. 이 둘의 서로 유사성을 correlation을 계산해서 알 수 있습니다.
1. correlation
기본적으로 correlation은 -1~1 사이의 값을 가지게 됩니다. 1이면 둘이 아예 같다는 의미, 0이면 둘이 아예 상관없다는 뜻, -1이면 둘은 완전히 반대로 움직인다는 의미가 되겠습니다. 이게 간단한 설명입니다. 지금부터 수학으로 들어가는데 수학을 안 봐도 되시는 분은 바로 2로 가셔도 됩니다.
먼저 correlation을 구하기 위해서는 두 변수 사이의 covariance를 알아야 합니다. covariance는 공분산으로, COV(X, Y)=E[(X-E [X])•(Y-E [Y])] 식으로 계산이 이루어집니다. ( E = 기댓값(평균)), 이렇게 구해진 COV에 변수 X, Y의 표준편차를 각각 나눠주면 바로 Correlation이 계산됩니다.
정리 : correaltion(x, y) = covariance(x, y) / [(x의 표준편차) * ( y의 표준편차)]
2. 코드 구현
eigen library를 사용합니다. eigen library가 설치 안되신분은 아래 게시물을 보면 5분이면 설치 가능합니다. ^^
이제 본격적으로 코드를 구현합니다. 그 전, 코드에서 사용할 데이터를 먼저 다음과 같이 정리했습니다.
먼저 excel로 정리한 다음 오른쪽 과 같이 c++에서 읽어 들일 수 있도록 txt 파일로 바꿔줬습니다.
아래는 이로부터 correaltion을 계산하는 C++ 코드입니다. 주석마다 끊어서 기능을 설명했으니 이해가 쉬우실 겁니다.
#include <iostream>
#include <fstream>
#include <eigen/Dense>
#include <cmath>
using namespace Eigen;
using namespace std;
const int P = 2; // 특성수, 델타, 항항
const int N = 30; // 30일간의 데이터
int main()
{ //data laoding
VectorXf all_data[N];
ofstream xcout("DAL_CAL_CO.txt");
ifstream in("DAL_CAL.txt");
for (int i = 0; i < N; i++) {
all_data[i].resize(P);
for (int j = 0; j < P; j++) in >> all_data[i](j);
}
// 공분산 계산
MatrixXf covariance;
VectorXf mean;
mean.resize(P);
covariance.resize(P, P);
for (int n = 0; n < N; n++) mean += all_data[n];
mean /= (float)N;
for (int j = 0; j < P; j++) {
for (int k = 0; k < P; k++) {
covariance(j, k) = 0.0;
for (int n = 0; n < N; n++) {
covariance(j, k) += (all_data[n](j) - mean[j]) * (all_data[n](k) - mean[k]);
}
covariance(j, k) /= N - 1;
}
}
//correlation 계산
VectorXf correlation(1);
correlation(0) = covariance(0, 1) / sqrt(covariance(0, 0) * covariance(1, 1));
cout << "\ncorrelation\n" << correlation;
in.close();
return 0;
}
코드 잘 따라오셨나요? 자 이제 실행해봅시다.
0.797 매우 높은 상관관계가 있습니다!! 전날 델타 항공 주식을 보고 다음날 대응을 할 수 있겠군요?
그럼 그 반대로 대한항공 종가는 델타항공에 얼마나 영향을 줄까요?
이 결과를 보니 두 주가는 확실히 어느 정도 서로 영향을 주며 묶여있는 것 같습니다. 하지만 그 모양새는 델타항공이 리드하는 포지션이네요.
3. 결론 :
결론은 대한항공도 델타항공은 서로 미래 주가에 유의미한 영향을 서로 주고받는 것입니다.
하지만, correlatio을 비교해 봤을 때 델타항공이 lead 하고 대한항공이 follow 하는 경향이 강하다는 것을 알 수 있습니다.
다음은 더 유익한 주제로 돌아오겠습니다! 감사합니다.
'C && C++' 카테고리의 다른 글
[C++] Arithmetic Coding(산술 부호화) (0) | 2021.10.12 |
---|---|
OpenCV 설치하기(C++) (0) | 2021.04.30 |
Monte Carlo method(C++)(랜덤, 확률, pi 구하기) (0) | 2020.11.01 |
적분으로 물체의 포물선 운동 묘사(C++) (0) | 2020.10.17 |
Eigen library 설치하기(C++) (2) | 2020.10.14 |