커뮤니티

부탁드립니다.

프로필 이미지
중박주식
2021-02-18 01:14:33
897
글번호 146416
답변완료
아래 수식은 예전에 만들어주신 수식입니다. data1에 코스닥 분봉 data2에 코스닥 일봉 data3에 나스닥 일봉이 들어 있는 상태에서 코스닥과 나스닥이 모두 열린 날을 대상으로 최근 5거래일 동안의 상관관계를 구하는 식입니다. 그런데 제가 data1을 아주 짧은 초봉으로 바꾸고, 10000봉까지만 열리는 실전 챠트에 이 수식을 올리면 최근 며칠을 제외하면 상관도가 모두 0으로 찍혀서 나옵니다. 아무래도 짧은 주기를 쓰다보니 10000봉 이내에서 충분한 정보 제공이 안되는 것이 원인인듯 합니다. 즉, 최소 최근 5거래일 정보가 필요한데, 당일 거래시에는 10000봉 이내에 5거래일이 포함되기 때문에 정상적인 거래가 되는데, 하루 이틀 전의 경우에는 그로부터 5거래일 과거 정보까지 챠트에 표시가 안되어 정확한 계산이 안되는 것 같습니다. 그래서 혹시 아래 수식을 data1의 도움을 받지 않거나(즉, data2를 이용해서 작성), 혹은 data1을 이용하더라도 당일이나 전일 정보 정도만 이용해서 구현할 수 있는 방법이 있는지 궁금합니다. 제 머리로는 충분히 일봉으로도 구현이 가능할거 같단 생각이 드는데, 수식 초반부가 잘 이해가 안갑니다. 감사합니다. -=---- input : 상관기간(5); var : cnt(0,Data1),R2(0,data1),R33(0,data1); var : 상관도(0,Data1),k(0,data1),sumXY_(0,data1), sumX_(0,data1), sumY_(0,data1), sumX2_(0,data1), sumY2_(0,data1); Array : C1[10](0,Data1),C2[10](0,Data1),C3[10](0,Data1); if Data1(Bdate != Bdate[1]) Then { if Data1(bDate[1]) == Data2(bDate) and Data1(bDate[1]) == data3(Bdate) Then { C1[0] = Data1(c[1]); C2[0] = Data2(c); C3[0] = Data3(c); For cnt = 1 to 9 { C1[cnt] = C1[cnt-1][1]; C2[cnt] = C2[cnt-1][1]; C3[cnt] = C3[cnt-1][1]; } } } if C2[상관기간] > 0 and C3[상관기간] > 0 Then { sumXY_ = 0; sumX_ = 0; sumY_ = 0; sumX2_ = 0; sumY2_ = 0; for k = 0 to 상관기간 - 1 { R2 = (C2[k]-C2[k+1])/C2[k+1]; R33 = (C3[k]-C3[k+1])/C3[k+1]; sumXY_ = sumXY_ + R2*R33; sumX_ = sumX_ + R2; sumY_ = sumY_ + R33; sumX2_ = sumX2_ + R2^2; sumY2_ = sumY2_ + R33^2; } 상관도 = (상관기간 * sumXY_ - sumX_ * sumY_)/ Sqrt((상관기간 * sumX2_- sumX_^2) * (상관기간 * sumY2_- sumY_^2)); }
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2021-02-18 15:01:17

안녕하세요 예스스탁입니다. data1과 data2가 동일종목이므로 data2와 data3이 동일날짜 일때의 값만 저장후에 상관도 계산하게 하시면 됩니다. input : 상관기간(5); var : K(0,data2),R2(0,data2),R33(0,data2); var : sumXY_(0,data2), sumX_(0,data2), sumY_(0,data2), sumX2_(0,data2), sumY2_(0,data2),상관도(0,Data2); Array : C2[10](0,Data2),C3[10](0,Data2); if Data2(bDate) == data3(Bdate) Then { C2[0] = Data2(c); C3[0] = Data3(c); For k = 1 to 9 { C2[k] = C2[k-1][1]; C3[k] = C3[k-1][1]; } } if C2[상관기간] > 0 and C3[상관기간] > 0 Then { sumXY_ = 0; sumX_ = 0; sumY_ = 0; sumX2_ = 0; sumY2_ = 0; for k = 0 to 상관기간 - 1 { R2 = (C2[k]-C2[k+1])/C2[k+1]; R33 = (C3[k]-C3[k+1])/C3[k+1]; sumXY_ = sumXY_ + R2*R33; sumX_ = sumX_ + R2; sumY_ = sumY_ + R33; sumX2_ = sumX2_ + R2^2; sumY2_ = sumY2_ + R33^2; } 상관도 = (상관기간 * sumXY_ - sumX_ * sumY_)/ Sqrt((상관기간 * sumX2_- sumX_^2) * (상관기간 * sumY2_- sumY_^2)); Plot1(상관도); } 즐거운 하루되세요 > 중박주식 님이 쓴 글입니다. > 제목 : 부탁드립니다. > 아래 수식은 예전에 만들어주신 수식입니다. data1에 코스닥 분봉 data2에 코스닥 일봉 data3에 나스닥 일봉이 들어 있는 상태에서 코스닥과 나스닥이 모두 열린 날을 대상으로 최근 5거래일 동안의 상관관계를 구하는 식입니다. 그런데 제가 data1을 아주 짧은 초봉으로 바꾸고, 10000봉까지만 열리는 실전 챠트에 이 수식을 올리면 최근 며칠을 제외하면 상관도가 모두 0으로 찍혀서 나옵니다. 아무래도 짧은 주기를 쓰다보니 10000봉 이내에서 충분한 정보 제공이 안되는 것이 원인인듯 합니다. 즉, 최소 최근 5거래일 정보가 필요한데, 당일 거래시에는 10000봉 이내에 5거래일이 포함되기 때문에 정상적인 거래가 되는데, 하루 이틀 전의 경우에는 그로부터 5거래일 과거 정보까지 챠트에 표시가 안되어 정확한 계산이 안되는 것 같습니다. 그래서 혹시 아래 수식을 data1의 도움을 받지 않거나(즉, data2를 이용해서 작성), 혹은 data1을 이용하더라도 당일이나 전일 정보 정도만 이용해서 구현할 수 있는 방법이 있는지 궁금합니다. 제 머리로는 충분히 일봉으로도 구현이 가능할거 같단 생각이 드는데, 수식 초반부가 잘 이해가 안갑니다. 감사합니다. -=---- input : 상관기간(5); var : cnt(0,Data1),R2(0,data1),R33(0,data1); var : 상관도(0,Data1),k(0,data1),sumXY_(0,data1), sumX_(0,data1), sumY_(0,data1), sumX2_(0,data1), sumY2_(0,data1); Array : C1[10](0,Data1),C2[10](0,Data1),C3[10](0,Data1); if Data1(Bdate != Bdate[1]) Then { if Data1(bDate[1]) == Data2(bDate) and Data1(bDate[1]) == data3(Bdate) Then { C1[0] = Data1(c[1]); C2[0] = Data2(c); C3[0] = Data3(c); For cnt = 1 to 9 { C1[cnt] = C1[cnt-1][1]; C2[cnt] = C2[cnt-1][1]; C3[cnt] = C3[cnt-1][1]; } } } if C2[상관기간] > 0 and C3[상관기간] > 0 Then { sumXY_ = 0; sumX_ = 0; sumY_ = 0; sumX2_ = 0; sumY2_ = 0; for k = 0 to 상관기간 - 1 { R2 = (C2[k]-C2[k+1])/C2[k+1]; R33 = (C3[k]-C3[k+1])/C3[k+1]; sumXY_ = sumXY_ + R2*R33; sumX_ = sumX_ + R2; sumY_ = sumY_ + R33; sumX2_ = sumX2_ + R2^2; sumY2_ = sumY2_ + R33^2; } 상관도 = (상관기간 * sumXY_ - sumX_ * sumY_)/ Sqrt((상관기간 * sumX2_- sumX_^2) * (상관기간 * sumY2_- sumY_^2)); }