커뮤니티

수식 부탁드립니다

프로필 이미지
사노소이
2025-08-13 03:16:36
111
글번호 193208
답변완료
지표식 부탁 드립니다. //@version=5 indicator("HL Optimized Trend Tracker", overlay=true) // === inputs length = input.int(2, "Period", minval=1) percent = input.float(1.5, "Optimization Coeff", step=0.1, minval=0) hllength = input.int(20, "Highest and Lowest Length", minval=1) // === highest / lowest series used as VAR source src = ta.highest(high, hllength) srcl = ta.lowest(low, hllength) // === VAR moving-average function (fixed VAR type) Var_Func(src, length) => valpha = 2 / (length + 1) vud1 = src > src[1] ? src - src[1] : 0 vdd1 = src < src[1] ? src[1] - src : 0 vUD = math.sum(vud1, 9) vDD = math.sum(vdd1, 9) vCMO = nz((vUD - vDD) / (vUD + vDD)) VAR = 0.0 VAR := nz(valpha * math.abs(vCMO) * src) + (1 - valpha * math.abs(vCMO)) * nz(VAR[1]) VAR // === compute VAR-based MAs (top & low) MAvg = Var_Func(src, length) MAvgl = Var_Func(srcl, length) // === HOTT (top) logic fark = MAvg * percent * 0.01 longStop = MAvg - fark longStopPrev = nz(longStop[1], longStop) longStop := MAvg > longStopPrev ? math.max(longStop, longStopPrev) : longStop shortStop = MAvg + fark shortStopPrev = nz(shortStop[1], shortStop) shortStop := MAvg < shortStopPrev ? math.min(shortStop, shortStopPrev) : shortStop dir = 1 dir := nz(dir[1], dir) dir := dir == -1 and MAvg > shortStopPrev ? 1 : dir == 1 and MAvg < longStopPrev ? -1 : dir MT = dir == 1 ? longStop : shortStop HOTT = MAvg > MT ? MT * (200 + percent) / 200 : MT * (200 - percent) / 200 // === LOTT (low) logic (mirror) farkl = MAvgl * percent * 0.01 longStopl = MAvgl - farkl longStopPrevl = nz(longStopl[1], longStopl) longStopl := MAvgl > longStopPrevl ? math.max(longStopl, longStopPrevl) : longStopl shortStopl = MAvgl + farkl shortStopPrevl = nz(shortStopl[1], shortStopl) shortStopl := MAvgl < shortStopPrevl ? math.min(shortStopl, shortStopPrevl) : shortStopl dirl = 1 dirl := nz(dirl[1], dirl) dirl := dirl == -1 and MAvgl > shortStopPrevl ? 1 : dirl == 1 and MAvgl < longStopPrevl ? -1 : dirl MTl = dirl == 1 ? longStopl : shortStopl LOTT = MAvgl > MTl ? MTl * (200 + percent) / 200 : MTl * (200 - percent) / 200 // === Plot only HOTT & LOTT plot(nz(HOTT[2]), title="HOTT", color=color.blue, linewidth=2) plot(nz(LOTT[2]), title="LOTT", color=color.red, linewidth=2)
지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2025-08-13 11:17:20

안녕하세요 예스스탁입니다. input : length(2); input : percent(1.5); input : hllength(20); var : src(0),srcl(0); src = highest(high, hllength); srcl = lowest(low, hllength); // === VAR moving-average function (fixed VAR type) #Var_Func(src, length) => var : valpha(0),vud1(0),vdd1(0),vUD(0),vDD(0),vCMO(0),MAvg(0); var : valpha2(0),vud12(0),vdd12(0),vUD2(0),vDD2(0),vCMO2(0),MAvgl(0); valpha = 2 / (length + 1); vud1 = iff(src > src[1] , src - src[1] , 0); vdd1 = iff(src < src[1] , src[1] - src , 0); vUD = AccumN(vud1, 9); vDD = AccumN(vdd1, 9); vCMO = IFf(IsNan((vUD - vDD) / (vUD + vDD))==true,0,(vUD - vDD) / (vUD + vDD)); MAvg = iff(IsNan(valpha * abs(vCMO) * src)==true,0,valpha * abs(vCMO) * src) + (1 - valpha * abs(vCMO)) * iff(isnan(MAvg[1])==true,0,MAvg[1]); valpha2 = 2 / (length + 1); vud12 = iff(src > src[1] , src - src[1] , 0); vdd12 = iff(src < src[1] , src[1] - src , 0); vUD2 = AccumN(vud12, 9); vDD2 = AccumN(vdd12, 9); vCMO2 = IFf(IsNan((vUD2 - vDD2) / (vUD2 + vDD2))==true,0,(vUD2 - vDD2) / (vUD2 + vDD2)); MAvgl = iff(IsNan(valpha2 * abs(vCMO2) * srcl)==true,0,valpha2 * abs(vCMO2) * srcl) + (1 - valpha2 * abs(vCMO2)) * iff(isnan(MAvgl[1])==true,0,MAvgl[1]); var : fark(0),longStop(0),longStopPrev(0),shortStop(0),shortStopPrev(0),dir(0),MT(0),HOTT(0); fark = MAvg * percent * 0.01; longStop = MAvg - fark; longStopPrev = iff(IsNan(longStop[1]) ==true,longStop,longStop[1]); longStop = iff(MAvg > longStopPrev , max(longStop, longStopPrev) , longStop); shortStop = MAvg + fark; shortStopPrev = iff(IsNan(shortStop[1]) == true, shortStop, shortStop[1]); shortStop = iff(MAvg < shortStopPrev , min(shortStop, shortStopPrev) , shortStop); dir = 1; dir = iff(IsNan(dir[1])==true, dir,dir[1]); dir = iff(dir == -1 and MAvg > shortStopPrev , 1 , IFf(dir == 1 and MAvg < longStopPrev , -1 , dir)); MT = iff(dir == 1 , longStop , shortStop); HOTT = iff(MAvg > MT , MT * (200 + percent) / 200 , MT * (200 - percent) / 200); var : farkl(0),longStopl(0),longStopPrevl(0),shortStopl(0),shortStopPrevl(0),dirl(0),MTl(0),LOTT(0); farkl = MAvgl * percent * 0.01; longStopl = MAvgl - farkl; longStopPrevl = iff(isnan(longStopl[1])==true,longStopl,longStopl[1]); longStopl = iff(MAvgl > longStopPrevl , max(longStopl, longStopPrevl) , longStopl); shortStopl = MAvgl + farkl; shortStopPrevl = iff(isnan(shortStopl[1]), shortStopl, shortStopl[1]); shortStopl = iff(MAvgl < shortStopPrevl , min(shortStopl, shortStopPrevl) , shortStopl); dirl = 1; dirl = iff(isnan(dirl[1]) == true, dirl,dirl[1]); dirl = iff(dirl == -1 and MAvgl > shortStopPrevl , 1 , iff(dirl == 1 and MAvgl < longStopPrevl , -1 , dirl)); MTl = iff(dirl == 1 , longStopl , shortStopl); LOTT = iff(MAvgl > MTl , MTl * (200 + percent) / 200 , MTl * (200 - percent) / 200); // === Plot only HOTT & LOTT plot1(HOTT[2], "HOTT"); plot2(LOTT[2], "LOTT"); 즐거운 하루되세요 > 사노소이 님이 쓴 글입니다. > 제목 : 수식 부탁드립니다 > 지표식 부탁 드립니다. //@version=5 indicator("HL Optimized Trend Tracker", overlay=true) // === inputs length = input.int(2, "Period", minval=1) percent = input.float(1.5, "Optimization Coeff", step=0.1, minval=0) hllength = input.int(20, "Highest and Lowest Length", minval=1) // === highest / lowest series used as VAR source src = ta.highest(high, hllength) srcl = ta.lowest(low, hllength) // === VAR moving-average function (fixed VAR type) Var_Func(src, length) => valpha = 2 / (length + 1) vud1 = src > src[1] ? src - src[1] : 0 vdd1 = src < src[1] ? src[1] - src : 0 vUD = math.sum(vud1, 9) vDD = math.sum(vdd1, 9) vCMO = nz((vUD - vDD) / (vUD + vDD)) VAR = 0.0 VAR := nz(valpha * math.abs(vCMO) * src) + (1 - valpha * math.abs(vCMO)) * nz(VAR[1]) VAR // === compute VAR-based MAs (top & low) MAvg = Var_Func(src, length) MAvgl = Var_Func(srcl, length) // === HOTT (top) logic fark = MAvg * percent * 0.01 longStop = MAvg - fark longStopPrev = nz(longStop[1], longStop) longStop := MAvg > longStopPrev ? math.max(longStop, longStopPrev) : longStop shortStop = MAvg + fark shortStopPrev = nz(shortStop[1], shortStop) shortStop := MAvg < shortStopPrev ? math.min(shortStop, shortStopPrev) : shortStop dir = 1 dir := nz(dir[1], dir) dir := dir == -1 and MAvg > shortStopPrev ? 1 : dir == 1 and MAvg < longStopPrev ? -1 : dir MT = dir == 1 ? longStop : shortStop HOTT = MAvg > MT ? MT * (200 + percent) / 200 : MT * (200 - percent) / 200 // === LOTT (low) logic (mirror) farkl = MAvgl * percent * 0.01 longStopl = MAvgl - farkl longStopPrevl = nz(longStopl[1], longStopl) longStopl := MAvgl > longStopPrevl ? math.max(longStopl, longStopPrevl) : longStopl shortStopl = MAvgl + farkl shortStopPrevl = nz(shortStopl[1], shortStopl) shortStopl := MAvgl < shortStopPrevl ? math.min(shortStopl, shortStopPrevl) : shortStopl dirl = 1 dirl := nz(dirl[1], dirl) dirl := dirl == -1 and MAvgl > shortStopPrevl ? 1 : dirl == 1 and MAvgl < longStopPrevl ? -1 : dirl MTl = dirl == 1 ? longStopl : shortStopl LOTT = MAvgl > MTl ? MTl * (200 + percent) / 200 : MTl * (200 - percent) / 200 // === Plot only HOTT & LOTT plot(nz(HOTT[2]), title="HOTT", color=color.blue, linewidth=2) plot(nz(LOTT[2]), title="LOTT", color=color.red, linewidth=2)