#공통 지표
Predictive Channels은 tradingView의 LuxAlgo라는 개발자가 만든 지표입니다.
실시간으로 미래 거래 범위를 예측하여
효과적인 지지 및 저항 수준과 추세판에 도움을 제공하는것을 목표로 만들어 졌습니다.
일반적인 밴드형 지표(볼린저 밴드, 켈트너 채널 등)는
중심선(이동평균)과 위·아래로 일정 폭의 띠(밴드)
를 그려서 가격이 밴드를 넘으면 과매수/과매도, 돌파 등으로 보게 됩니다.
Predictive Channels는 여기서 한 단계 더 나가서
중심선 자체가 가격을 따라 붙으면서 방향성을 반영하고
밴드 폭을 실제 변동성(True Range, ATR 기반)으로 계속 업데이트하면서
결과적으로 지금 추세를 고려했을 때, 앞으로 어느 범위 안에서 움직일 가능성이 큰지를 보여주는 채널 역할을 합니다.
그래서 이름이 “Predictive(예측형) Channels”이고 실제로는 적응형 평균선 + 변동성 채널입니다.
//-------------------------------
// 사용자 입력값
//-------------------------------
input : mult(5); // ATR 배율(몇 배 만큼 밴드를 벌릴지)
input : slope(50); // 평균선 기울기/민감도 조절용 계수
input : r2Color(Red); // 상단 저항선 색상
input : r1Color(SALMON); // 하단(중간) 저항선 색상
input : avgColor(Gray); // 중심선(평균선) 색상
input : s1Color(TURQUOISE);// 상단 지지선 색상
input : s2Color(blue); // 하단 지지선 색상
//-----------------------------------------------------------------------------}
// 계산부 시작
//-----------------------------------------------------------------------------{
var : pc_avg(close), // 지표에서 사용하는 '적응형 중심 가격(평균선)'
os(1), // 방향 플래그(1: 상승, -1: 하락)
hold_atr(0); // 현재 구간에서 사용 중인 ATR 값(밴드 폭)
var : alpha(0), // 지수이동평균 가중치(1/200)
A(0), // ATR을 지수평활한 값
R(0); // 밴드 폭의 기본값(= A * mult)
var : pc_R2(0), // 상단 저항선(윗밴드)
pc_R1(0), // 중간 저항선(상단과 중심 사이)
pc_s1(0), // 중간 지지선(중심과 하단 사이)
pc_S2(0); // 하단 지지선(아랫밴드)
var : TL1(0),TL2(0),TL3(0),TL4(0),TL5(0); // (현재 코드에서는 미사용 변수)
// ATR 평활을 위한 알파 값
alpha = 1 / 200;
// A : TrueRange를 200기간 지수이동평균으로 평활
A = iff(IsNan(A[1]) == true , // 직전 값이 없으면(첫 시작 시)
ma(TrueRange, 200) , // 200기간 단순 이동평균으로 초기화
alpha * TrueRange + // 새 TR 값에 알파 가중치
(1 - alpha) * iff(isnan(A[1])==true,0,A[1]) // 이전 A 값에 (1-알파) 가중치
);
// R : 평활된 ATR(A)에 배율(mult)을 곱한 밴드 기본 폭
R = iff(isnan(A) == true,0,A) * mult;
// pc_avg : 중심선(적응형 평균)
// - 종가가 현재 중심선에서 R 이상 벗어나면, 중심선을 바로 종가로 점프
// - 그렇지 않으면, hold_atr와 방향(os), 민감도(slope, mult)에 따라 조금씩 이동
pc_avg = iff(
abs(close - pc_avg) > R , // 종가가 중심선에서 R보다 많이 벗어나면
close , // 중심선을 곧바로 종가에 맞춤(리셋)
pc_avg + os * hold_atr / (slope*Mult) // 아니면 조금씩 이동(추세 따라가며 완만하게)
);
// hold_atr : 현재 사용하는 ATR 폭
// - 중심선이 종가와 같아지는 순간(리셋 시점)에 R/2로 재설정
// - 그렇지 않으면 이전 값 유지
hold_atr = iff(pc_avg == close , R / 2 , hold_atr);
// os : 방향 플래그(추세 방향)
// - 중심선이 이전 값보다 커지면 1 (상승)
// - 중심선이 이전 값보다 작아지면 -1 (하락)
// - 같으면 이전 방향 유지
os = iff(pc_avg > pc_avg[1] , 1 ,
iff(pc_avg < pc_avg[1] , -1 , os));
// 위/아래 밴드 계산
pc_R2 = pc_avg + hold_atr; // 상단 저항선(최상위 밴드)
pc_R1 = pc_avg + hold_atr/2; // 중간 저항선(상단과 평균 사이)
pc_S1 = pc_avg - hold_atr/2; // 중간 지지선(평균과 하단 사이)
pc_S2 = pc_avg - hold_atr; // 하단 지지선(최하위 밴드)
//-------------------------------
// 차트에 플롯
//-------------------------------
plot1(pc_R2,"Upper Resistance"); // 상단 저항선
plot2(pc_R1,"Lower Resistance"); // 중간 저항선
plot3(pc_avg, "Average"); // 중심선(평균)
plot4(pc_S1, "Upper Support"); // 상단 지지선
plot5(pc_S2, "Lower Support"); // 하단 지지선
JavaScript
복사
