예스스탁
예스스탁 답변
2025-09-15 10:38:14.0
안녕하세요
예스스탁입니다.
#{----------- Inputs -----------}
input : DI_Length(14);
input : RSI_Length(14);
input : MA_Type(1); #{ 0=None, 1=SMA, 2=SMA+BB, 3=EMA, 4=RMA, 5=WMA, 6=VWMA }
input : MA_Len(14);
input : BB_Mult(2.0);
input : CalcDivergence(true);
#{ 색상(플랫폼 팔레트에 맞게 필요 시 바꾸세요) }
input : DiUpColor(Green), DiDnColor(Red);
input : RsiColor(Magenta);
input : BBColor(Green);
input : LevelColor(Gray);
#{----------- Vars -----------}
var : src(0), di(0), scaledDi(0), smaDI(0);
var : rsi(0), chg(0), up(0), dn(0), upRMA(0), dnRMA(0);
var : rsiMA(0), rsiBB_up(0), rsiBB_dn(0), rsiStDev(0);
#{ 다이버전스용 }
input : LB_Left(5), LB_Right(5);
var : rsiPivotLow(0), rsiPivL_Bars(0), rsiPrevPivotLow(0);
var : rsiPivotHigh(0), rsiPivH_Bars(0), rsiPrevPivotHigh(0);
var : pxPivotLow(0), pxPrevPivotLow(0);
var : pxPivotHigh(0), pxPrevPivotHigh(0);
var : bullCond(false), bearCond(false);
var : txBull(0), txBear(0);
#{----------- Source -----------}
src = Close; # { 필요 시 Open/High/Low 등으로 변경 가능 }
#{----------- Disparity Index -----------}
smaDI = Average(src, DI_Length);
if smaDI <> 0 then
di = 100 * (src - smaDI) / smaDI;
else
di = 0;
scaledDi = 20 * di + 50;
#{ 색상 선택 }
var : diColor(0);
diColor = IFF(scaledDi >= 50, DiUpColor, DiDnColor);
Plot1(scaledDi, "Scaled DI", diColor); #{ DI(스케일드) }
Plot2(50, "DI 50", LevelColor); #{ Pine의 hline(50) 대체 }
#{----------- RSI (Wilder RMA) -----------}
chg = Close - Close[1];
up = MaxList(chg, 0);
dn = MaxList(-chg, 0);
/* RMA 구현: prev*(Len-1)/Len + x/Len */
if CurrentBar == 1 then
begin
upRMA = up;
dnRMA = dn;
end
else
begin
upRMA = (upRMA[1] * (RSI_Length - 1) + up) / RSI_Length;
dnRMA = (dnRMA[1] * (RSI_Length - 1) + dn) / RSI_Length;
end;
if dnRMA = 0 then
rsi = 100;
else if upRMA = 0 then
rsi = 0;
else
rsi = 100 - (100 / (1 + upRMA / dnRMA));
Plot3(rsi, "RSI", RsiColor);
/* RSI 레벨 라인 (70/60/50/40/30) */
Plot4(70, "RSI 70", LevelColor);
Plot5(60, "RSI 60", LevelColor);
Plot6(50, "RSI 50", LevelColor);
Plot7(40, "RSI 40", LevelColor);
Plot8(30, "RSI 30", LevelColor);
#{----------- RSI Smoothing MA / BB -----------}
/* MA 선택 함수 대체: 플랫폼 내장 MA가 다르면 Average/EMA/WMA 등으로 매핑하세요 */
#{ SMA }
if MA_Type == 1 or MA_Type == 2 then
rsiMA = ma(rsi, MA_Len);
else if MA_Type == 3 then # { EMA }
rsiMA = Ema(rsi, MA_Len);
else if MA_Type == 4 then #{ RMA(=SMMA) }
begin
if CurrentBar == 1 then
rsiMA = rsi;
else
rsiMA = (rsiMA[1] * (MA_Len - 1) + rsi) / MA_Len;
end
else if MA_Type == 5 then #{ WMA }
rsiMA = WMA(rsi, MA_Len);
else if MA_Type == 6 then #{ VWMA (가중=거래량) }
rsiMA = AccumN(rsi * Volume, MA_Len) / AccumN(Volume, MA_Len);
else
rsiMA = NaN;
#{ MA 표시 }
if MA_Type >= 1 then
Plot9(rsiMA, "RSI_MA", Yellow);
#{ BB (SMA + Bollinger Bands) }
if MA_Type == 2 then
{
rsiStDev = Std(rsi, MA_Len);
rsiBB_up = rsiMA + rsiStDev;
}
즐거운 하루되세요
> 윤호석 님이 쓴 글입니다.
> 제목 : 부탁드립니다 항상 감사합니다
> {==========================================
Disparity Index + RSI (YesLanguage ver.)
- DI = 100 * (src - SMA(src,L)) / SMA
- scaledDI = 20*DI + 50 (RSI 스케일과 유사)
- RSI = Wilder's RMA 방식
- RSI MA 옵션: None/SMA/BB/EMA/RMA/WMA/VWMA
- Regular Bullish/Bearish Divergence 라벨
==========================================}
{----------- Inputs -----------}
input : DI_Length(14);
input : RSI_Length(14);
input : MA_Type(1); { 0=None, 1=SMA, 2=SMA+BB, 3=EMA, 4=RMA, 5=WMA, 6=VWMA }
input : MA_Len(14);
input : BB_Mult(2.0);
input : CalcDivergence(true);
{ 색상(플랫폼 팔레트에 맞게 필요 시 바꾸세요) }
input : DiUpColor(Green), DiDnColor(Red);
input : RsiColor(Magenta);
input : BBColor(Green);
input : LevelColor(Gray);
{----------- Vars -----------}
var : src(0), di(0), scaledDi(0), smaDI(0);
var : rsi(0), chg(0), up(0), dn(0), upRMA(0), dnRMA(0);
var : rsiMA(0), rsiBB_up(0), rsiBB_dn(0), rsiStDev(0);
{ 다이버전스용 }
input : LB_Left(5), LB_Right(5);
var : rsiPivotLow(0), rsiPivL_Bars(0), rsiPrevPivotLow(0);
var : rsiPivotHigh(0), rsiPivH_Bars(0), rsiPrevPivotHigh(0);
var : pxPivotLow(0), pxPrevPivotLow(0);
var : pxPivotHigh(0), pxPrevPivotHigh(0);
var : bullCond(false), bearCond(false);
var : txBull(0), txBear(0);
{----------- Source -----------}
src = Close; { 필요 시 Open/High/Low 등으로 변경 가능 }
{----------- Disparity Index -----------}
smaDI = Average(src, DI_Length);
if smaDI <> 0 then
di = 100 * (src - smaDI) / smaDI
else
di = 0;
scaledDi = 20 * di + 50;
{ 색상 선택 }
var : diColor(0);
diColor = IFF(scaledDi >= 50, DiUpColor, DiDnColor);
Plot1(scaledDi, "Scaled DI", diColor); { DI(스케일드) }
Plot2(50, "DI 50", LevelColor); { Pine의 hline(50) 대체 }
{----------- RSI (Wilder RMA) -----------}
chg = Close - Close[1];
up = MaxList(chg, 0);
dn = MaxList(-chg, 0);
/* RMA 구현: prev*(Len-1)/Len + x/Len */
if CurrentBar = 1 then
begin
upRMA = up;
dnRMA = dn;
end
else
begin
upRMA = (upRMA[1] * (RSI_Length - 1) + up) / RSI_Length;
dnRMA = (dnRMA[1] * (RSI_Length - 1) + dn) / RSI_Length;
end;
if dnRMA = 0 then
rsi = 100
else if upRMA = 0 then
rsi = 0
else
rsi = 100 - (100 / (1 + upRMA / dnRMA));
Plot3(rsi, "RSI", RsiColor);
/* RSI 레벨 라인 (70/60/50/40/30) */
Plot4(70, "RSI 70", LevelColor);
Plot5(60, "RSI 60", LevelColor);
Plot6(50, "RSI 50", LevelColor);
Plot7(40, "RSI 40", LevelColor);
Plot8(30, "RSI 30", LevelColor);
{----------- RSI Smoothing MA / BB -----------}
/* MA 선택 함수 대체: 플랫폼 내장 MA가 다르면 Average/EMA/WMA 등으로 매핑하세요 */
{ SMA }
if MA_Type = 1 or MA_Type = 2 then
rsiMA = Average(rsi, MA_Len)
else if MA_Type = 3 then { EMA }
rsiMA = XAverage(rsi, MA_Len)
else if MA_Type = 4 then { RMA(=SMMA) }
begin
if CurrentBar = 1 then
rsiMA = rsi
else
rsiMA = (rsiMA[1] * (MA_Len - 1) + rsi) / MA_Len;
end
else if MA_Type = 5 then { WMA }
rsiMA = WAverage(rsi, MA_Len)
else if MA_Type = 6 then { VWMA (가중=거래량) }
rsiMA = Summation(rsi * Volume, MA_Len) / Summation(Volume, MA_Len)
else
rsiMA = NaN;
{ MA 표시 }
if MA_Type >= 1 then
Plot9(rsiMA, "RSI_MA", Yellow);
{ BB (SMA + Bollinger Bands) }
if MA_Type = 2 then
begin
rsiStDev = StandardDev(rsi, MA_Len, 1); { 1 = 표본/모수 선택은 환경 따라 조정 }
rsiBB_up = rsiMA + rs_
수정부탁드려요