커뮤니티
상관계수, R스퀘어
2012-03-06 09:35:36
461
글번호 48549
안녕하세요~
본격적으로 봄을 알리는 '경칩'이네요...
다음 내용의 수식을 부탁드리겠습니다.
주데이타 : 연결선물 1분봉
data2 : KP 개인순매수금액
이 두가지의 1)상관계수 2)각각의 R스퀘어 이렇게 두가지를 구하는 것인데,
문제는 연결선물 1분봉의 경우 1분단위로 연속하여 봉이 생성되는 반면
data2의 경우 중간중간 봉이 생성되지 않는 경우가 발생합니다.
그래서 이를 봉단위 기준이 아닌 시간단위 기준으로 위의 두가지 값을
구하고 싶습니다.
다음의 내용을 예제수식으로 작성해주시면 감사하겠습니다.
당일분 값만 구하기 위하여, 장개시후 주데이타 기준으로 30봉이 경과한 후,
연결선물 1분봉의 가장 최근 완성봉 기준으로 30분단위로 주데이타와 data2의
상관계수 및 각각의 R스퀘어 값...
09:00~09:29 / 09:01~09:30 / ..... / 10:33~11:02 / .....
말씀드렸듯이 봉기준으로 하면 동일시간 범위가 안된다는 점 고려해 주시기
바랍니다. (거래없는 봉 채우기 기능은 현재 다른 수식과의 문제로
사용할 수 없는 상태입니다)
정리하면 종가기준으로,
30분단위로 주데이타의 데이타 갯수가 30개이므로 30개의 R스퀘어 값,
30분단위의 data2의 데이타 갯수가 만약 20개라면 20개의 R스퀘어 값(갯수 변동시 변동값 반영),
마지막으로 주데이타의 30분단위를 기준으로 하되,
주데이타에서 데이타2의 거래없는 봉을 제외한 - 즉 거래발생 봉만 추출하여 -
두 데이타간의 상관계수 값...
이렇게 구하고자 합니다.
그럼 부탁드리겠습니다.
즐겁게 한주 시작하시기를 바라며, 미리 감사드립니다 !!!
답변 1
예스스탁 예스스탁 답변
2012-03-06 11:00:50
안녕하세요
예스스탁입니다.
1.
상관계수의 경우에는
주데이터와 참조데이터가 동일한 시간을 가질때만을
기준으로 최근 30분간의 데이터를 모아 값을 계산하도록 했습니다.
var : T1(0,data1),D1(0,data1),D2(0,data1),Cond(false,data1),cnt(0,data1);
var : Counter1(0,data1),Counter2(0,data1),Cor(0,data1),Dt(0,data1);
var : D1i(0,data1),D2i(0,data2);
T1 = data1(TimeToMinutes(stime)%30);
DT = data1(sdate);
D1 = data1(c);
d2 = data2(c);
D1i = data1(dayindex+1);
D2i = data2(dayindex+1);
if data1(sdate != sdate[1]) Then{
Counter1 = 0;
Counter2 = 0;
}
if data1(stime) == data2(stime) and data1(stime) >= 90000 Then
Cond = true;
Else
cond = false;
if cond == true and d1i >= 2 and d2i >= 2 Then{
Counter1 = 0;
Counter2 = 0;
for cnt = 0 to 30{
if DT[cnt+1] == sdate and Cond[cnt] == true and T1[cnt] > T1-30 Then{
If (D1[cnt] >= D1[cnt+1] and D2[cnt] >= D2[cnt+1]) OR (D1[cnt] < D1[cnt+1] and D2[cnt] < D2[cnt+1]) Then
Counter1 = Counter1 + 1;
Else
Counter2 = Counter2 + 1;
}
}
}
If Counter1 + Counter2 <> 0 Then
Cor = (Counter1 - Counter2) / (Counter1 + Counter2);
Else
Cor = 0;
plot1(Cor);
2.
R스퀘어의 경우에는 SumDxDy와 같이 2개의 값을 곱해서 누적하는 부분이 있습니다.
주데이터와 참조데이터를 따로 분리해서 계산하기는 어려운 부분이므로
거래가 없는 봉에서는 이전값을 사용하게 됩니다.
var : AvgX(0,data1), AvgY(0,data1), SumDySqr(0,data1), SumDxDy(0,data1);
var : SumDxSqr(0,data1), Dy(0,data1), Dx(0,data1), R(0,data1),V1(0,data1),V2(0,data1);
var : D1(0,data1),D2(0,data2),CoefficientR(0,data2),RS(0,data1);
var : day1(0,data1),day2(0,data2),T1(0,data1),T2(0,data2);
var : Length1(0,data1),Length2(0,data2),cond1(false,data1),cond2(false,data1);
D1 = data1(c);
D2 = data2(c);
day1 = data1(sdate);
day2 = data2(sdate);
T1 = data1(TimeToMinutes(stime)%30);
T2 = data2(TimeToMinutes(stime)%30);
if data1(sdate != sdate[1]) then{
cond1 = false;
cond2 = false;
}
if data1(stime >= 90000) then
cond1 = true;
if data2(stime >= 90000) then
cond2 = true;
if cond1 == true and cond2 == true Then{
CoefficientR = -2 ;
AvgX = 0 ;
AvgY = 0 ;
Length1 = 0;
Length2 = 0;
for V1 = 0 to 30 {
if day1[V1] == day1 and T1[V1] > T1-30 Then{
AvgX = AvgX + D1[V1] ;
Length1 = Length1+1;
}
if day2[V1] == day1 and T2[V1] > T1-30 Then{
AvgY = AvgY + D2[V1] ;
Length2 = Length2+1;
}
}
AvgX = AvgX/Length1 ;
AvgY = AvgY/Length2;
SumDxSqr = 0 ;
SumDySqr = 0 ;
SumDxDy = 0 ;
for V1 = 0 to 30 {
if day1[V1] == day1 and T1[V1] > T1-30 Then
Dx = D1[V1] - AvgX ;
if day2[V1] == day1 and T2[V1] > T1-30 Then
Dy = D2[V1] - AvgY ;
SumDxSqr = SumDxSqr + data1(Square( Dx ));
SumDySqr = SumDySqr + data2(Square( Dy ));
SumDxDy = SumDxDy + Dx * Dy ;
}
V2 = SumDxSqr * SumDySqr ;
if V2 > 0 then {
R = data1(SumDxDy /SquareRoot(V2));
if R >= -1 and R <= 1 then
CoefficientR = R ;
}
}
RS = data1(Square(CoefficientR));
plot1(RS);
즐거운 하루되세요
> 새로운세상 님이 쓴 글입니다.
> 제목 : 상관계수, R스퀘어
> 안녕하세요~
본격적으로 봄을 알리는 '경칩'이네요...
다음 내용의 수식을 부탁드리겠습니다.
주데이타 : 연결선물 1분봉
data2 : KP 개인순매수금액
이 두가지의 1)상관계수 2)각각의 R스퀘어 이렇게 두가지를 구하는 것인데,
문제는 연결선물 1분봉의 경우 1분단위로 연속하여 봉이 생성되는 반면
data2의 경우 중간중간 봉이 생성되지 않는 경우가 발생합니다.
그래서 이를 봉단위 기준이 아닌 시간단위 기준으로 위의 두가지 값을
구하고 싶습니다.
다음의 내용을 예제수식으로 작성해주시면 감사하겠습니다.
당일분 값만 구하기 위하여, 장개시후 주데이타 기준으로 30봉이 경과한 후,
연결선물 1분봉의 가장 최근 완성봉 기준으로 30분단위로 주데이타와 data2의
상관계수 및 각각의 R스퀘어 값...
09:00~09:29 / 09:01~09:30 / ..... / 10:33~11:02 / .....
말씀드렸듯이 봉기준으로 하면 동일시간 범위가 안된다는 점 고려해 주시기
바랍니다. (거래없는 봉 채우기 기능은 현재 다른 수식과의 문제로
사용할 수 없는 상태입니다)
정리하면 종가기준으로,
30분단위로 주데이타의 데이타 갯수가 30개이므로 30개의 R스퀘어 값,
30분단위의 data2의 데이타 갯수가 만약 20개라면 20개의 R스퀘어 값(갯수 변동시 변동값 반영),
마지막으로 주데이타의 30분단위를 기준으로 하되,
주데이타에서 데이타2의 거래없는 봉을 제외한 - 즉 거래발생 봉만 추출하여 -
두 데이타간의 상관계수 값...
이렇게 구하고자 합니다.
그럼 부탁드리겠습니다.
즐겁게 한주 시작하시기를 바라며, 미리 감사드립니다 !!!
다음글
이전글