안녕하세요!
1분봉 실시간 차트에 일봉 RSI(14)를 계산하려고 하니,
1분봉은 안되고, 10분봉부터 데이터가 맞기 시작을 합니다.
이건 전략차트가 10000개까지 불러들여서 계산하기 때문에 그런가요?
이 문제를 극복할 수 있는 방법은 없나요?
사용한 수식은 아래와 같습니다.
Input : Length(14);
var : cnt(0),SigSum(0),count2(0),RSIsig(0);
Var : Counter(0), DownAmt(0), UpAmt(0), UpSum(0), DownSum(0),
UpAvg(0), DownAvg(0);
var : idx(0), PreUpAvg(0), preDownAvg(0),RSIV(0);
Array : C1[100](0);
if Bdate != Bdate[1] Then
{
for cnt = 1 to 99
{
C1[cnt] = C1[cnt-1][1];
}
PreUpAvg = UpAvg[1];
preDownAvg = DownAvg[1];
idx = idx + 1;
}
C1[0] = C;
If idx == Length+2 Then
{
UpSum = 0;
DownSum = 0;
For Counter = 0 To Length - 1
{
UpAmt = C1[Counter] - C1[Counter+1];
If UpAmt >= 0 Then
DownAmt = 0;
Else
{
DownAmt = -UpAmt;
UpAmt = 0;
}
UpSum = UpSum + UpAmt;
DownSum = DownSum + DownAmt;
}
UpAvg = UpSum / Length;
DownAvg = DownSum / Length;
}
If idx > Length+2 Then
{
UpAmt = C1[0] - C1[1];
If UpAmt >= 0 Then
DownAmt = 0;
Else
{
DownAmt = -UpAmt;
UpAmt = 0;
}
UpAvg = (PreUpAvg * (Length - 1) + UpAmt) / Length;
DownAvg = (preDownAvg * (Length - 1) + DownAmt) / Length;
}
If UpAvg + DownAvg <> 0 Then
RSIv = 100 * UpAvg / (UpAvg + DownAvg);
Else
RSIv = 0;
Plot1(RSIv,"RSIv");
답변 1
예스스탁
예스스탁 답변
2024-05-09 14:41:22
안녕하세요
예스스탁입니다.
예 맞습니다.
일봉차트에 RSI지표를 적용하시고
차트 조회갯수를 20,30,40,50개로 변경하면서
마지막봉의 값을 보시면 값의 차이가 있습니다.
즉 RSI도 과거 봉수가 현재값에 영향을 주게 됩니다.
1분봉으로 1만봉이면 약 24일 정도의 데이터이고
데이터의 한계로 계산법상 별도로 처리할 방법이 없습니다.
즐거운 하루되세요
> 끼야98 님이 쓴 글입니다.
> 제목 : 전략차트 타주기 계산 한계점
> 안녕하세요!
1분봉 실시간 차트에 일봉 RSI(14)를 계산하려고 하니,
1분봉은 안되고, 10분봉부터 데이터가 맞기 시작을 합니다.
이건 전략차트가 10000개까지 불러들여서 계산하기 때문에 그런가요?
이 문제를 극복할 수 있는 방법은 없나요?
사용한 수식은 아래와 같습니다.
Input : Length(14);
var : cnt(0),SigSum(0),count2(0),RSIsig(0);
Var : Counter(0), DownAmt(0), UpAmt(0), UpSum(0), DownSum(0),
UpAvg(0), DownAvg(0);
var : idx(0), PreUpAvg(0), preDownAvg(0),RSIV(0);
Array : C1[100](0);
if Bdate != Bdate[1] Then
{
for cnt = 1 to 99
{
C1[cnt] = C1[cnt-1][1];
}
PreUpAvg = UpAvg[1];
preDownAvg = DownAvg[1];
idx = idx + 1;
}
C1[0] = C;
If idx == Length+2 Then
{
UpSum = 0;
DownSum = 0;
For Counter = 0 To Length - 1
{
UpAmt = C1[Counter] - C1[Counter+1];
If UpAmt >= 0 Then
DownAmt = 0;
Else
{
DownAmt = -UpAmt;
UpAmt = 0;
}
UpSum = UpSum + UpAmt;
DownSum = DownSum + DownAmt;
}
UpAvg = UpSum / Length;
DownAvg = DownSum / Length;
}
If idx > Length+2 Then
{
UpAmt = C1[0] - C1[1];
If UpAmt >= 0 Then
DownAmt = 0;
Else
{
DownAmt = -UpAmt;
UpAmt = 0;
}
UpAvg = (PreUpAvg * (Length - 1) + UpAmt) / Length;
DownAvg = (preDownAvg * (Length - 1) + DownAmt) / Length;
}
If UpAvg + DownAvg <> 0 Then
RSIv = 100 * UpAvg / (UpAvg + DownAvg);
Else
RSIv = 0;
Plot1(RSIv,"RSIv");