커뮤니티

부탁드립니다 항상 감사합니다

프로필 이미지
윤호석
2025-09-13 16:25:06.0
85
글번호 193982
답변완료
{========================================== Disparity Index + RSI (YesLanguage version) - DI = 100 * (src - SMA(src,L)) / SMA(src,L) - scaledDI = 20 * DI + 50 - RSI = Wilder RMA - RSI MA/BB 옵션: 0=None, 1=SMA, 2=SMA+BB, 3=EMA, 4=RMA, 5=WMA, 6=VWMA - Regular Bullish/Bearish Divergence (라벨) ==========================================} {----------- Inputs -----------} input: DI_Length(14); input: DI_Source(1); { 1=Close, 2=Open, 3=High, 4=Low, 5=Typical(H+L+C)/3 } input: RSI_Length(14); { RSI Smoothing / BB } 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); { Divergence } input: CalcDivergence(false); input: LB_Left(5); input: LB_Right(5); input: RangeLower(5); input: RangeUpper(60); { Colors } input: DiUpColor(RGB(14,187,35)); { ≈ #0ebb23 } input: DiDnColor(Red); input: LevelColor(Gray); input: RsiColor(RGB(126,87,194)); { ≈ #7E57C2 } input: BBColor(Green); input: BullColor(Green); input: BearColor(Red); {----------- Vars -----------} vars: srcVal(0), smaDI(0), di(0), scaledDi(0), chg(0), up(0), dn(0), upRMA(0), dnRMA(0), rsi(0), rsiMA(0), rsiStDev(0), rsiBB_Up(0), rsiBB_Dn(0), bullCond(false), bearCond(false), rsiPivotLow(0), rsiPrevPivotLow(0), pxPivotLow(0), pxPrevPivotLow(0), rsiPivotHigh(0), rsiPrevPivotHigh(0), pxPivotHigh(0), pxPrevPivotHigh(0), pivBarsL(0), pivBarsH(0), lblBull(0), lblBear(0); {----------- Source 선택 -----------} if DI_Source = 1 then srcVal = Close else if DI_Source = 2 then srcVal = Open else if DI_Source = 3 then srcVal = High else if DI_Source = 4 then srcVal = Low else srcVal = (High + Low + Close) / 3; {----------- Disparity Index -----------} smaDI = Average(srcVal, DI_Length); if smaDI <> 0 then di = 100 * (srcVal - smaDI) / smaDI else di = 0; scaledDi = 20 * di + 50; { 색상 } vars: diColor(0); if scaledDi >= 50 then diColor = DiUpColor else diColor = DiDnColor; Plot1(scaledDi, "Scaled DI", diColor); Plot2(50, "DI 50", LevelColor); {----------- RSI (Wilder RMA) -----------} chg = Close - Close[1]; up = MaxList(chg, 0); dn = MaxList(-chg, 0); 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 / BB -----------} { MA_Type: 0=None, 1=SMA, 2=SMA+BB, 3=EMA, 4=RMA, 5=WMA, 6=VWMA } if MA_Type = 1 or MA_Type = 2 then rsiMA = Average(rsi, MA_Len) else if MA_Type = 3 then rsiMA = XAverage(rsi, MA_Len) else if MA_Type = 4 then begin if CurrentBar = 1 then rsiMA = rsi else rsiMA = (rsiMA[1] * (MA_Len - 1) + rsi) / MA_Len; end else if MA_Type = 5 then rsiMA = WAverage(rsi, MA_Len) else if MA_Type = 6 then rsiMA = Summation(rsi * Volume, MA_Len) / Summation(Volume, MA_Len) else rsiMA = 0; if MA_Type >= 1 then Plot9(rsiMA, "RSI_MA", Yellow); if MA_Type = 2 then begin rsiStDev = StdDev(rsi, MA_Len); rsiBB_Up = rsiMA + rsiStDev * BB_Mult; rsiBB_Dn = rsiMA - rsiStDev * BB_Mult; Plot10(rsiBB_Up, "RSI_BB_Up", BBColor); Plot11(rsiBB_Dn, "RSI_BB_Dn", BBColor); end; {----------- Regular Divergence -----------} if CalcDivergence then begin { RSI Pivot Low } if SwingLow(rsi, LB_Left, LB_Right, pivBarsL) then begin rsiPivotLow = rsi[pivBarsL]; pxPivotLow = Low[LB_Right]; bullCond = (rsiPrevPivotLow <> 0) and (pxPrevPivotLow <> 0) and (pxPivotLow < pxPrevPivotLow) { Price LL } and (rsiPivotLow > rsiPrevPivotLow) { RSI HL } and (pivBarsL >= RangeLower and pivBarsL <= RangeUpper); if bullCond then begin lblBull = Text_New(sDate[LB_Right], sTime[LB_Right], rsiPivotLow, " Bull "); Text_SetStyle(lblBull, 2, 0); Text_SetColor(lblBull, BullColor); end; rsiPrevPivotLow = rsiPivotLow; pxPrevPivotLow = pxPivotLow; end; { RSI Pivot High } if SwingHigh(rsi, LB_Left, LB_Right, pivBarsH) then begin rsiPivotHigh = rsi[pivBarsH]; pxPivotHigh = High[LB_Right]; bearCond = (rsiPrevPivotHigh <> 0) and (pxPrevPivotHigh <> 0) and (pxPivotHigh > pxPrevPivotHigh) { Price HH } and (rsiPivotHigh < rsiPrevPivotHigh) { RSI LH } and (pivBarsH >= RangeLower and pivBarsH <= RangeUpper); if bearCond then begin lblBear = Text_New(sDate[LB_Right], sTime[LB_Right], rsiPivotHigh, " Bear "); Text_SetStyle(lblBear, 2, 1); Text_SetColor(lblBear, BearColor); end; rsiPrevPivotHigh = rsiPivotHigh; pxPrevPivotHigh = pxPivotHigh; end; end; 수정부탁드립니다
지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2025-09-15 10:36:21.0

안녕하세요 예스스탁입니다. #{----------- Inputs -----------} input: DI_Length(14); input: DI_Source(1); # { 1=Close, 2=Open, 3=High, 4=Low, 5=Typical(H+L+C)/3 } input: RSI_Length(14); #{ RSI Smoothing / BB } 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); #{ Divergence } input: CalcDivergence(false); input: LB_Left(5); input: LB_Right(5); input: RangeLower(5); input: RangeUpper(60); #{ Colors } input: DiUpColor(RGB(14,187,35)); #{ ≈ #0ebb23 } input: DiDnColor(Red); input: LevelColor(Gray); input: RsiColor(RGB(126,87,194)); #{ ≈ #7E57C2 } input: BBColor(Green); input: BullColor(Green); input: BearColor(Red); #{----------- Vars -----------} vars: srcVal(0), smaDI(0), di(0), scaledDi(0), chg(0), up(0), dn(0), upRMA(0), dnRMA(0), rsi(0), rsiMA(0), rsiStDev(0), rsiBB_Up(0), rsiBB_Dn(0), bullCond(false), bearCond(false), rsiPivotLow(0), rsiPrevPivotLow(0), pxPivotLow(0), pxPrevPivotLow(0), rsiPivotHigh(0), rsiPrevPivotHigh(0), pxPivotHigh(0), pxPrevPivotHigh(0), pivBarsL(0), pivBarsH(0), lblBull(0), lblBear(0); #{----------- Source 선택 -----------} if DI_Source == 1 then srcVal = Close; else if DI_Source == 2 then srcVal = Open; else if DI_Source == 3 then srcVal = High; else if DI_Source == 4 then srcVal = Low; else srcVal = (High + Low + Close) / 3; #{----------- Disparity Index -----------} smaDI = ma(srcVal, DI_Length); if smaDI <> 0 then di = 100 * (srcVal - smaDI) / smaDI; else di = 0; scaledDi = 20 * di + 50; #{ 색상 } vars: diColor(0); if scaledDi >= 50 then diColor = DiUpColor; else diColor = DiDnColor; Plot1(scaledDi, "Scaled DI", diColor); Plot2(50, "DI 50", LevelColor); #{----------- RSI (Wilder RMA) -----------} chg = Close - Close[1]; up = MaxList(chg, 0); dn = MaxList(-chg, 0); 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 / BB -----------} #{ MA_Type: 0=None, 1=SMA, 2=SMA+BB, 3=EMA, 4=RMA, 5=WMA, 6=VWMA } if MA_Type == 1 or MA_Type == 2 then rsiMA = ma(rsi, MA_Len); else if MA_Type == 3 then rsiMA = Ema(rsi, MA_Len); else if MA_Type == 4 then begin if CurrentBar == 1 then rsiMA = rsi; else rsiMA = (rsiMA[1] * (MA_Len - 1) + rsi) / MA_Len; end else if MA_Type == 5 then rsiMA = WMa(rsi, MA_Len); else if MA_Type == 6 then rsiMA = AccumN(rsi * Volume, MA_Len) / AccumN(Volume, MA_Len); else rsiMA = 0; if MA_Type >= 1 then Plot9(rsiMA, "RSI_MA", Yellow); if MA_Type == 2 then begin rsiStDev = Std(rsi, MA_Len); rsiBB_Up = rsiMA + rsiStDev * BB_Mult; rsiBB_Dn = rsiMA - rsiStDev * BB_Mult; Plot10(rsiBB_Up, "RSI_BB_Up", BBColor); Plot11(rsiBB_Dn, "RSI_BB_Dn", BBColor); end; #{----------- Regular Divergence -----------} if CalcDivergence then begin #{ RSI Pivot Low } if SwingLow(1, rsi, LB_Left, LB_Right, pivBarsL)!= -1 then begin rsiPivotLow = rsi[pivBarsL]; pxPivotLow = Low[LB_Right]; bullCond = (rsiPrevPivotLow <> 0) and (pxPrevPivotLow <> 0) and (pxPivotLow < pxPrevPivotLow) #{ Price LL } and (rsiPivotLow > rsiPrevPivotLow) #{ RSI HL } and (pivBarsL >= RangeLower and pivBarsL <= RangeUpper); if bullCond then begin lblBull = Text_New(sDate[LB_Right], sTime[LB_Right], rsiPivotLow, " Bull "); Text_SetStyle(lblBull, 2, 0); Text_SetColor(lblBull, BullColor); end; rsiPrevPivotLow = rsiPivotLow; pxPrevPivotLow = pxPivotLow; end; #{ RSI Pivot High } if SwingHigh(1, rsi, LB_Left, LB_Right, pivBarsH) != -1 then begin rsiPivotHigh = rsi[pivBarsH]; pxPivotHigh = High[LB_Right]; bearCond = (rsiPrevPivotHigh <> 0) and (pxPrevPivotHigh <> 0) and (pxPivotHigh > pxPrevPivotHigh) #{ Price HH } and (rsiPivotHigh < rsiPrevPivotHigh) # { RSI LH } and (pivBarsH >= RangeLower and pivBarsH <= RangeUpper); if bearCond then begin lblBear = Text_New(sDate[LB_Right], sTime[LB_Right], rsiPivotHigh, " Bear "); Text_SetStyle(lblBear, 2, 1); Text_SetColor(lblBear, BearColor); end; rsiPrevPivotHigh = rsiPivotHigh; pxPrevPivotHigh = pxPivotHigh; end; end; 즐거운 하루되세요 > 윤호석 님이 쓴 글입니다. > 제목 : 부탁드립니다 항상 감사합니다 > {========================================== Disparity Index + RSI (YesLanguage version) - DI = 100 * (src - SMA(src,L)) / SMA(src,L) - scaledDI = 20 * DI + 50 - RSI = Wilder RMA - RSI MA/BB 옵션: 0=None, 1=SMA, 2=SMA+BB, 3=EMA, 4=RMA, 5=WMA, 6=VWMA - Regular Bullish/Bearish Divergence (라벨) ==========================================} {----------- Inputs -----------} input: DI_Length(14); input: DI_Source(1); { 1=Close, 2=Open, 3=High, 4=Low, 5=Typical(H+L+C)/3 } input: RSI_Length(14); { RSI Smoothing / BB } 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); { Divergence } input: CalcDivergence(false); input: LB_Left(5); input: LB_Right(5); input: RangeLower(5); input: RangeUpper(60); { Colors } input: DiUpColor(RGB(14,187,35)); { ≈ #0ebb23 } input: DiDnColor(Red); input: LevelColor(Gray); input: RsiColor(RGB(126,87,194)); { ≈ #7E57C2 } input: BBColor(Green); input: BullColor(Green); input: BearColor(Red); {----------- Vars -----------} vars: srcVal(0), smaDI(0), di(0), scaledDi(0), chg(0), up(0), dn(0), upRMA(0), dnRMA(0), rsi(0), rsiMA(0), rsiStDev(0), rsiBB_Up(0), rsiBB_Dn(0), bullCond(false), bearCond(false), rsiPivotLow(0), rsiPrevPivotLow(0), pxPivotLow(0), pxPrevPivotLow(0), rsiPivotHigh(0), rsiPrevPivotHigh(0), pxPivotHigh(0), pxPrevPivotHigh(0), pivBarsL(0), pivBarsH(0), lblBull(0), lblBear(0); {----------- Source 선택 -----------} if DI_Source = 1 then srcVal = Close else if DI_Source = 2 then srcVal = Open else if DI_Source = 3 then srcVal = High else if DI_Source = 4 then srcVal = Low else srcVal = (High + Low + Close) / 3; {----------- Disparity Index -----------} smaDI = Average(srcVal, DI_Length); if smaDI <> 0 then di = 100 * (srcVal - smaDI) / smaDI else di = 0; scaledDi = 20 * di + 50; { 색상 } vars: diColor(0); if scaledDi >= 50 then diColor = DiUpColor else diColor = DiDnColor; Plot1(scaledDi, "Scaled DI", diColor); Plot2(50, "DI 50", LevelColor); {----------- RSI (Wilder RMA) -----------} chg = Close - Close[1]; up = MaxList(chg, 0); dn = MaxList(-chg, 0); 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 / BB -----------} { MA_Type: 0=None, 1=SMA, 2=SMA+BB, 3=EMA, 4=RMA, 5=WMA, 6=VWMA } if MA_Type = 1 or MA_Type = 2 then rsiMA = Average(rsi, MA_Len) else if MA_Type = 3 then rsiMA = XAverage(rsi, MA_Len) else if MA_Type = 4 then begin if CurrentBar = 1 then rsiMA = rsi else rsiMA = (rsiMA[1] * (MA_Len - 1) + rsi) / MA_Len; end else if MA_Type = 5 then rsiMA = WAverage(rsi, MA_Len) else if MA_Type = 6 then rsiMA = Summation(rsi * Volume, MA_Len) / Summation(Volume, MA_Len) else rsiMA = 0; if MA_Type >= 1 then Plot9(rsiMA, "RSI_MA", Yellow); if MA_Type = 2 then begin rsiStDev = StdDev(rsi, MA_Len); rsiBB_Up = rsiMA + rsiStDev * BB_Mult; rsiBB_Dn = rsiMA - rsiStDev * BB_Mult; Plot10(rsiBB_Up, "RSI_BB_Up", BBColor); Plot11(rsiBB_Dn, "RSI_BB_Dn", BBColor); end; {----------- Regular Divergence -----------} if CalcDivergence then begin { RSI Pivot Low } if SwingLow(rsi, LB_Left, LB_Right, pivBarsL) then begin rsiPivotLow = rsi[pivBarsL]; pxPivotLow = Low[LB_Right]; bullCond = (rsiPrevPivotLow <> 0) and (pxPrevPivotLow <> 0) and (pxPivotLow < pxPrevPivotLow) { Price LL } and (rsiPivotLow > rsiPrevPivotLow) { RSI HL } and (pivBarsL >= RangeLower and pivBarsL <= RangeUpper); if bullCond then begin lblBull = Text_New(sDate[LB_Right], sTime[LB_Right], rsiPivotLow, " Bull "); Text_SetStyle(lblBull, 2, 0); Text_SetColor(lblBull, BullColor); end; rsiPrevPivotLow = rsiPivotLow; pxPrevPivotLow = pxPivotLow; end; { RSI Pivot High } if SwingHigh(rsi, LB_Left, LB_Right, pivBarsH) then begin rsiPivotHigh = rsi[pivBarsH]; pxPivotHigh = High[LB_Right]; bearCond = (rsiPrevPivotHigh <> 0) and (pxPrevPivotHigh <> 0) and (pxPivotHigh > pxPrevPivotHigh) { Price HH } and (rsiPivotHigh < rsiPrevPivotHigh) { RSI LH } and (pivBarsH >= RangeLower and pivBarsH <= RangeUpper); if bearCond then begin lblBear = Text_New(sDate[LB_Right], sTime[LB_Right], rsiPivotHigh, " Bear "); Text_SetStyle(lblBear, 2, 1); Text_SetColor(lblBear, BearColor); end; rsiPrevPivotHigh = rsiPivotHigh; pxPrevPivotHigh = pxPivotHigh; end; end; 수정부탁드립니다