커뮤니티
RSI 함수식 및 파생지표문의드립니다.
2003-10-09 00:00:00
1851
글번호 832
사이보스에서 작성한 RSI 파생지표를 이용한 조건식을 예스프로에서 사용하려고
적용해보니 전혀 다른 값들이 출력되더군요
알고보니 RSI 지표값 자체가 전혀 다릅니다.
검색을 해보니 RSI 지표값이 다른곳과 다르다는 질문에 대한 답변이 하나있더군요
------------------------------------------------------------------------------
Re: RSI에서 평균을 구하는 방법의 차이 때문입니다.
안녕하세요? 예스스탁입니다
RSI의 계산식을 보면
RSI=100-(100/(1+RS))
RS=(n일간의 상승폭 평균/n일간의 하락폭 평균)
으로 계산을 하게 됩니다. 여기서 계산 방법의 차이가 생기게 되는 부분이 상승폭과 하락폭의 평균을 어떻게 구할 것인가 하는데에서 차이점이 생기게 됩니다.
저희 예스차트와 예스트레이더에서 사용하는 방법은 n일간의 산술평균에 의해서 평균값을 산출합니다. 값이 저희와 다르게 나온다면 평균을 계산하는 방법으로 다음의 방법을 사용했기 때문입니다.
금일의 상승폭(하락폭)평균 = (전일의 상승폭(하락폭)평균*(n-1)+금일의상승폭(하락폭))/n
예스차트와 예스트레이더 에서 산술평균(=단순이동평균) 방법을 이용하는 이유는 사용자 함수로 지표를 표현하기 위해서 입니다.
지표함수로 표현한다면 전일값을 참조하는 방식으로 구현할 수 있지만, 지표함수로 작성하게 되면 사용자가 임의로 수식을 편집하거나 변경할 수 없게 됩니다. 또한 계산식을 확인하기도 어렵습니다.
대부분의 차트 프로그램이 기술적분석 지표를 지표함수로 표현함으로써 지표가 계산되는 구체적인 내부로직을 알지 못하게 됩니다. 하지만, 저희 예스스탁에서는 가능한한 모든 지표를 사용자 함수로 구현함으로써 사용자가 그 지표의 구현방식을 정확히 이해하는 것이 시스템트레이딩에 필수적인 요소라고 보기 때문에 가급적 사용자함수로 지표를 구현하려고 합니다.
-----------------------------------------------------------------------------------
답변에 사용자함수로 편집가능하다고 쓰여있는데 사용자함수에는 어떤 지표함수도 없더군요
일단은 제가 산술평균에 의한 RSI 함수식을 작성해봤는데 수식이 잘못되었는지
예스프로의 RSI 지표와 맞지 않더군요
제가 작성한 RSI 함수식은
-----------------------------------------------------------------
Input : Period(14);
Var : value1(0), value2(0),value3(0),value4(0),value5(0),value6(0);
If C-C[1] > 0 Then
value1 = C-C[1];
else
value2 = C[1]-C;
value3 = accumn(value1, Period);
value4 = accumn(value2, Period);
value5 = ((value3/Period)/(value4/Period));
value6 = 100-(100/(1+value5));
Plot1(value6, "RSI");
-------------------------------------------------------------
Input : Period(14);
Var : value1(0), value2(0),value3(0),value4(0),value5(0),value6(0);
If C-C[1] > 0 Then
value1 = C-C[1];
else
value2 = C[1]-C;
value3 = accumn(value1, Period);
value4 = accumn(value2, Period);
value5 = value3 + value4;
value6 = (value3/value5)*100;
Plot1(value6, "RSI");
----------------------------------------------------------------
위 두개는 예스프로에 지표로 구현은 되는데 수치들이 RSI지표와 맞지 않더군요.
그래서 사이보스의 RSI 함수식과 다른 방법으로 평균을 구하는 계산식으로
지표작성을 해보았습니다.
사이보스에도 RSI 함수식이 나와있지 않아 사이보스 홈페이지 Q/A에 답변으로
올라와있던 RSI 함수식을 이용해 예스프로에 적용해보았습니다.
그런데 밑에 두개 지표는 검증은 되는데 예스프로에 표현이 안되더군요
아무 선도없는 백지상태의 지표로 출력됩니다.
------------------------------------------------------------------
Input : Period(14);
Var : value1(0), value2(0),value3(0),value4(0),value5(0),value6(0);
If C-C[1] > 0 Then
value1 = C-C[1];
else
value2 = C[1]-C;
value3 = (value3[1]*(Period-1)+value1)/Period;
value4 = (value4[1]*(Period-1)+value2)/Period;
value5 = (value3/value4);
value6 = 100-(100/(1+value5));
Plot1(value6, "RSI");
------------------------------------------------------------------
Input : Period(14);
Var : value1(0), value2(0),value3(0),value4(0),value5(0),value6(0),value7(0),value8(0),value9(0);
value1 = C-C[1];
If value1 > 0 Then
value2 = value1;
else
value2 = 0;
If value1<0 Then
value3 = abs(value1);
else
value3 = 0;
value4 = (value4[1]*(Period-1)+value2)/Period;
value5 = (value5[1]*(Period-1)+value3)/Period;
If value5!=0 Then
value8 = (value4/value5);
Else
value8 = 0;
value9 = 100-(100/(1+value8));
Plot1(value9, "RSI");
----------------------------------------------------------------------
사이보스에 올라왔던 답변과 수식입니다. ---------------------------------
CT에서의 RSI지표값과 직접 계산한 RSI값에서 차이가 발생하는 것은 상승폭과 하락폭의 평균을 구하는 방식에서 차이가 있어서 발생하는 것으로 보입니다.
일반적으로 RSI지표를 구할 때 상승폭과 하락폭의 평균을 구하는 경우 Wilders smoothing 방법을 사용합니다.
Wilders Smoothing = Previous M.A. + (Close - Previous M.A.)/Periods
따라서 위의 Wilders smoothing방법으로 평균을 구하면 지표값의 차이는 없을 것이라 생각됩니다. 아울러 RSI지표를 계산하는 CT식을 보내드립니다.
Var1=close-close(1)
If Var1> 0 Then
Var2=var1
Else
Var2=0
End If
If Var1<0 Then
Var3=abs(Var1)
Else
Var3=0
End If
Var4=mov(Var2,maLen,s)
Var5=mov(Var3,malen,s)
Var4=var4(1)+((Var2-var4(1))/malen)
Var5=var5(1)+((Var3-var5(1))/malen)
Var8=var4+var5
If var8<>0 then
Var10=100*var4/var8
Else
var10=0
End If
Call ploti1("RSI",Var10)
---------------------------------------------------------------------------------
제가 사용하려는 지표는 StochRSI 지표입니다.
RSI 수치가 다르다보니 사이보스와는 전혀다른 패턴과 수치값이 나옵니다.
사이보스에는 RSI 지표 가 소수점 세자리까지 출력되더군요.
예스프로에서 RSI및 파생지표의 같은
패턴과 수치값을 구해서 시스템에 적용하고자 합니다.
조언부탁드립니다.
답변 1
예스스탁 예스스탁 답변
2003-10-09 00:00:00
안녕하세요? 예스스탁입니다...
RSI의 사용자함수는 기본으로 제공되고 있습니다.
===RSI(사용자함수)=========================================
Input : Period(Numeric);
Var : value1(0), value2(0);
value1 = C-C[1];
if value1 > 0 Then
value2 = value1;
Else
{
value1 = 0;
value2 = C[1]-C;
}
RSI = accumN(value1,Period)/accumN(value2,Period)*100;
--------------------------------------------------------
===RSI(지표식)===========================================
Input : Period(9),period1(8);
Plot1(RSI(Period), "RSI");
Plot2(ema(RSI(Period),period1), "RSI");
PlotBaseLine1(30, "기준선1");
PlotBaseLine2(70, "기준선2");
--------------------------------------------------------
사용자님께서 신호가 발생하지 않는다고 문의하신 두 가지 식을 살펴본 결과
첫번째 식에서는 value3과 value4의 값을 0으로 초기화 시켰었기 때문에 전봉의 value3, value4값이 invalid가 나온 것입니다.
두번째 식에서도 유사하게 value4, value5의 전봉 값이 invalid값이 나왔습니다.
따라서, 변수 부분을 직접 입력해 전봉에서 invalid가 되는 것을 막는다면 지표가 그려질 것입니다...
1.
Input : Period(14);
Var : value1(0), value2(0),value3(0),value4(0),value5(0),value6(0);
If C-C[1] > 0 Then
value1 = C-C[1];
else
value2 = C[1]-C;
value3 = (ma(value1,Period)[1]*(Period-1)+value1)/Period;
value4 = (ma(value2,Period)[1]*(Period-1)+value2)/Period;
value5 = (value3/value4);
value6 = 100-(100/(1+value5));
Plot1(value6, "RSI");
2.
Input : Period(14);
Var : value1(0), value2(0),value3(0),value4(0),value5(0),value6(0),value7(0),value8(0),value9(0);
value1 = C-C[1];
If value1 > 0 Then
value2 = value1;
else
value2 = 0;
If value1 < 0 Then
value3 = abs(value1);
else
value3 = 0;
value4 = (ma(value2,Period)[1]*(Period-1)+value2)/Period;
value5 = (ma(value3,Period)[1]*(Period-1)+value3)/Period;
If value5!=0 Then
value8 = (value4/value5);
Else
value8 = 0;
value9 = 100-(100/(1+value8));
Plot1(value9, "RSI");
즐거운 하루 되세요..
> CJ_okavango 님이 쓴 글입니다.
> 제목 : RSI 함수식 및 파생지표문의드립니다.
> 사이보스에서 작성한 RSI 파생지표를 이용한 조건식을 예스프로에서 사용하려고
적용해보니 전혀 다른 값들이 출력되더군요
알고보니 RSI 지표값 자체가 전혀 다릅니다.
검색을 해보니 RSI 지표값이 다른곳과 다르다는 질문에 대한 답변이 하나있더군요
------------------------------------------------------------------------------
Re: RSI에서 평균을 구하는 방법의 차이 때문입니다.
안녕하세요? 예스스탁입니다
RSI의 계산식을 보면
RSI=100-(100/(1+RS))
RS=(n일간의 상승폭 평균/n일간의 하락폭 평균)
으로 계산을 하게 됩니다. 여기서 계산 방법의 차이가 생기게 되는 부분이 상승폭과 하락폭의 평균을 어떻게 구할 것인가 하는데에서 차이점이 생기게 됩니다.
저희 예스차트와 예스트레이더에서 사용하는 방법은 n일간의 산술평균에 의해서 평균값을 산출합니다. 값이 저희와 다르게 나온다면 평균을 계산하는 방법으로 다음의 방법을 사용했기 때문입니다.
금일의 상승폭(하락폭)평균 = (전일의 상승폭(하락폭)평균*(n-1)+금일의상승폭(하락폭))/n
예스차트와 예스트레이더 에서 산술평균(=단순이동평균) 방법을 이용하는 이유는 사용자 함수로 지표를 표현하기 위해서 입니다.
지표함수로 표현한다면 전일값을 참조하는 방식으로 구현할 수 있지만, 지표함수로 작성하게 되면 사용자가 임의로 수식을 편집하거나 변경할 수 없게 됩니다. 또한 계산식을 확인하기도 어렵습니다.
대부분의 차트 프로그램이 기술적분석 지표를 지표함수로 표현함으로써 지표가 계산되는 구체적인 내부로직을 알지 못하게 됩니다. 하지만, 저희 예스스탁에서는 가능한한 모든 지표를 사용자 함수로 구현함으로써 사용자가 그 지표의 구현방식을 정확히 이해하는 것이 시스템트레이딩에 필수적인 요소라고 보기 때문에 가급적 사용자함수로 지표를 구현하려고 합니다.
-----------------------------------------------------------------------------------
답변에 사용자함수로 편집가능하다고 쓰여있는데 사용자함수에는 어떤 지표함수도 없더군요
일단은 제가 산술평균에 의한 RSI 함수식을 작성해봤는데 수식이 잘못되었는지
예스프로의 RSI 지표와 맞지 않더군요
제가 작성한 RSI 함수식은
-----------------------------------------------------------------
Input : Period(14);
Var : value1(0), value2(0),value3(0),value4(0),value5(0),value6(0);
If C-C[1] > 0 Then
value1 = C-C[1];
else
value2 = C[1]-C;
value3 = accumn(value1, Period);
value4 = accumn(value2, Period);
value5 = ((value3/Period)/(value4/Period));
value6 = 100-(100/(1+value5));
Plot1(value6, "RSI");
-------------------------------------------------------------
Input : Period(14);
Var : value1(0), value2(0),value3(0),value4(0),value5(0),value6(0);
If C-C[1] > 0 Then
value1 = C-C[1];
else
value2 = C[1]-C;
value3 = accumn(value1, Period);
value4 = accumn(value2, Period);
value5 = value3 + value4;
value6 = (value3/value5)*100;
Plot1(value6, "RSI");
----------------------------------------------------------------
위 두개는 예스프로에 지표로 구현은 되는데 수치들이 RSI지표와 맞지 않더군요.
그래서 사이보스의 RSI 함수식과 다른 방법으로 평균을 구하는 계산식으로
지표작성을 해보았습니다.
사이보스에도 RSI 함수식이 나와있지 않아 사이보스 홈페이지 Q/A에 답변으로
올라와있던 RSI 함수식을 이용해 예스프로에 적용해보았습니다.
그런데 밑에 두개 지표는 검증은 되는데 예스프로에 표현이 안되더군요
아무 선도없는 백지상태의 지표로 출력됩니다.
------------------------------------------------------------------
Input : Period(14);
Var : value1(0), value2(0),value3(0),value4(0),value5(0),value6(0);
If C-C[1] > 0 Then
value1 = C-C[1];
else
value2 = C[1]-C;
value3 = (value3[1]*(Period-1)+value1)/Period;
value4 = (value4[1]*(Period-1)+value2)/Period;
value5 = (value3/value4);
value6 = 100-(100/(1+value5));
Plot1(value6, "RSI");
------------------------------------------------------------------
Input : Period(14);
Var : value1(0), value2(0),value3(0),value4(0),value5(0),value6(0),value7(0),value8(0),value9(0);
value1 = C-C[1];
If value1 > 0 Then
value2 = value1;
else
value2 = 0;
If value1<0 Then
value3 = abs(value1);
else
value3 = 0;
value4 = (value4[1]*(Period-1)+value2)/Period;
value5 = (value5[1]*(Period-1)+value3)/Period;
If value5!=0 Then
value8 = (value4/value5);
Else
value8 = 0;
value9 = 100-(100/(1+value8));
Plot1(value9, "RSI");
----------------------------------------------------------------------
사이보스에 올라왔던 답변과 수식입니다. ---------------------------------
CT에서의 RSI지표값과 직접 계산한 RSI값에서 차이가 발생하는 것은 상승폭과 하락폭의 평균을 구하는 방식에서 차이가 있어서 발생하는 것으로 보입니다.
일반적으로 RSI지표를 구할 때 상승폭과 하락폭의 평균을 구하는 경우 Wilders smoothing 방법을 사용합니다.
Wilders Smoothing = Previous M.A. + (Close - Previous M.A.)/Periods
따라서 위의 Wilders smoothing방법으로 평균을 구하면 지표값의 차이는 없을 것이라 생각됩니다. 아울러 RSI지표를 계산하는 CT식을 보내드립니다.
Var1=close-close(1)
If Var1> 0 Then
Var2=var1
Else
Var2=0
End If
If Var1<0 Then
Var3=abs(Var1)
Else
Var3=0
End If
Var4=mov(Var2,maLen,s)
Var5=mov(Var3,malen,s)
Var4=var4(1)+((Var2-var4(1))/malen)
Var5=var5(1)+((Var3-var5(1))/malen)
Var8=var4+var5
If var8<>0 then
Var10=100*var4/var8
Else
var10=0
End If
Call ploti1("RSI",Var10)
---------------------------------------------------------------------------------
제가 사용하려는 지표는 StochRSI 지표입니다.
RSI 수치가 다르다보니 사이보스와는 전혀다른 패턴과 수치값이 나옵니다.
사이보스에는 RSI 지표 가 소수점 세자리까지 출력되더군요.
예스프로에서 RSI및 파생지표의 같은
패턴과 수치값을 구해서 시스템에 적용하고자 합니다.
조언부탁드립니다.
다음글
이전글