커뮤니티

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

프로필 이미지
다올
2025-07-02 17:42:12
285
글번호 192241
답변완료
import HeWhoMustNotBeNamed/ta/1 indicator("포인트 CCI", format=format.price, precision=2, explicit_plot_zorder=true) const string version = "v2.2" const string groupSettings = "Settings "+ version var bullcol = input.color(#E91E63, 'Cold Color', group=groupSettings, inline="col") var bearcol = input.color(#00BCD4, 'Hot Color', group=groupSettings, inline="col") var invisible = color.rgb(0, 0, 0, 100) var bullcol_xlight = color.new(bullcol, 80) var bearcol_xlight = color.new(bearcol, 80) var bullcol_light = color.new(bullcol, 70) var bearcol_light = color.new(bearcol, 70) var bullcol_medium = color.new(bullcol, 60) var bearcol_medium = color.new(bearcol, 60) var shortcol = chart.fg_color var longcol = color.rgb(255,220,100) var pivotcol = color.white const int bull_signal_loc = -107 const int bear_signal_loc = 5 const string mode1 = "1 Oscillator Mode" const string mode2 = "2 Overlay Mode (top and bottom no oscillator)" const string mode3 = "3 Candle Mode" mode = input.string(mode1, "Display Mode", options=[mode1, mode2, mode3], tooltip="Modes 2 & 3 are more advanced and expect that you most likely overlay the indicator on top of price action itself or another indiciator using TradingView's object tree panel.", group=groupSettings) compact = mode == mode2 formula1 = "Standard (2 Period)" formula2 = "Average" formula = input.string(formula1, "Formula", options=[formula1, formula2], group=groupSettings) use_average = formula == formula2 src = input.source(close, "Source", group=groupSettings) threshold = input.int(20, title="Exhaustion Threshold", minval=1, maxval=50, group=groupSettings, tooltip="Sets the overbought/oversold zone size and offset. Lower values will produce less results, higher values towards 50 will produce many results.") smoothType = input.string('ema', title="Smoothing Type", options=['sma', 'ema', 'hma', 'rma', 'wma', 'vwma', 'swma', 'highlow', 'linreg', 'median', 'mom', 'percentrank'], group=groupSettings) average_ma = input.int(3, "Average Formula MA", group=groupSettings) plot_shading = input.bool(true, title="Fill Gradients in OB/OS Zone", group=groupSettings) plot_crosses = input.bool(false, title="Highlight Crossovers", group=groupSettings, tooltip="Experimental idea for plotting crossovers with attempted bull/bear coloring. This needs to be combined with other TA but typically crossover condition results in interesting price action during or after.") plot_zero_crosses = input.bool(false, title="Plot Zero Line Crosses", group=groupSettings, tooltip="Experimental idea for plotting crosses") const string lookbackGroupName = "Dual Signal Setup (Fast/Slow Lookback)" shortLength = input.int(title="Fast Length", defval=30, group=lookbackGroupName) shortSmoothingLength = input.int(7, title="Fast Smoothing Length", group=lookbackGroupName) longLength = input.int(112, title="Slow Length", minval=1, group=lookbackGroupName) longSmoothingLength = input.int(3, title="Slow Smoothing Length", group=lookbackGroupName) _pr(length) => float max = ta.highest(length) float min = ta.lowest(length) 100 * (src - max) / (max - min) float s_percentR = _pr(shortLength) float l_percentR = _pr(longLength) float avg_percentR = math.avg(s_percentR, l_percentR) if shortSmoothingLength > 1 s_percentR := ta.ma(s_percentR, smoothType, shortSmoothingLength) if longSmoothingLength > 1 l_percentR := ta.ma(l_percentR, smoothType, longSmoothingLength) if average_ma > 1 avg_percentR := ta.ma(avg_percentR, smoothType, average_ma) var was_ob = false var was_os = false bool overbought = s_percentR >= -threshold and l_percentR >= -threshold bool oversold = s_percentR <= -100+threshold and l_percentR <= -100+threshold bool ob_reversal = not overbought and overbought[1] bool os_reversal = not oversold and oversold[1] bool ob_trend_start = overbought and not overbought[1] bool os_trend_start = oversold and not oversold[1] bool bool_cross_long1 = ta.crossover(s_percentR, -50) bool bool_cross_long2 = ta.crossover(l_percentR, -50) bool cross_zero_long = bool_cross_long1 or bool_cross_long2 bool bool_cross_short1 = ta.crossunder(s_percentR, -50) bool bool_cross_short2 = ta.crossunder(l_percentR, -50) bool cross_zero_short = bool_cross_short1 or bool_cross_short2 bool zero_long = (s_percentR > -50 and l_percentR > -50) and cross_zero_long bool zero_short = (s_percentR < -50 and l_percentR < -50) and cross_zero_short if use_average // use average overbought := avg_percentR >= -threshold oversold := avg_percentR <= -100+threshold ob_reversal := not overbought and overbought[1] os_reversal := not oversold and oversold[1] ob_trend_start := overbought and not overbought[1] os_trend_start := oversold and not oversold[1] bool cross_bear = ta.crossover(l_percentR, s_percentR) bool cross_bull = ta.crossunder(l_percentR, s_percentR) middle = hline(mode == mode1 ? -50 : na, 'Middle Line', color.orange, hline.style_solid) band1 = hline(mode == mode1 ? -20 : na, 'Overbought Line', color.white, hline.style_solid) band0 = hline(mode == mode1 ? -80 : na, 'Oversold Line', color.white, hline.style_solid) p_fastr = plot(mode == mode1 and not use_average ? s_percentR : na, "Fast Period %R", color=shortcol, linewidth=1) p_slowr = plot(mode == mode1 and not use_average ? l_percentR : na, "Slow Period %R", color=longcol, linewidth=1) p_avgr = plot(mode == mode1 and use_average ? avg_percentR : na, "Average Formula %R", color=shortcol, linewidth=1) gradientBullColor = plot_shading ? color.new(bullcol, 100) : invisible gradientBearColor = plot_shading ? color.new(bearcol, 100) : invisible fill(p_fastr, p_slowr, 0, -30, top_color = color.new(gradientBearColor, 0), bottom_color = gradientBearColor, title = "Overbought Gradient Fill") fill(p_fastr, p_slowr, -70, -100, top_color = gradientBullColor, bottom_color = color.new(gradientBullColor, 0), title = "Oversold Gradient Fill") plotshape(ob_reversal ? bear_signal_loc : na, title="Overbought Trend Reversal ▼", style=shape.triangledown, location=mode == mode1 ? location.absolute : mode == mode3 ? location.abovebar : location.top, color=bullcol, text='', textcolor=invisible, size=size.tiny) plotshape(os_reversal ? bull_signal_loc : na, title="Oversold Trend Reversal ▲", style=shape.triangleup, location=mode == mode1 ? location.absolute : mode == mode3 ? location.belowbar : location.bottom, color=bearcol, text='', textcolor=invisible, size=size.tiny) plotshape(overbought ? bear_signal_loc : na, title="Overbought Trend Warning ■", style=shape.square, location=mode == mode1 ? location.absolute : mode == mode3 ? location.abovebar : location.top, color=bearcol_medium, text='', textcolor=invisible, size=size.tiny) plotshape(oversold ? bull_signal_loc : na, title="Oversold Trend Warning ■", style=shape.square, location=mode == mode1 ? location.absolute : mode == mode3 ? location.belowbar : location.bottom, color=bullcol_medium, text='', textcolor=invisible, size=size.tiny) plotshape(zero_long and plot_zero_crosses ? bear_signal_loc : na, title="Zero Cross Long", style=shape.triangleup, location=mode == mode1 ? location.absolute : mode == mode3 ? location.abovebar : location.top, color=color.yellow, text='', textcolor=invisible, size=size.tiny) plotshape(zero_short and plot_zero_crosses ? bull_signal_loc : na, title="Zero Cross Short", style=shape.triangledown, location=mode == mode1 ? location.absolute : mode == mode3 ? location.belowbar : location.bottom, color=color.yellow, text='', textcolor=invisible, size=size.tiny) plot(not compact and plot_crosses and (cross_bull or cross_bear) ? l_percentR : na, "Crossover Dot (small)", style=plot.style_circles, color=pivotcol, linewidth=4) plot(not compact and plot_crosses and (cross_bull or cross_bear) ? l_percentR : na, "Crossover Dot (big)", style=plot.style_circles, color=cross_bull ? bullcol_light : bearcol_light, linewidth=12) plotchar(ob_trend_start ? bear_signal_loc : na, char="&#9697;", color=bearcol, location=mode == mode1 ? location.absolute : mode == mode3 ? location.abovebar : location.top) plotchar(os_trend_start ? bull_signal_loc : na, char="&#9696;", color=bullcol, location=mode == mode1 ? location.absolute : mode == mode3 ? location.belowbar : location.bottom) varip groupAlerts = "Alerts" bullStartOn = input.bool(true, "Bull trend start &#9209;", group=groupAlerts, inline="bullStart") bullStartTxt = input.string("%RTE bull trend start &#9209;", "", group=groupAlerts, inline="bullStart") bearStartOn = input.bool(true, "Bear trend start &#9209;", group=groupAlerts, inline="bearStart") bearStartTxt = input.string("%RTE bear trend start &#9209;", "", group=groupAlerts, inline="bearStart") bullReversalOn = input.bool(true, "Bull trend break ▼", group=groupAlerts, inline="bullReversal") bullReversalTxt = input.string("%RTE bull trend break ▼", "", group=groupAlerts, inline="bullReversal") bearReversalOn = input.bool(true, "Bear trend break ▲", group=groupAlerts, inline="bearReversal") bearReversalTxt = input.string("%RTE bear trend break ▲", "", group=groupAlerts, inline="bearReversal") bullCrossOn = input.bool(false, "Bull cross &#9210;", group=groupAlerts, inline="bullCross") bullCrossTxt = input.string("Bullish crossover", "", group=groupAlerts, inline="bullCross") bearCrossOn = input.bool(false, "Bear cross &#9210;", group=groupAlerts, inline="bearCross") bearCrossTxt = input.string("Bearish crossover", "", group=groupAlerts, inline="bearCross") if (bullReversalOn and ob_reversal) alert(message="하락전환", freq=alert.freq_once_per_bar_close) else if (bearReversalOn and os_reversal) alert(message="상승전환", freq=alert.freq_once_per_bar_close) const string group_strategy = "Strategy (send external signal to TTS backtester)" bool longDealsEnabled = input.bool(true, "Enable Long Deals", group=group_strategy) bool shortDealsEnabled = input.bool(true, "Enable Short Deals", group=group_strategy) strategy1 = "1 Trend Following @ Square" strategy2 = "2 Reversal @ Square" strategy3 = "3 Reversal Trade @ Triangle" strategy4 = "4 Re-enter Trend Trade @ Triangle" strategy5 = "5 Pings" strategy6 = "6 Zero Line Cross" strategyEntry = input.string(strategy1, "Strategy Entry", options=[strategy1, strategy2, strategy3, strategy4, strategy5, strategy6], group=group_strategy) bool startLongDeal = false bool startShortDeal = false bool endLongDeal = false bool endShortDeal = false switch strategyEntry strategy1 => if ob_trend_start and longDealsEnabled startLongDeal := true else if os_trend_start and shortDealsEnabled startShortDeal := true strategy2 => if os_trend_start and longDealsEnabled startLongDeal := true else if ob_trend_start and shortDealsEnabled startShortDeal := true strategy3 => if ob_reversal and shortDealsEnabled startShortDeal := true else if os_reversal and longDealsEnabled startLongDeal := true strategy4 => if os_reversal and shortDealsEnabled startShortDeal := true else if ob_reversal and longDealsEnabled startLongDeal := true strategy5 => if cross_bull and longDealsEnabled startLongDeal := true else if cross_bear and shortDealsEnabled startShortDeal := true strategy6 => if zero_long and longDealsEnabled startLongDeal := true else if zero_short and shortDealsEnabled startShortDeal := true import jason5480/external_input_utils/6 as exiu float longChannelComp = 10.0 * (startLongDeal ? 2.0 : 0.0) float shortChannelComp = startShortDeal ? 2.0 : 0.0 float signal = longChannelComp + shortChannelComp bool startLongDealDec = exiu.eval_cond(signal, '/10==', 2.0) bool startShortDealDec = exiu.eval_cond(signal, 'mod10==', 2.0) plot(series = signal, title = '&#128268;Signal', color = color.olive, display = display.data_window + display.status_line) showTF = input.bool(true, 'show time frame', inline = '24') showpf = input.bool(true, 'show prefix', inline = '24') showchange = input.bool(false, 'show change %', inline = '24') string i_tableYpos = input.string('top', 'Position', inline = '12', options = ['top', 'middle', 'bottom']) string i_tableXpos = input.string('right', '', inline = '12', options = ['left', 'center', 'right']) size1 = input.string('normal', 'title', inline = '14', options = ['tiny', 'small', 'normal', 'large', 'huge', 'auto']) size3 = input.string('normal', 'change', inline = '14', options = ['tiny', 'small', 'normal', 'large', 'huge', 'auto']) size2 = input.string('normal', 'signature', inline = '14', options = ['tiny', 'small', 'normal', 'large', 'huge', 'auto']) color = input.color(color.rgb(255, 255, 255, 12), 'color') string = input.string('&#129421;차트고릴라', 'your signature') seperator = input.string('/', 'seperator') cahngeClose = request.security(syminfo.tickerid, timeframe.period, close) cur = syminfo.currency base = syminfo.basecurrency exchange = syminfo.prefix getTimeFrame() => tf = timeframe.multiplier tfstr = '' if timeframe.isseconds tfstr := 's' tfstr if timeframe.isminutes if tf >= 60 tf := tf / 60 tfstr := 'h' tfstr else tfstr := 'm' tfstr if timeframe.isdaily tfstr := 'D' tfstr if timeframe.isweekly tfstr := 'W' tfstr if timeframe.ismonthly tfstr := 'M' tfstr [tfstr, str.tostring(tf)] var table table1 = table.new(i_tableYpos + '_' + i_tableXpos, 4, 1) if barstate.islast str1 = base != '' ? base + seperator + cur : syminfo.ticker [tf, period] = getTimeFrame() change = math.round((cahngeClose[0] / cahngeClose[1] - 1) * 100, 2) changeStr = '' if change > 0 changeStr := '▲' + str.tostring(math.abs(change)) + '%' changeStr else changeStr := '▼' + str.tostring(math.abs(change)) + '%' changeStr table.cell(table1, 0, 0, showpf ? exchange : '', text_color = color, width = 0, text_size = size2) table.cell(table1, 1, 0, str1 + (showTF ? ' ' + period + tf : ''), width = 0, text_color = color, text_size = size1) table.cell(table1, 3, 0, showchange ? changeStr : '', width = 0, text_color = change > 0 ? color.green : color.red, text_size = size3) table.cell(table1, 2, 0, string, text_color = color, width = 0, text_size = size3)
지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2025-07-03 10:36:35

안녕하세요 예스스탁입니다. 올려주신 수식은 내용상 별도의 사용자함수도 많고 주기별로 계산식을 넣어야 하는 내용도 있어 변환해 보는데 시간이 많이 소모됩니다. 업무상 일정이상 요구되는 내용은 답변이 어렵습니다. 도움을 드리지 못해 죄송합니다. 즐거운 하루되세요 > 다올 님이 쓴 글입니다. > 제목 : 적용가능하도록 부탁드립니다. > import HeWhoMustNotBeNamed/ta/1 indicator("포인트 CCI", format=format.price, precision=2, explicit_plot_zorder=true) const string version = "v2.2" const string groupSettings = "Settings "+ version var bullcol = input.color(#E91E63, 'Cold Color', group=groupSettings, inline="col") var bearcol = input.color(#00BCD4, 'Hot Color', group=groupSettings, inline="col") var invisible = color.rgb(0, 0, 0, 100) var bullcol_xlight = color.new(bullcol, 80) var bearcol_xlight = color.new(bearcol, 80) var bullcol_light = color.new(bullcol, 70) var bearcol_light = color.new(bearcol, 70) var bullcol_medium = color.new(bullcol, 60) var bearcol_medium = color.new(bearcol, 60) var shortcol = chart.fg_color var longcol = color.rgb(255,220,100) var pivotcol = color.white const int bull_signal_loc = -107 const int bear_signal_loc = 5 const string mode1 = "1 Oscillator Mode" const string mode2 = "2 Overlay Mode (top and bottom no oscillator)" const string mode3 = "3 Candle Mode" mode = input.string(mode1, "Display Mode", options=[mode1, mode2, mode3], tooltip="Modes 2 & 3 are more advanced and expect that you most likely overlay the indicator on top of price action itself or another indiciator using TradingView's object tree panel.", group=groupSettings) compact = mode == mode2 formula1 = "Standard (2 Period)" formula2 = "Average" formula = input.string(formula1, "Formula", options=[formula1, formula2], group=groupSettings) use_average = formula == formula2 src = input.source(close, "Source", group=groupSettings) threshold = input.int(20, title="Exhaustion Threshold", minval=1, maxval=50, group=groupSettings, tooltip="Sets the overbought/oversold zone size and offset. Lower values will produce less results, higher values towards 50 will produce many results.") smoothType = input.string('ema', title="Smoothing Type", options=['sma', 'ema', 'hma', 'rma', 'wma', 'vwma', 'swma', 'highlow', 'linreg', 'median', 'mom', 'percentrank'], group=groupSettings) average_ma = input.int(3, "Average Formula MA", group=groupSettings) plot_shading = input.bool(true, title="Fill Gradients in OB/OS Zone", group=groupSettings) plot_crosses = input.bool(false, title="Highlight Crossovers", group=groupSettings, tooltip="Experimental idea for plotting crossovers with attempted bull/bear coloring. This needs to be combined with other TA but typically crossover condition results in interesting price action during or after.") plot_zero_crosses = input.bool(false, title="Plot Zero Line Crosses", group=groupSettings, tooltip="Experimental idea for plotting crosses") const string lookbackGroupName = "Dual Signal Setup (Fast/Slow Lookback)" shortLength = input.int(title="Fast Length", defval=30, group=lookbackGroupName) shortSmoothingLength = input.int(7, title="Fast Smoothing Length", group=lookbackGroupName) longLength = input.int(112, title="Slow Length", minval=1, group=lookbackGroupName) longSmoothingLength = input.int(3, title="Slow Smoothing Length", group=lookbackGroupName) _pr(length) => float max = ta.highest(length) float min = ta.lowest(length) 100 * (src - max) / (max - min) float s_percentR = _pr(shortLength) float l_percentR = _pr(longLength) float avg_percentR = math.avg(s_percentR, l_percentR) if shortSmoothingLength > 1 s_percentR := ta.ma(s_percentR, smoothType, shortSmoothingLength) if longSmoothingLength > 1 l_percentR := ta.ma(l_percentR, smoothType, longSmoothingLength) if average_ma > 1 avg_percentR := ta.ma(avg_percentR, smoothType, average_ma) var was_ob = false var was_os = false bool overbought = s_percentR >= -threshold and l_percentR >= -threshold bool oversold = s_percentR <= -100+threshold and l_percentR <= -100+threshold bool ob_reversal = not overbought and overbought[1] bool os_reversal = not oversold and oversold[1] bool ob_trend_start = overbought and not overbought[1] bool os_trend_start = oversold and not oversold[1] bool bool_cross_long1 = ta.crossover(s_percentR, -50) bool bool_cross_long2 = ta.crossover(l_percentR, -50) bool cross_zero_long = bool_cross_long1 or bool_cross_long2 bool bool_cross_short1 = ta.crossunder(s_percentR, -50) bool bool_cross_short2 = ta.crossunder(l_percentR, -50) bool cross_zero_short = bool_cross_short1 or bool_cross_short2 bool zero_long = (s_percentR > -50 and l_percentR > -50) and cross_zero_long bool zero_short = (s_percentR < -50 and l_percentR < -50) and cross_zero_short if use_average // use average overbought := avg_percentR >= -threshold oversold := avg_percentR <= -100+threshold ob_reversal := not overbought and overbought[1] os_reversal := not oversold and oversold[1] ob_trend_start := overbought and not overbought[1] os_trend_start := oversold and not oversold[1] bool cross_bear = ta.crossover(l_percentR, s_percentR) bool cross_bull = ta.crossunder(l_percentR, s_percentR) middle = hline(mode == mode1 ? -50 : na, 'Middle Line', color.orange, hline.style_solid) band1 = hline(mode == mode1 ? -20 : na, 'Overbought Line', color.white, hline.style_solid) band0 = hline(mode == mode1 ? -80 : na, 'Oversold Line', color.white, hline.style_solid) p_fastr = plot(mode == mode1 and not use_average ? s_percentR : na, "Fast Period %R", color=shortcol, linewidth=1) p_slowr = plot(mode == mode1 and not use_average ? l_percentR : na, "Slow Period %R", color=longcol, linewidth=1) p_avgr = plot(mode == mode1 and use_average ? avg_percentR : na, "Average Formula %R", color=shortcol, linewidth=1) gradientBullColor = plot_shading ? color.new(bullcol, 100) : invisible gradientBearColor = plot_shading ? color.new(bearcol, 100) : invisible fill(p_fastr, p_slowr, 0, -30, top_color = color.new(gradientBearColor, 0), bottom_color = gradientBearColor, title = "Overbought Gradient Fill") fill(p_fastr, p_slowr, -70, -100, top_color = gradientBullColor, bottom_color = color.new(gradientBullColor, 0), title = "Oversold Gradient Fill") plotshape(ob_reversal ? bear_signal_loc : na, title="Overbought Trend Reversal ▼", style=shape.triangledown, location=mode == mode1 ? location.absolute : mode == mode3 ? location.abovebar : location.top, color=bullcol, text='', textcolor=invisible, size=size.tiny) plotshape(os_reversal ? bull_signal_loc : na, title="Oversold Trend Reversal ▲", style=shape.triangleup, location=mode == mode1 ? location.absolute : mode == mode3 ? location.belowbar : location.bottom, color=bearcol, text='', textcolor=invisible, size=size.tiny) plotshape(overbought ? bear_signal_loc : na, title="Overbought Trend Warning ■", style=shape.square, location=mode == mode1 ? location.absolute : mode == mode3 ? location.abovebar : location.top, color=bearcol_medium, text='', textcolor=invisible, size=size.tiny) plotshape(oversold ? bull_signal_loc : na, title="Oversold Trend Warning ■", style=shape.square, location=mode == mode1 ? location.absolute : mode == mode3 ? location.belowbar : location.bottom, color=bullcol_medium, text='', textcolor=invisible, size=size.tiny) plotshape(zero_long and plot_zero_crosses ? bear_signal_loc : na, title="Zero Cross Long", style=shape.triangleup, location=mode == mode1 ? location.absolute : mode == mode3 ? location.abovebar : location.top, color=color.yellow, text='', textcolor=invisible, size=size.tiny) plotshape(zero_short and plot_zero_crosses ? bull_signal_loc : na, title="Zero Cross Short", style=shape.triangledown, location=mode == mode1 ? location.absolute : mode == mode3 ? location.belowbar : location.bottom, color=color.yellow, text='', textcolor=invisible, size=size.tiny) plot(not compact and plot_crosses and (cross_bull or cross_bear) ? l_percentR : na, "Crossover Dot (small)", style=plot.style_circles, color=pivotcol, linewidth=4) plot(not compact and plot_crosses and (cross_bull or cross_bear) ? l_percentR : na, "Crossover Dot (big)", style=plot.style_circles, color=cross_bull ? bullcol_light : bearcol_light, linewidth=12) plotchar(ob_trend_start ? bear_signal_loc : na, char="&#9697;", color=bearcol, location=mode == mode1 ? location.absolute : mode == mode3 ? location.abovebar : location.top) plotchar(os_trend_start ? bull_signal_loc : na, char="&#9696;", color=bullcol, location=mode == mode1 ? location.absolute : mode == mode3 ? location.belowbar : location.bottom) varip groupAlerts = "Alerts" bullStartOn = input.bool(true, "Bull trend start &#9209;", group=groupAlerts, inline="bullStart") bullStartTxt = input.string("%RTE bull trend start &#9209;", "", group=groupAlerts, inline="bullStart") bearStartOn = input.bool(true, "Bear trend start &#9209;", group=groupAlerts, inline="bearStart") bearStartTxt = input.string("%RTE bear trend start &#9209;", "", group=groupAlerts, inline="bearStart") bullReversalOn = input.bool(true, "Bull trend break ▼", group=groupAlerts, inline="bullReversal") bullReversalTxt = input.string("%RTE bull trend break ▼", "", group=groupAlerts, inline="bullReversal") bearReversalOn = input.bool(true, "Bear trend break ▲", group=groupAlerts, inline="bearReversal") bearReversalTxt = input.string("%RTE bear trend break ▲", "", group=groupAlerts, inline="bearReversal") bullCrossOn = input.bool(false, "Bull cross &#9210;", group=groupAlerts, inline="bullCross") bullCrossTxt = input.string("Bullish crossover", "", group=groupAlerts, inline="bullCross") bearCrossOn = input.bool(false, "Bear cross &#9210;", group=groupAlerts, inline="bearCross") bearCrossTxt = input.string("Bearish crossover", "", group=groupAlerts, inline="bearCross") if (bullReversalOn and ob_reversal) alert(message="하락전환", freq=alert.freq_once_per_bar_close) else if (bearReversalOn and os_reversal) alert(message="상승전환", freq=alert.freq_once_per_bar_close) const string group_strategy = "Strategy (send external signal to TTS backtester)" bool longDealsEnabled = input.bool(true, "Enable Long Deals", group=group_strategy) bool shortDealsEnabled = input.bool(true, "Enable Short Deals", group=group_strategy) strategy1 = "1 Trend Following @ Square" strategy2 = "2 Reversal @ Square" strategy3 = "3 Reversal Trade @ Triangle" strategy4 = "4 Re-enter Trend Trade @ Triangle" strategy5 = "5 Pings" strategy6 = "6 Zero Line Cross" strategyEntry = input.string(strategy1, "Strategy Entry", options=[strategy1, strategy2, strategy3, strategy4, strategy5, strategy6], group=group_strategy) bool startLongDeal = false bool startShortDeal = false bool endLongDeal = false bool endShortDeal = false switch strategyEntry strategy1 => if ob_trend_start and longDealsEnabled startLongDeal := true else if os_trend_start and shortDealsEnabled startShortDeal := true strategy2 => if os_trend_start and longDealsEnabled startLongDeal := true else if ob_trend_start and shortDealsEnabled startShortDeal := true strategy3 => if ob_reversal and shortDealsEnabled startShortDeal := true else if os_reversal and longDealsEnabled startLongDeal := true strategy4 => if os_reversal and shortDealsEnabled startShortDeal := true else if ob_reversal and longDealsEnabled startLongDeal := true strategy5 => if cross_bull and longDealsEnabled startLongDeal := true else if cross_bear and shortDealsEnabled startShortDeal := true strategy6 => if zero_long and longDealsEnabled startLongDeal := true else if zero_short and shortDealsEnabled startShortDeal := true import jason5480/external_input_utils/6 as exiu float longChannelComp = 10.0 * (startLongDeal ? 2.0 : 0.0) float shortChannelComp = startShortDeal ? 2.0 : 0.0 float signal = longChannelComp + shortChannelComp bool startLongDealDec = exiu.eval_cond(signal, '/10==', 2.0) bool startShortDealDec = exiu.eval_cond(signal, 'mod10==', 2.0) plot(series = signal, title = '&#128268;Signal', color = color.olive, display = display.data_window + display.status_line) showTF = input.bool(true, 'show time frame', inline = '24') showpf = input.bool(true, 'show prefix', inline = '24') showchange = input.bool(false, 'show change %', inline = '24') string i_tableYpos = input.string('top', 'Position', inline = '12', options = ['top', 'middle', 'bottom']) string i_tableXpos = input.string('right', '', inline = '12', options = ['left', 'center', 'right']) size1 = input.string('normal', 'title', inline = '14', options = ['tiny', 'small', 'normal', 'large', 'huge', 'auto']) size3 = input.string('normal', 'change', inline = '14', options = ['tiny', 'small', 'normal', 'large', 'huge', 'auto']) size2 = input.string('normal', 'signature', inline = '14', options = ['tiny', 'small', 'normal', 'large', 'huge', 'auto']) color = input.color(color.rgb(255, 255, 255, 12), 'color') string = input.string('&#129421;차트고릴라', 'your signature') seperator = input.string('/', 'seperator') cahngeClose = request.security(syminfo.tickerid, timeframe.period, close) cur = syminfo.currency base = syminfo.basecurrency exchange = syminfo.prefix getTimeFrame() => tf = timeframe.multiplier tfstr = '' if timeframe.isseconds tfstr := 's' tfstr if timeframe.isminutes if tf >= 60 tf := tf / 60 tfstr := 'h' tfstr else tfstr := 'm' tfstr if timeframe.isdaily tfstr := 'D' tfstr if timeframe.isweekly tfstr := 'W' tfstr if timeframe.ismonthly tfstr := 'M' tfstr [tfstr, str.tostring(tf)] var table table1 = table.new(i_tableYpos + '_' + i_tableXpos, 4, 1) if barstate.islast str1 = base != '' ? base + seperator + cur : syminfo.ticker [tf, period] = getTimeFrame() change = math.round((cahngeClose[0] / cahngeClose[1] - 1) * 100, 2) changeStr = '' if change > 0 changeStr := '▲' + str.tostring(math.abs(change)) + '%' changeStr else changeStr := '▼' + str.tostring(math.abs(change)) + '%' changeStr table.cell(table1, 0, 0, showpf ? exchange : '', text_color = color, width = 0, text_size = size2) table.cell(table1, 1, 0, str1 + (showTF ? ' ' + period + tf : ''), width = 0, text_color = color, text_size = size1) table.cell(table1, 3, 0, showchange ? changeStr : '', width = 0, text_color = change > 0 ? color.green : color.red, text_size = size3) table.cell(table1, 2, 0, string, text_color = color, width = 0, text_size = size3)