커뮤니티

트레이딩뷰 수식 변환 요청드립니다.

프로필 이미지
자동매매구축
2023-08-23 10:23:55
1234
글번호 171766
답변완료
슈퍼트렌드 수식 변환 요청드립니다. 과거글 찾아보니 예스스탁에서 만든 슈퍼트렌드가 있던데 트레이딩뷰의 슈퍼트렌드와 타점이 다릅니다. 그래서 함수 공부도 해볼 겸 트레이딩뷰에서 공식 제공하는 수식을 변환하고 있는데, 생각대로 그려지지 않습니다. 예스 랭귀지를 처음 해보는거라 변수 선언 등에서 뭔가 놓친 부분이 있는것 같은데 아래의 트레이딩뷰 코드와 똑같이 잘 변환됬는지, 혹시 예스 랭귀지 문법상 틀린 부분이 있는지 확인 부탁드립니다. (그림이 안그려지는 걸로 봐선 분명 틀린 부분이 있을 건데 잘 모르겠습니다.) /*트레이딩뷰 소스 발췌 pine_supertrend(factor, atrPeriod) => src = hl2 atr = ta.atr(atrPeriod) upperBand = src + factor * atr lowerBand = src - factor * atr prevLowerBand = nz(lowerBand[1]) prevUpperBand = nz(upperBand[1]) lowerBand := lowerBand > prevLowerBand or close[1] < prevLowerBand ? lowerBand : prevLowerBand upperBand := upperBand < prevUpperBand or close[1] > prevUpperBand ? upperBand : prevUpperBand int direction = na float superTrend = na prevSuperTrend = superTrend[1] if na(atr[1]) direction := 1 else if prevSuperTrend == prevUpperBand direction := close > upperBand ? -1 : 1 else direction := close < lowerBand ? 1 : -1 superTrend := direction == -1 ? lowerBand : upperBand [superTrend, direction] [pineSupertrend, pineDirection] = pine_supertrend(3, 10) */ // 예스랭귀지 변환 input : factor(3),atrPeriod(10); var : src(0), sATR(0), upperBand(0), lowerBand(0), prevLowerBand(0), prevUpperBand(0); var : direction(0), superTrend(0), prevSuperTrend(0), linecolor(0); src = (High + Low) / 2; sATR = ATR(atrPeriod); upperBand = src + factor * sATR; lowerBand = src - factor * sATR; prevLowerBand = lowerBand[1]; prevUpperBand = upperBand[1]; if !(lowerBand > prevLowerBand or close[1] < prevLowerBand) Then{ lowerBand = prevLowerBand; } if !(upperBand < prevUpperBand or close[1] > prevUpperBand) Then{ upperBand = prevUpperBand; } prevSuperTrend = superTrend[1]; if IsNAN(sATR[1]) Then { direction = 1; }Else if prevSuperTrend == prevUpperBand Then { direction = IFF(close > upperBand, -1, 1); } Else { direction = IFF(close < lowerBand, 1, -1); } superTrend = IFF(direction == -1, lowerBand, upperBand); linecolor = IFF(direction == -1 , Green, Red); plot1(superTrend,"SuperTrend",linecolor);
지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2023-08-23 11:51:15

안녕하세요 예스스탁입니다. prevLowerBand = nz(lowerBand[1]) prevUpperBand = nz(upperBand[1]) 위 부분 처리에 문제가 있었습니다. 1봉전 값이 N/A일때는 0이 저장되게 하셔야 합니다. input : atrPeriod(10),factor(3); var : src(0),atrv(0),direction(0),prevSuperTrend(0); var : upperBand(0),lowerBand(0),prevLowerBand(0),prevUpperBand(0); var : superTrend(0),linecolor(0); src = (h+l)/2; atrv = atr(atrPeriod); upperBand = src + factor * atrv; lowerBand = src - factor * atrv; ### prevLowerBand = Iff(IsNan(lowerBand[1])==False,lowerBand[1],0); prevUpperBand = Iff(IsNan(upperBand[1])==False,upperBand[1],0); if !(lowerBand > prevLowerBand or close[1] < prevLowerBand) Then lowerBand = prevLowerBand; if !(upperBand < prevUpperBand or close[1] > prevUpperBand) Then upperBand = prevUpperBand; prevSuperTrend = superTrend[1]; if isnan(atrv[1]) Then direction = 1; else if prevSuperTrend == prevUpperBand Then direction = iff(close > upperBand , -1 , 1); else direction = iff(close < lowerBand , 1 , -1); superTrend = iff(direction == -1 , lowerBand , upperBand); linecolor = IFF(direction == -1 , Green, Red); Plot1(superTrend); 즐거운 하루되세요 > 자동매매구축 님이 쓴 글입니다. > 제목 : 트레이딩뷰 수식 변환 요청드립니다. > 슈퍼트렌드 수식 변환 요청드립니다. 과거글 찾아보니 예스스탁에서 만든 슈퍼트렌드가 있던데 트레이딩뷰의 슈퍼트렌드와 타점이 다릅니다. 그래서 함수 공부도 해볼 겸 트레이딩뷰에서 공식 제공하는 수식을 변환하고 있는데, 생각대로 그려지지 않습니다. 예스 랭귀지를 처음 해보는거라 변수 선언 등에서 뭔가 놓친 부분이 있는것 같은데 아래의 트레이딩뷰 코드와 똑같이 잘 변환됬는지, 혹시 예스 랭귀지 문법상 틀린 부분이 있는지 확인 부탁드립니다. (그림이 안그려지는 걸로 봐선 분명 틀린 부분이 있을 건데 잘 모르겠습니다.) /*트레이딩뷰 소스 발췌 pine_supertrend(factor, atrPeriod) => src = hl2 atr = ta.atr(atrPeriod) upperBand = src + factor * atr lowerBand = src - factor * atr prevLowerBand = nz(lowerBand[1]) prevUpperBand = nz(upperBand[1]) lowerBand := lowerBand > prevLowerBand or close[1] < prevLowerBand ? lowerBand : prevLowerBand upperBand := upperBand < prevUpperBand or close[1] > prevUpperBand ? upperBand : prevUpperBand int direction = na float superTrend = na prevSuperTrend = superTrend[1] if na(atr[1]) direction := 1 else if prevSuperTrend == prevUpperBand direction := close > upperBand ? -1 : 1 else direction := close < lowerBand ? 1 : -1 superTrend := direction == -1 ? lowerBand : upperBand [superTrend, direction] [pineSupertrend, pineDirection] = pine_supertrend(3, 10) */ // 예스랭귀지 변환 input : factor(3),atrPeriod(10); var : src(0), sATR(0), upperBand(0), lowerBand(0), prevLowerBand(0), prevUpperBand(0); var : direction(0), superTrend(0), prevSuperTrend(0), linecolor(0); src = (High + Low) / 2; sATR = ATR(atrPeriod); upperBand = src + factor * sATR; lowerBand = src - factor * sATR; prevLowerBand = lowerBand[1]; prevUpperBand = upperBand[1]; if !(lowerBand > prevLowerBand or close[1] < prevLowerBand) Then{ lowerBand = prevLowerBand; } if !(upperBand < prevUpperBand or close[1] > prevUpperBand) Then{ upperBand = prevUpperBand; } prevSuperTrend = superTrend[1]; if IsNAN(sATR[1]) Then { direction = 1; }Else if prevSuperTrend == prevUpperBand Then { direction = IFF(close > upperBand, -1, 1); } Else { direction = IFF(close < lowerBand, 1, -1); } superTrend = IFF(direction == -1, lowerBand, upperBand); linecolor = IFF(direction == -1 , Green, Red); plot1(superTrend,"SuperTrend",linecolor);