Search
📝

분봉에서 일봉 RSI

Input : Length(14),signal(9); var : i(0),idx(0); var : DownAmt(0), UpAmt(0), UpSum(0), DownSum(0), UpAvg(0), DownAvg(0); var : PreUpAvg(0), preDownAvg(0),Sigsum(0),RSIsig(0); Array : C1[100](0),RSIV[100](-1); //영업일이 바뀌면 if Bdate != Bdate[1] Then { //배열의 0번방기준으로 최신값순으로 저장하기 위해 //배열의 기존값을 다음방으로 이동 for i = 99 DownTo 1 { C1[i] = C1[i-1]; RSIV[i] = RSIV[i-1]; } // 이전일의 UpAvg를 보관 PreUpAvg = UpAvg[1]; // 이전일의 DownAvg 보관 preDownAvg = DownAvg[1]; //날짜수 1씩 증가 idx = idx + 1; } //0번방에 최신 종가 저장 C1[0] = C; // RSI계산 최초일 If idx == Length+2 Then { //Length 기간 전체를 직접 합산하여 Up/Down 평균 계산 UpSum = 0; DownSum = 0; For i = 0 To Length - 1 { //UpAmt에 전일대비 종가 등락 저장 UpAmt = C1[i] - C1[i+1]; //상승이면 If UpAmt >= 0 Then //상승이면 DownAmt = 0; //DownAmt은 0 Else //아니면 { DownAmt = -UpAmt; //DownAmt에 하락값 저장 UpAmt = 0;//UpAmt은 0 } // 전체 상승합 UpSum = UpSum + UpAmt; // 전체 하락합 DownSum = DownSum + DownAmt; } // Length 기간 평균 상승 UpAvg = UpSum / Length; // Length 기간 평균 하락 DownAvg = DownSum / Length; } // RSI계산 두번째일 부터 If idx > Length+2 Then { //UpAmt에 전일대비 종가 등락 저장 UpAmt = C1[0] - C1[1]; //상승이면 If UpAmt >= 0 Then DownAmt = 0; //DownAmt은 0 Else //아니면 { DownAmt = -UpAmt; //DownAmt에 하락값 저장 UpAmt = 0; //UpAmt은 0 } // 이전 상승값을 (Length-1)배로 하고 현재 상승값을 더해서 Length로 나눔어 상승평균 계산 UpAvg = (PreUpAvg * (Length - 1) + UpAmt) / Length; // 이전 하락값을 (Length-1)배로 하고 현재 하락값을 더해서 Length로 나눔어 하락평균 계산 DownAvg = (preDownAvg * (Length - 1) + DownAmt) / Length; } //상승평균과 하락형균의 합이 0이 아닐때 If UpAvg + DownAvg <> 0 Then //RSIV배열의 0번방에 오늘 RSI 계산해서 저장 RSIv[0] = 100 * UpAvg / (UpAvg + DownAvg); Else //상승평균과 하락평균의 합이 0이면 오늘 RSI는 0 RSIv[0] = 0; //일봉 RSI의 평균값을 만들만큼 데이터가 모이면 if RSIV[signal-1] >= 0 Then { // 최근 signal 개의 RSI 값 합산 SigSum = 0; For i = 0 to signal-1 { SigSum = SigSum + RSIV[i]; } // 시그널은 단순 이동평균(SMA) RSIsig = SigSum/signal; } plot1(RSIv[0],"RSI"); plot2(RSIsig,"signal"); PlotBaseLine1(30, "기준선 30"); PlotBaseLine2(70, "기준선 70");
JavaScript
복사
[RSI 공식]
RSI = n일간의 주가 상승폭 합계/(n일간의 주가 상승폭 합계 -n일간의 주가 하락폭 합계) *100