Search
Duplicate
📝

Reversal Band 지표

#지표
이 코드는 변동성 기반 상·하단 밴드와 그 주변의 파동(Upper/Lower Wave)을 그려서 추세 전환 구간을 시각화하는 지표입니다.
단기 이동평균과 장기 이동평균을 기준선으로 사용합니다. 일정기간의 고저폭(high-low) 평균에 factor를 곱해 변동성(volatility)을 구하고 최고값/최저값에 변동성을 가감해서 상단(upper), 하단(lower) 밴드를 만듭니다. 현재 방향의 반대편 밴드는 숨기고 기존 상·하단 밴드 주변에 변동성을 반영한 파동형 밴드를 형성합니다. 즉 Upper Band / Lower Band는 추세 방향에 따라 한쪽만 보이도록, Upper Wave / Lower Wave는 ATR 기반 파동으로 보조 역할을 합니다.
// ======================= // 입력 값 설정 // ======================= input : ShortPeriod(25),LongPeriod(50); // 밴드 계산에 사용할 기본 기간 input : factor(1.0); // 변동성 배율 (볼래틸리티 확대/축소용) // ======================= // 변수 선언 // ======================= var : direction(0); // 방향(1:상승, -1:하락) var : volatility(0),upper_band(0),lower_band(0); //상하단 밴드 var : sig_up(False),sig_dn(False); //돌파 신호 var : upper_Wave(0),lower_Wave(0); // 파동(Upper/Lower Wave) 밴드 var : hlc3(0),alpha(0),ATrv(0); // HLC3 가격, EMA 계수, ATR 기반 변동성 var :tx1(0),tx2(0); // (현재 코드에서는 미사용 변수) // ======================= // 기준선 및 가격 중심값 계산 // ======================= var1 = ma(C,ShortPeriod); // 25일 종가 이동평균 (단기 기준선) var2 = ma(C,LongPeriod); // length 기간 종가 이동평균 (중기/기본 기준선) hlc3 = (H+L+C)/3; // HLC3 (고가+저가+종가)/3, 대표가격 // ======================= // 변동성 및 상하 밴드 계산 // ======================= volatility = ma(high-low, 70) * factor; // 70기간 고저폭 평균에 factor를 곱한 변동성 upper_band = highest(var1 + volatility, int(LongPeriod/2)); // 단기기준선+변동성 값의 최고값 (LongPeriod/2 기간) → 상단 밴드 lower_band = lowest(var2 - volatility, int(LongPeriod/2)); // 중기기준선-변동성 값의 최저값 (LongPeriod/2 기간) → 하단 밴드 // ======================= // 상/하단 밴드 돌파 신호 계산 // ======================= sig_up = CrossUp(hlc3, upper_band); // HLC3가 상단 밴드를 위로 돌파하면 상승 신호 sig_dn = CrossDown(hlc3, lower_band); // HLC3가 하단 밴드를 아래로 돌파하면 하락 신호 // ======================= // 방향(direction) 설정 // ======================= if sig_up == true Then direction = 1; // 상승 돌파 시 방향 = 1 (상승) if sig_dn == true Then direction = -1; // 하락 돌파 시 방향 = -1 (하락) // 현재 방향에 따라 반대편 밴드는 표시하지 않도록 NaN 처리 upper_band = iff(direction == 1 , Nan , upper_band); // 상승 중에는 upper(상단 밴드)를 NaN으로 (표시 안 함) lower_band = iff(direction == -1 , Nan , lower_band); // 하락 중에는 lower(하단 밴드)를 NaN으로 (표시 안 함) // ======================= // ATR 기반 변동성(ATrV) 계산 // ======================= // alpha: EMA 계수 (1/100) alpha = 1 / 100 ; // ATrV: TrueRange에 대한 EMA를 계산 ATrV = IFf(IsNan(ATrV[1]) == true, ATR(100) , // 직전 값이 NaN이면 100기간 TR 평균으로 초기화 alpha * TrueRange + (1 - alpha) * IFf(isnan(ATrV[1])==true,0,ATrV[1]) // 그렇지 않으면 EMA 방식 업데이트 ); // ======================= // ATR 파동 밴드 계산 // ======================= upper_Wave = lower_band + ATRV*5; // 하단 밴드 + ATR*5 → 상단 파동 lower_Wave = upper_band - ATRV*5; // 상단 밴드 - ATR*5 → 하단 파동 // ======================= // 파동(Upper/Lower Wave) 및 밴드 출력 // ======================= // Upper Wave 출력 (유효한 값이고, 인덱스 홀수일 때만 색 적용) if IsNaN(upper_Wave) == False Then plot1(upper_Wave, "Upper Wave",Cyan); Else NoPlot(1); // 값이 NaN이면 해당 플롯 제거 // Lower Wave 출력 (유효한 값이고, 인덱스 홀수일 때만 색 적용) if IsNaN(lower_Wave) == False Then plot2(lower_Wave, "Lower Wave",Cyan); Else NoPlot(2); // Upper Band (하락 방향일 때만 실제 값이 남도록 위에서 처리됨) if IsNaN(upper_band) == False Then plot3(upper_band, "Upper Band",Red); Else NoPlot(3); // Lower Band (상승 방향일 때만 실제 값이 남도록 위에서 처리됨) if IsNaN(lower_band) == False Then plot4(lower_band, "Lower Band",Lime); Else NoPlot(4);
JavaScript
복사