커뮤니티

시스템식 부탁드립니다,

프로필 이미지
나도부자1
2025-07-22 16:36:33
165
글번호 192674
답변완료

첨부 이미지

더운날씨 수고하십니다. super trend지표를 이용하여 시스템을 구현하려 하는데 잘 안되네요. * 공통조건 : upertrendAtrPeriod 와 supertrendAtrMultiplier는 모두 변수편집 가능하게 1. 첫 번째 수식 매수 진입 : super trend지표 3개 모두가 상승 추세일때 (한 개라도 색상이 다르면 매수 진입 금지) 매수 청산 : 3개 중 하나라도 하락 전환 시 매수 청산 매도 진입 : super trend지표 3개 모두가 하락 추세 (한 개라도 색상이 다르면 매도 진입 금지) 매수 청산 : 3가지 중 하나라도 상승 전환 시 매도 청산 2. 두 번째 수식 매수 진입 : 1) 주가가 일목 균형표 구름대 위에 위치하고 2) super trend지표 3개 모두가 상승 추세 일 때 (한 개라도 색상이 다르면 매수 진입 금지) 매수 청산 : 3개 중 하나라도 하락 전환 시 매수 청산 매도 진입 : 1) 주가가 일목 균형표 구름대 아래에 위치하고 2) super trend지표 3개 모두가 하락 추세 일 때 (한 개라도 색상이 다르면 매도 진입 금지) 매수 청산 : 3개 중 하나라도 상승 전환 시 매수 청산 ----------------------------------------------------------------------------- input : upertrendAtrPeriod(11); input : supertrendAtrMultiplier(3); var : haClose(0),haOpen(0),haHigh(0),haLow(0),haTR(0),alpha(0),haTrueRange(0); var : haSupertrendUp(0),haSupertrendDown(0),trendingUp(Nan),trendingDown(Nan); var : direction(0),supertrend(0),supertrendUp(False),supertrendDown(False); if index == 0 then { haClose = (O+H+L+C)/4; haOpen = open; haHigh = MaxList( high, haOpen, haClose); haLow = MinList( low, haOpen,haClose); } else { haClose = (O+H+L+C)/4; haOpen = (haOpen [1] + haClose [1])/2 ; haHigh = MaxList(High, haOpen, haClose) ; haLow = MinList(Low, haOpen, haClose) ; } haTR = max(haHigh - haLow, abs(haHigh - haClose[1]), abs(haLow - haClose[1])); alpha = 1 / upertrendAtrPeriod ; haTrueRange = IFf(IsNan(haTrueRange[1]) == true, ma(haTR,upertrendAtrPeriod) , alpha * haTR + (1 - alpha) * IFf(isnan(haTrueRange[1])==true,0,haTrueRange[1])); haSupertrendUp =((haHigh +haLow )/2 )-(supertrendAtrMultiplier *haTrueRange ); haSupertrendDown =((haHigh +haLow )/2 )+(supertrendAtrMultiplier *haTrueRange ); direction = 0; trendingUp = iff(haClose[1]>trendingUp[1] , max (haSupertrendUp ,trendingUp[1]) , haSupertrendUp); trendingDown = iff(haClose[1]<trendingDown[1] , min (haSupertrendDown ,trendingDown[1]) , haSupertrendDown); direction = iff(haClose > trendingDown[1] , 1 , iff(haClose < trendingUp[1], -1 , IFf(IsNan(direction[1]) == true,1,direction[1]))); supertrend = iff(direction == 1 , trendingUp , trendingDown); if direction == 1 Then plot1(supertrend,"supertrend", Magenta); Else plot1(supertrend,"supertrend", Lime); 위의 수식은 커뮤니티 "수식 작성 Q&A"에 있는 것인데 혹시 수식이 다르면 정상적인 super trend지표로 작성 부탁 드립니다. 더운 날씨 건강에 유의 하시고 미리 감사드립니다. 수고하세요.
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2025-07-23 11:26:47

안녕하세요 예스스탁입니다. 1 input : period1(11),multiplier1(3); input : period2(22),multiplier2(3); input : period3(33),multiplier3(3); var : src(0); var : AtrV1(0),upperBand1(0),lowerBand1(0), prevLowerBand1(0), prevUpperBand1(0); var : prevSuperTrend1(0), direction1(0),alpha1(0),source1(0),SuperTrend1(C); var : AtrV2(0),upperBand2(0),lowerBand2(0), prevLowerBand2(0), prevUpperBand2(0); var : prevSuperTrend2(0), direction2(0),alpha2(0),source2(0),SuperTrend2(C); var : AtrV3(0),upperBand3(0),lowerBand3(0), prevLowerBand3(0), prevUpperBand3(0); var : prevSuperTrend3(0), direction3(0),alpha3(0),source3(0),SuperTrend3(C); var : A(0),A1(0),A2(0),B(0),B1(0),B2(0); src = (H+L)/2; if CurrentBar > 1 Then { alpha1 = 1 / period1 ; source1 = max(high - low, abs(high - close[1]), abs(low - close[1])); ATrV1 = alpha1 * source1 + (1 - alpha1) * ATrV1[1]; //지수가중이평방식 upperBand1 = src + multiplier1 * AtrV1; lowerBand1 = src - multiplier1 * AtrV1; prevLowerBand1 = lowerBand1[1]; prevUpperBand1 = upperBand1[1]; if lowerBand1 > prevLowerBand1 or close[1] < prevLowerBand1 Then lowerBand1 = lowerBand1; Else lowerBand1 = prevLowerBand1; if upperBand1 < prevUpperBand1 or close[1] > prevUpperBand1 Then upperBand1 = upperBand1; Else upperBand1 = prevUpperBand1; if C > UpperBand1 Then direction1 = 1; if C < LowerBand1 Then direction1 = -1; if direction1 == 1 Then SuperTrend1 = lowerband1; Else SuperTrend1 = upperband1; alpha2 = 1 / period2 ; source2 = max(high - low, abs(high - close[1]), abs(low - close[1])); ATrV2 = alpha2 * source2 + (1 - alpha2) * ATrV2[1]; //지수가중이평방식 upperBand2 = src + multiplier2 * AtrV2; lowerBand2 = src - multiplier2 * AtrV2; prevLowerBand2 = lowerBand2[1]; prevUpperBand2 = upperBand2[1]; if lowerBand2 > prevLowerBand2 or close[1] < prevLowerBand2 Then lowerBand2 = lowerBand2; Else lowerBand2 = prevLowerBand2; if upperBand2 < prevUpperBand2 or close[1] > prevUpperBand2 Then upperBand2 = upperBand2; Else upperBand2 = prevUpperBand2; if C > UpperBand2 Then direction2 = 1; if C < LowerBand2 Then direction2 = -1; if direction2 == 1 Then SuperTrend2 = lowerband2; Else SuperTrend2 = upperband2; alpha3 = 1 / period3 ; source3 = max(high - low, abs(high - close[1]), abs(low - close[1])); ATrV3 = alpha3 * source3 + (1 - alpha3) * ATrV3[1]; //지수가중이평방식 upperBand3 = src + multiplier3 * AtrV3; lowerBand3 = src - multiplier3 * AtrV3; prevLowerBand3 = lowerBand3[1]; prevUpperBand3 = upperBand3[1]; if lowerBand3 > prevLowerBand3 or close[1] < prevLowerBand3 Then lowerBand3 = lowerBand3; Else lowerBand3 = prevLowerBand3; if upperBand3 < prevUpperBand3 or close[1] > prevUpperBand3 Then upperBand3 = upperBand3; Else upperBand3 = prevUpperBand3; if C > UpperBand3 Then direction3 = 1; if C < LowerBand3 Then direction3 = -1; if direction3 == 1 Then SuperTrend3 = lowerband3; Else SuperTrend3 = upperband3; if MarketPosition <= 0 and direction1 == 1 and direction1 == 1 and direction3 == 1 Then Buy(); if MarketPosition == 1 and (direction1 == -1 or direction1 == -1 or direction3 == -1) Then ExitLong(); if MarketPosition >= 0 and direction1 == -1 and direction1 == -1 and direction3 == -1 Then Sell(); if MarketPosition == -1 and (direction1 == 1 or direction1 == 1 or direction3 == 1) Then ExitShort(); } 2 input : period1(11),multiplier1(3); input : period2(22),multiplier2(3); input : period3(33),multiplier3(3); var : src(0); var : AtrV1(0),upperBand1(0),lowerBand1(0), prevLowerBand1(0), prevUpperBand1(0); var : prevSuperTrend1(0), direction1(0),alpha1(0),source1(0),SuperTrend1(C); var : AtrV2(0),upperBand2(0),lowerBand2(0), prevLowerBand2(0), prevUpperBand2(0); var : prevSuperTrend2(0), direction2(0),alpha2(0),source2(0),SuperTrend2(C); var : AtrV3(0),upperBand3(0),lowerBand3(0), prevLowerBand3(0), prevUpperBand3(0); var : prevSuperTrend3(0), direction3(0),alpha3(0),source3(0),SuperTrend3(C); var : A(0),A1(0),A2(0),B(0),B1(0),B2(0); var : 기준선(0), 전환선(0),선행스팬1(0), 선행스팬2(0); 전환선 = (Highest(High, 9) + Lowest(Low, 9)) / 2; 기준선 = (Highest(High, 26) + Lowest(Low, 26)) / 2; 선행스팬1 = (전환선[25] + 기준선[25]) / 2 ; 선행스팬2 = (Highest(High, 52)[25] + Lowest(Low, 52)[25]) / 2; src = (H+L)/2; if CurrentBar > 1 Then { alpha1 = 1 / period1 ; source1 = max(high - low, abs(high - close[1]), abs(low - close[1])); ATrV1 = alpha1 * source1 + (1 - alpha1) * ATrV1[1]; //지수가중이평방식 upperBand1 = src + multiplier1 * AtrV1; lowerBand1 = src - multiplier1 * AtrV1; prevLowerBand1 = lowerBand1[1]; prevUpperBand1 = upperBand1[1]; if lowerBand1 > prevLowerBand1 or close[1] < prevLowerBand1 Then lowerBand1 = lowerBand1; Else lowerBand1 = prevLowerBand1; if upperBand1 < prevUpperBand1 or close[1] > prevUpperBand1 Then upperBand1 = upperBand1; Else upperBand1 = prevUpperBand1; if C > UpperBand1 Then direction1 = 1; if C < LowerBand1 Then direction1 = -1; if direction1 == 1 Then SuperTrend1 = lowerband1; Else SuperTrend1 = upperband1; alpha2 = 1 / period2 ; source2 = max(high - low, abs(high - close[1]), abs(low - close[1])); ATrV2 = alpha2 * source2 + (1 - alpha2) * ATrV2[1]; //지수가중이평방식 upperBand2 = src + multiplier2 * AtrV2; lowerBand2 = src - multiplier2 * AtrV2; prevLowerBand2 = lowerBand2[1]; prevUpperBand2 = upperBand2[1]; if lowerBand2 > prevLowerBand2 or close[1] < prevLowerBand2 Then lowerBand2 = lowerBand2; Else lowerBand2 = prevLowerBand2; if upperBand2 < prevUpperBand2 or close[1] > prevUpperBand2 Then upperBand2 = upperBand2; Else upperBand2 = prevUpperBand2; if C > UpperBand2 Then direction2 = 1; if C < LowerBand2 Then direction2 = -1; if direction2 == 1 Then SuperTrend2 = lowerband2; Else SuperTrend2 = upperband2; alpha3 = 1 / period3 ; source3 = max(high - low, abs(high - close[1]), abs(low - close[1])); ATrV3 = alpha3 * source3 + (1 - alpha3) * ATrV3[1]; //지수가중이평방식 upperBand3 = src + multiplier3 * AtrV3; lowerBand3 = src - multiplier3 * AtrV3; prevLowerBand3 = lowerBand3[1]; prevUpperBand3 = upperBand3[1]; if lowerBand3 > prevLowerBand3 or close[1] < prevLowerBand3 Then lowerBand3 = lowerBand3; Else lowerBand3 = prevLowerBand3; if upperBand3 < prevUpperBand3 or close[1] > prevUpperBand3 Then upperBand3 = upperBand3; Else upperBand3 = prevUpperBand3; if C > UpperBand3 Then direction3 = 1; if C < LowerBand3 Then direction3 = -1; if direction3 == 1 Then SuperTrend3 = lowerband3; Else SuperTrend3 = upperband3; if MarketPosition <= 0 and C > max(선행스팬1,선행스팬2) and direction1 == 1 and direction1 == 1 and direction3 == 1 Then Buy(); if MarketPosition == 1 and (direction1 == -1 or direction1 == -1 or direction3 == -1) Then ExitLong(); if MarketPosition >= 0 and C < min(선행스팬1,선행스팬2) and direction1 == -1 and direction1 == -1 and direction3 == -1 Then Sell(); if MarketPosition == -1 and (direction1 == 1 or direction1 == 1 or direction3 == 1) Then ExitShort(); } 즐거운 하루되세요 > 나도부자1 님이 쓴 글입니다. > 제목 : 시스템식 부탁드립니다, > 더운날씨 수고하십니다. super trend지표를 이용하여 시스템을 구현하려 하는데 잘 안되네요. * 공통조건 : upertrendAtrPeriod 와 supertrendAtrMultiplier는 모두 변수편집 가능하게 1. 첫 번째 수식 매수 진입 : super trend지표 3개 모두가 상승 추세일때 (한 개라도 색상이 다르면 매수 진입 금지) 매수 청산 : 3개 중 하나라도 하락 전환 시 매수 청산 매도 진입 : super trend지표 3개 모두가 하락 추세 (한 개라도 색상이 다르면 매도 진입 금지) 매수 청산 : 3가지 중 하나라도 상승 전환 시 매도 청산 2. 두 번째 수식 매수 진입 : 1) 주가가 일목 균형표 구름대 위에 위치하고 2) super trend지표 3개 모두가 상승 추세 일 때 (한 개라도 색상이 다르면 매수 진입 금지) 매수 청산 : 3개 중 하나라도 하락 전환 시 매수 청산 매도 진입 : 1) 주가가 일목 균형표 구름대 아래에 위치하고 2) super trend지표 3개 모두가 하락 추세 일 때 (한 개라도 색상이 다르면 매도 진입 금지) 매수 청산 : 3개 중 하나라도 상승 전환 시 매수 청산 ----------------------------------------------------------------------------- input : upertrendAtrPeriod(11); input : supertrendAtrMultiplier(3); var : haClose(0),haOpen(0),haHigh(0),haLow(0),haTR(0),alpha(0),haTrueRange(0); var : haSupertrendUp(0),haSupertrendDown(0),trendingUp(Nan),trendingDown(Nan); var : direction(0),supertrend(0),supertrendUp(False),supertrendDown(False); if index == 0 then { haClose = (O+H+L+C)/4; haOpen = open; haHigh = MaxList( high, haOpen, haClose); haLow = MinList( low, haOpen,haClose); } else { haClose = (O+H+L+C)/4; haOpen = (haOpen [1] + haClose [1])/2 ; haHigh = MaxList(High, haOpen, haClose) ; haLow = MinList(Low, haOpen, haClose) ; } haTR = max(haHigh - haLow, abs(haHigh - haClose[1]), abs(haLow - haClose[1])); alpha = 1 / upertrendAtrPeriod ; haTrueRange = IFf(IsNan(haTrueRange[1]) == true, ma(haTR,upertrendAtrPeriod) , alpha * haTR + (1 - alpha) * IFf(isnan(haTrueRange[1])==true,0,haTrueRange[1])); haSupertrendUp =((haHigh +haLow )/2 )-(supertrendAtrMultiplier *haTrueRange ); haSupertrendDown =((haHigh +haLow )/2 )+(supertrendAtrMultiplier *haTrueRange ); direction = 0; trendingUp = iff(haClose[1]>trendingUp[1] , max (haSupertrendUp ,trendingUp[1]) , haSupertrendUp); trendingDown = iff(haClose[1]<trendingDown[1] , min (haSupertrendDown ,trendingDown[1]) , haSupertrendDown); direction = iff(haClose > trendingDown[1] , 1 , iff(haClose < trendingUp[1], -1 , IFf(IsNan(direction[1]) == true,1,direction[1]))); supertrend = iff(direction == 1 , trendingUp , trendingDown); if direction == 1 Then plot1(supertrend,"supertrend", Magenta); Else plot1(supertrend,"supertrend", Lime); 위의 수식은 커뮤니티 "수식 작성 Q&A"에 있는 것인데 혹시 수식이 다르면 정상적인 super trend지표로 작성 부탁 드립니다. 더운 날씨 건강에 유의 하시고 미리 감사드립니다. 수고하세요.