커뮤니티

적용가능하도록 부탁드립니다.

프로필 이미지
다올
2024-06-26 21:51:59
647
글번호 181013
답변완료
트레이딩 뷰 지표입니다. 적용가능하도록 부탁드립니다. indicator('Optimized Trend Tracker Oscillator', 'OTTO', overlay=false) length = input.int(2, 'OTT Period', minval=1) percent = input.float(0.6, 'OTT Optimization Coeff', step=0.1, minval=0) flength = input.int(10, 'FAST VIDYA Length', minval=1) slength = input.int(25, 'SLOW VIDYA Length', minval=1) coco = input.int(100000, 'Correcting Constant', minval=1) src1 = input(close, title='Source') showsignalsc = input(title='OTTO Crossing Signals?', defval=true) highlighting = input(title='Highlighter On/Off ?', defval=true) mav = input.string(title='Moving Average Type', defval='VAR', options=['SMA', 'EMA', 'WMA', 'DEMA', 'TMA', 'VAR', 'WWMA', 'ZLEMA', 'TSF', 'HULL']) Var_Func1(src1, length) => valpha1 = 2 / (length + 1) vud11 = src1 > src1[1] ? src1 - src1[1] : 0 vdd11 = src1 < src1[1] ? src1[1] - src1 : 0 vUD1 = math.sum(vud11, 9) vDD1 = math.sum(vdd11, 9) vCMO1 = nz((vUD1 - vDD1) / (vUD1 + vDD1)) VAR1 = 0.0 VAR1 := nz(valpha1 * math.abs(vCMO1) * src1) + (1 - valpha1 * math.abs(vCMO1)) * nz(VAR1[1]) VAR1 VAR1 = Var_Func1(src1, length) mov1 = Var_Func1(src1, slength / 2) mov2 = Var_Func1(src1, slength) mov3 = Var_Func1(src1, slength * flength) src = mov1 / (mov2 - mov3 + coco) 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 VAR = Var_Func(src, length) DEMA = 2 * ta.ema(src, length) - ta.ema(ta.ema(src, length), length) Wwma_Func(src, length) => wwalpha = 1 / length WWMA = 0.0 WWMA := wwalpha * src + (1 - wwalpha) * nz(WWMA[1]) WWMA WWMA = Wwma_Func(src, length) Zlema_Func(src, length) => zxLag = length / 2 == math.round(length / 2) ? length / 2 : (length - 1) / 2 zxEMAData = src + src - src[zxLag] ZLEMA = ta.ema(zxEMAData, length) ZLEMA ZLEMA = Zlema_Func(src, length) Tsf_Func(src, length) => lrc = ta.linreg(src, length, 0) lrc1 = ta.linreg(src, length, 1) lrs = lrc - lrc1 TSF = ta.linreg(src, length, 0) + lrs TSF TSF = Tsf_Func(src, length) HMA = ta.wma(2 * ta.wma(src, length / 2) - ta.wma(src, length), math.round(math.sqrt(length))) Var_Funcl(srcl, length) => valphal = 2 / (length + 1) vud1l = srcl > srcl[1] ? srcl - srcl[1] : 0 vdd1l = srcl < srcl[1] ? srcl[1] - srcl : 0 vUDl = math.sum(vud1l, 9) vDDl = math.sum(vdd1l, 9) vCMOl = nz((vUDl - vDDl) / (vUDl + vDDl)) VARl = 0.0 VARl := nz(valphal * math.abs(vCMOl) * srcl) + (1 - valphal * math.abs(vCMOl)) * nz(VARl[1]) VARl getMA(src, length) => ma = 0.0 if mav == 'SMA' ma := ta.sma(src, length) ma if mav == 'EMA' ma := ta.ema(src, length) ma if mav == 'WMA' ma := ta.wma(src, length) ma if mav == 'DEMA' ma := DEMA ma if mav == 'TMA' ma := ta.sma(ta.sma(src, math.ceil(length / 2)), math.floor(length / 2) + 1) ma if mav == 'VAR' ma := VAR ma if mav == 'WWMA' ma := WWMA ma if mav == 'ZLEMA' ma := ZLEMA ma if mav == 'TSF' ma := TSF ma if mav == 'HULL' ma := HMA ma ma MAvg = getMA(src, length) 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 HOTTC = color.new(color.red, 0) LOTT = src LOTTC = color.new(color.blue, 0) HOTTLine = plot(nz(HOTT[2]), title='HOTT', color=HOTTC, linewidth=2, style=plot.style_line) LOTTLine = plot(nz(LOTT), title='LOTT', color=LOTTC, linewidth=2, style=plot.style_line) FillColor = highlighting and LOTT < HOTT[2] ? color.new(color.red, 20) : color.new(color.green, 20) fill(HOTTLine, LOTTLine, title='Highligter', color=FillColor) alertcondition(ta.crossunder(HOTT[2], LOTT), title='Crossover Alarm', message='OTTO - BUY SIGNAL!') alertcondition(ta.crossover(HOTT[2], LOTT), title='Crossunder Alarm', message='OTTO - SELL SIGNAL!') buySignalc = ta.crossunder(HOTT[2], LOTT) plotshape(buySignalc and showsignalsc ? HOTT[2] * 0.9995 : na, title='Buy', text='Buy', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.green, 0), textcolor=color.new(color.white, 0)) sellSignallc = ta.crossover(HOTT[2], LOTT) plotshape(sellSignallc and showsignalsc ? LOTT * 1.0005 : na, title='Sell', text='Sell', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0), textcolor=color.new(color.white, 0))
지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2024-06-27 11:42:23

안녕하세요 예스스탁입니다. 사용자함수 2개를 먼저 만드신 후에 지표식 만들어서 적용하시면 됩니다. 1 사용자함수명: var_func 반환값형 : 숫자형 input : src1(Numeric),length(Numeric); var : valpha1(0),vud11(0),vdd11(0),vUD1(0),vDD1(0),vCMO1(0); valpha1 = 2 / (length + 1); vud11 = iff(src1 > src1[1] , src1 - src1[1] , 0); vdd11 = iff(src1 < src1[1] , src1[1] - src1 , 0); vUD1 = AccumN(vud11, 9); vDD1 = AccumN(vdd11, 9); vCMO1 = iff(isnan((vUD1 - vDD1) / (vUD1 + vDD1))==true,0,(vUD1 - vDD1) / (vUD1 + vDD1)); var_func = iff(IsNan(valpha1 * abs(vCMO1) * src1) == true,0,valpha1 * abs(vCMO1) * src1) + (1 - valpha1 * abs(vCMO1)) * iff(IsNan(var_func[1]),0,var_func[1]); 2 사용자함수명: getMA 반환값형 : 숫자형 input : src(Numeric),length(Numeric),method(Numeric); var : DEMA(0),wwalpha(0),wwma(0),zxLag(0),zxEMAData(0),ZLEMA(0),HMA(0); if method == 1 then getMA = ma(src, length); if method == 2 then getMA = ema(src, length); if method == 3 then getMA = wma(src, length); if method == 4 then { DEMA = 2 * ema(src, length) - ema(ema(src, length), length); getMA = DEMA; } if method == 5 then getMA = ma(ma(src, Ceiling(length / 2)), floor(length / 2) + 1); if method == 6 then getMA = Var_func(src,length); if method == 7 then { wwalpha = 1 / length; WWMA = wwalpha * src + (1 - wwalpha) * iff(IsNan(WWMA[1]) == False,WWMA[1],0); getMA = WWMA; } if method == 8 then { zxLag = iff(length / 2 == round(length / 2,0) , length / 2 , (length - 1) / 2); zxEMAData = src + src - src[zxLag]; ZLEMA = ema(zxEMAData, length); getMA = ZLEMA; } if method == 9 then getMA = LRL(src,length)+LRS(src,length); if method == 10 then { HMA = wma(2 * wma(src, length / 2) - wma(src, length), round(sqrt(length),0)); getMA = HMA; } 3 input : length(2); input : percent(0.6); input : flength(10); input : slength(25); input : coco(100000); input : mav(1); # 1:SMA, 2:EMA, 3:WMA, 4:DEMA, 5:TMA, 6:VAR, 7:WWMA, 8:ZLEMA, 9:TSF, 10:HULL var : src1(0),mov1(0),mov2(0),mov3(0),src(0),MAvg(0),fark(0); var : longStop(0),longStopPrev(0),shortStop(0),shortStopPrev(0); var : dir(0),MT(0),HOTT(0),HOTTC(0),LOTT(0),LOTTC(0); src1 = close; mov1 = Var_Func1(src1, slength / 2); mov2 = Var_Func1(src1, slength); mov3 = Var_Func1(src1, slength * flength); src = mov1 / (mov2 - mov3 + coco); MAvg = getMA(src, length,mav); 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); HOTTC = red; LOTT = src; LOTTC = blue; plot1(HOTT[2], "HOTT",HOTTC); plot2(LOTT,"LOTT",LOTTC); var : tx(0); if CrossDown(HOTT[2],LOTT) Then { tx = Text_New_Self(sDate,sTime,HOTT[2],"Buy"); Text_SetStyle(tx,2,0); } if CrossUp(HOTT[2],LOTT) Then { tx = Text_New_Self(sDate,sTime,HOTT[2],"Sell"); Text_SetStyle(tx,2,1); } 즐거운 하루되세요 > 다올 님이 쓴 글입니다. > 제목 : 적용가능하도록 부탁드립니다. > 트레이딩 뷰 지표입니다. 적용가능하도록 부탁드립니다. indicator('Optimized Trend Tracker Oscillator', 'OTTO', overlay=false) length = input.int(2, 'OTT Period', minval=1) percent = input.float(0.6, 'OTT Optimization Coeff', step=0.1, minval=0) flength = input.int(10, 'FAST VIDYA Length', minval=1) slength = input.int(25, 'SLOW VIDYA Length', minval=1) coco = input.int(100000, 'Correcting Constant', minval=1) src1 = input(close, title='Source') showsignalsc = input(title='OTTO Crossing Signals?', defval=true) highlighting = input(title='Highlighter On/Off ?', defval=true) mav = input.string(title='Moving Average Type', defval='VAR', options=['SMA', 'EMA', 'WMA', 'DEMA', 'TMA', 'VAR', 'WWMA', 'ZLEMA', 'TSF', 'HULL']) Var_Func1(src1, length) => valpha1 = 2 / (length + 1) vud11 = src1 > src1[1] ? src1 - src1[1] : 0 vdd11 = src1 < src1[1] ? src1[1] - src1 : 0 vUD1 = math.sum(vud11, 9) vDD1 = math.sum(vdd11, 9) vCMO1 = nz((vUD1 - vDD1) / (vUD1 + vDD1)) VAR1 = 0.0 VAR1 := nz(valpha1 * math.abs(vCMO1) * src1) + (1 - valpha1 * math.abs(vCMO1)) * nz(VAR1[1]) VAR1 VAR1 = Var_Func1(src1, length) mov1 = Var_Func1(src1, slength / 2) mov2 = Var_Func1(src1, slength) mov3 = Var_Func1(src1, slength * flength) src = mov1 / (mov2 - mov3 + coco) 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 VAR = Var_Func(src, length) DEMA = 2 * ta.ema(src, length) - ta.ema(ta.ema(src, length), length) Wwma_Func(src, length) => wwalpha = 1 / length WWMA = 0.0 WWMA := wwalpha * src + (1 - wwalpha) * nz(WWMA[1]) WWMA WWMA = Wwma_Func(src, length) Zlema_Func(src, length) => zxLag = length / 2 == math.round(length / 2) ? length / 2 : (length - 1) / 2 zxEMAData = src + src - src[zxLag] ZLEMA = ta.ema(zxEMAData, length) ZLEMA ZLEMA = Zlema_Func(src, length) Tsf_Func(src, length) => lrc = ta.linreg(src, length, 0) lrc1 = ta.linreg(src, length, 1) lrs = lrc - lrc1 TSF = ta.linreg(src, length, 0) + lrs TSF TSF = Tsf_Func(src, length) HMA = ta.wma(2 * ta.wma(src, length / 2) - ta.wma(src, length), math.round(math.sqrt(length))) Var_Funcl(srcl, length) => valphal = 2 / (length + 1) vud1l = srcl > srcl[1] ? srcl - srcl[1] : 0 vdd1l = srcl < srcl[1] ? srcl[1] - srcl : 0 vUDl = math.sum(vud1l, 9) vDDl = math.sum(vdd1l, 9) vCMOl = nz((vUDl - vDDl) / (vUDl + vDDl)) VARl = 0.0 VARl := nz(valphal * math.abs(vCMOl) * srcl) + (1 - valphal * math.abs(vCMOl)) * nz(VARl[1]) VARl getMA(src, length) => ma = 0.0 if mav == 'SMA' ma := ta.sma(src, length) ma if mav == 'EMA' ma := ta.ema(src, length) ma if mav == 'WMA' ma := ta.wma(src, length) ma if mav == 'DEMA' ma := DEMA ma if mav == 'TMA' ma := ta.sma(ta.sma(src, math.ceil(length / 2)), math.floor(length / 2) + 1) ma if mav == 'VAR' ma := VAR ma if mav == 'WWMA' ma := WWMA ma if mav == 'ZLEMA' ma := ZLEMA ma if mav == 'TSF' ma := TSF ma if mav == 'HULL' ma := HMA ma ma MAvg = getMA(src, length) 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 HOTTC = color.new(color.red, 0) LOTT = src LOTTC = color.new(color.blue, 0) HOTTLine = plot(nz(HOTT[2]), title='HOTT', color=HOTTC, linewidth=2, style=plot.style_line) LOTTLine = plot(nz(LOTT), title='LOTT', color=LOTTC, linewidth=2, style=plot.style_line) FillColor = highlighting and LOTT < HOTT[2] ? color.new(color.red, 20) : color.new(color.green, 20) fill(HOTTLine, LOTTLine, title='Highligter', color=FillColor) alertcondition(ta.crossunder(HOTT[2], LOTT), title='Crossover Alarm', message='OTTO - BUY SIGNAL!') alertcondition(ta.crossover(HOTT[2], LOTT), title='Crossunder Alarm', message='OTTO - SELL SIGNAL!') buySignalc = ta.crossunder(HOTT[2], LOTT) plotshape(buySignalc and showsignalsc ? HOTT[2] * 0.9995 : na, title='Buy', text='Buy', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.green, 0), textcolor=color.new(color.white, 0)) sellSignallc = ta.crossover(HOTT[2], LOTT) plotshape(sellSignallc and showsignalsc ? LOTT * 1.0005 : na, title='Sell', text='Sell', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0), textcolor=color.new(color.white, 0))