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
복사