Search
📝

SuperTrend 지표

Input : period(10),multiplier(3); Var : src(0), alpha(0),AtrV(0),upperBand(0),lowerBand(0),direction(0),SuperTrend(C); // 현재바가 1보다 클때(데이터가 충분할 때) 실행 if CurrentBar > 1 Then { //중앙가격(고가와 저가의 평균)을 기준가격으로 사용 src = (H+L)/2; //평활계수 계산 alpha = 1 / period ; // ATR계산 //이전봉의 값이 없으면(최초값) TrueRange의 Period기간 단순평균 //이전봉의 값이 있으면 지수평활 방식으로 계산 ATrV = IFf(IsNan(ATrV[1]) == true, ma(TrueRange,period) , alpha * TrueRange + (1 - alpha) * IFf(isnan(ATrV[1])==true,0,ATrV[1])); // 기본 상/하단 밴드(중앙값 ± multiplier * ATR) upperBand = src + multiplier * AtrV; lowerBand = src - multiplier * AtrV; // 하단 밴드 보정: 특정 조건에서 이전값 유지 (밴드의 일관성 유지 목적) if lowerBand > lowerBand[1] or close[1] < lowerBand[1] Then lowerBand = lowerBand; Else lowerBand = lowerBand[1]; // 상단 밴드 보정: 특정 조건에서 이전값 유지 if upperBand < upperBand[1] or close[1] > upperBand[1] Then upperBand = upperBand; Else upperBand = upperBand[1]; // 가격이 상단/하단 밴드를 돌파했는지로 방향 결정 if C > UpperBand Then direction = 1; // 상승 추세 if C < LowerBand Then direction = -1; // 하락 추세 // SuperTrend 값은 방향에 따라 해당 밴드를 사용 if direction == 1 Then SuperTrend = lowerband; // 상승 구간에서는 하단 밴드를 SuperTrend로 사용 Else SuperTrend = upperband; // 하락 구간에서는 상단 밴드를 SuperTrend로 사용 //방향에 따라 색상을 바꿔서 SuperTrend 표시 Plot1(SuperTrend,"SuperTrend",IFF(direction==1,Red,Blue)); }
JavaScript
복사
[설명]
슈퍼트렌드(Supertrend) 지표는 2009년 Olivier Seban이 고안한 기술적 분석 지표로 ATR(평균진폭범위)과 배수를 이용해 추세를 따라가는 보조지표로, 가격이 선 위에 있으면 상승 추세(매수 신호), 선 아래에 있으면 하락 추세(매도 신호)로 해석합니다. 추세가 명확할 때는 효과적이지만 횡보장에서는 거짓 신호가 많고 다소 지연된다는 단점이 있어 단독 사용보다는 다른 지표와 함께 사용할 때 신뢰도가 더 높습니다.
1. Supertrend를 상향돌파 매수, 하향돌파 매도 Input : period(10),multiplier(3); Var : src(0), AtrV(0),upperBand(0),lowerBand(0), prevLowerBand(0), prevUpperBand(0); Var : prevSuperTrend(0), direction(0),alpha(0),source(0),SuperTrend(C); // 현재바가 1보다 클때(데이터가 충분할 때) 실행 if CurrentBar > 1 Then { //중앙가격(고가와 저가의 평균)을 기준가격으로 사용 src = (H+L)/2; //평활계수 계산 alpha = 1 / period ; // ATR계산 //이전봉의 값이 없으면(최초값) TrueRange의 Period기간 단순평균 //이전봉의 값이 있으면 지수평활 방식으로 계산 ATrV = IFf(IsNan(ATrV[1]) == true, ma(TrueRange,period) , alpha * TrueRange + (1 - alpha) * IFf(isnan(ATrV[1])==true,0,ATrV[1])); // 기본 상/하단 밴드(중앙값 ± multiplier * ATR) upperBand = src + multiplier * AtrV; lowerBand = src - multiplier * AtrV; // 이전봉의 밴드값 저장 prevLowerBand = lowerBand[1]; prevUpperBand = upperBand[1]; // 하단 밴드 보정: 특정 조건에서 이전값 유지 (밴드의 일관성 유지 목적) if lowerBand > prevLowerBand or close[1] < prevLowerBand Then lowerBand = lowerBand; Else lowerBand = prevLowerBand; // 상단 밴드 보정: 특정 조건에서 이전값 유지 if upperBand < prevUpperBand or close[1] > prevUpperBand Then upperBand = upperBand; Else upperBand = prevUpperBand; // 가격이 상단/하단 밴드를 돌파했는지로 방향 결정 if C > UpperBand Then direction = 1; // 상승 추세 if C < LowerBand Then direction = -1; // 하락 추세 // SuperTrend 값은 방향에 따라 해당 밴드를 사용 if direction == 1 Then SuperTrend = lowerband; // 상승 구간에서는 하단 밴드를 SuperTrend로 사용 Else SuperTrend = upperband; // 하락 구간에서는 상단 밴드를 SuperTrend로 사용 //방향에 따라 색상을 바꿔서 SuperTrend 표시 Plot1(SuperTrend,"SuperTrend",IFF(direction==1,Red,Blue)); }
JavaScript
복사