커뮤니티

전략차트 타주기 계산 한계점

프로필 이미지
끼야98
2024-05-09 13:44:48
614
글번호 179292
답변완료
안녕하세요! 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");