커뮤니티

부틱드립니다

프로필 이미지
파생돌이
2025-07-12 11:35:54
231
글번호 192456
답변완료
수고하심니다 아래수식을 예스로 부탁드립니다 // This work is licensed under a Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) https://creativecommons.org/licenses/by-nc-sa/4.0/ // &#169;LuxAlgo //@version=5 indicator("Inversion Fair Value Gaps (IFVG) [LuxAlgo]", "LuxAlgo - Inversion Fair Value Gaps (IFVG)", overlay = true, max_boxes_count = 500, max_lines_count = 500, max_labels_count = 500) //---------------------------------------------------------------------------------------------------------------------} //Settings //---------------------------------------------------------------------------------------------------------------------{ disp_num = input.int(5, maxval = 100, minval = 1, title = "Show Last", tooltip = "Specifies the amount of most recent inversion FVG to display in Bullish/Bearish pairs, starting at the current and looking back.") signal_pref = input.string("Close", title = "Signal Preference", options = ["Close","Wick"], tooltip = "Choose to send signals based on Wicks or Close Price.") wt = signal_pref == "Wick" atr_multi = input.float(0.25, step = 0.25,minval = 0, title = "ATR Multiplier", tooltip = "Filters FVGs based on ATR Width, Only displays Inversions that are Greater-Than the ATR*Multiplier.") //Colors green = input.color(color.new(#089981, 80), title = "Bull Color", group = "Colors") red = input.color(color.new(#f23645, 80), title = "Bear Color", group = "Colors") gray = input.color(#787b86, title = "Midline Color", group = "Colors") invis = color.rgb(0,0,0,100) //---------------------------------------------------------------------------------------------------------------------} //UDT's //---------------------------------------------------------------------------------------------------------------------{ type lab //Contains Necessary Label Data to Send to Label Function int x float y int dir type fvg //Contains Necessary FVG Data to Send to Chart. int left = na float top = na int right = na float bot = na float mid = na int dir = na int state = na array<lab> labs = na int x_val = na //---------------------------------------------------------------------------------------------------------------------} //Functions //---------------------------------------------------------------------------------------------------------------------{ //Basic Calcs buffer = 100 //How many FVGs to keep in memory. c_top = math.max(open,close) c_bot = math.min(open,close) label_maker(_x,_y,_dir) => //Used for making Labels switch _dir == 1 => label.new(_x,_y,"₩n▲", style = label.style_text_outline, color = invis, textcolor = color.new(green,0), size = size.small, xloc = xloc.bar_time) _dir == -1 => label.new(_x,_y, "▼₩n", style = label.style_text_outline, color = invis, textcolor = color.new(red,0), size = size.small, xloc = xloc.bar_time) fvg_manage(_ary,_inv_ary) => //First step filtering of FVG data, Not all FVGs will be displayed, only inversions. if _ary.size() >= buffer _ary.shift() if _ary.size() > 0 for i = _ary.size()-1 to 0 value = _ary.get(i) _dir = value.dir if _dir == 1 and (c_bot < value.bot) value.x_val := time _inv_ary.push(_ary.remove(i)) if _dir == -1 and (c_top > value.top) value.x_val := time _inv_ary.push(_ary.remove(i)) inv_manage(_ary) => //All inversions will be displayed. fire = false if _ary.size() >= buffer _ary.shift() if _ary.size() > 0 for i = _ary.size()-1 to 0 value = _ary.get(i) bx_top = value.top bx_bot = value.bot _dir = value.dir st = value.state if (st == 0 and _dir == 1) value.state := 1 value.dir := -1 if (_dir == -1 and st == 0) value.state := 1 value.dir := 1 if st >= 1 value.right := time if (_dir == -1 and st == 1 and close < bx_bot and (wt?high:close[1]) >= bx_bot and (wt?high:close[1]) < bx_top) value.labs.push(lab.new(time,bx_top,-1)) fire := true if (_dir == 1 and st == 1 and close > bx_top and (wt?low:close[1]) <= bx_top and (wt?low:close[1]) > bx_bot) value.labs.push(lab.new(time,bx_bot,1)) fire := true if st >= 1 and ((_dir == -1 and c_top > bx_top) or (_dir == 1 and c_bot < bx_bot)) _ary.remove(i) fire send_it(_ary) => // Draws Everything on the Chart last_index = _ary.size()-1 for [index,value] in _ary bx_top = value.top bx_bot = value.bot bx_left = value.left xval = value.x_val mid = value.mid col = value.dir == -1 ? green : red o_col = value.dir == -1 ? red : green if index > last_index - disp_num box.new(bx_left,bx_top,xval,bx_bot,bgcolor = col, border_color = invis, xloc = xloc.bar_time) box.new(xval,bx_top,time,bx_bot, bgcolor = o_col, border_color = invis, xloc = xloc.bar_time) line.new(bx_left,mid,time,mid, color = gray, style = line.style_dashed, xloc = xloc.bar_time) box.new(bar_index,bx_top,bar_index+50,bx_bot, bgcolor = o_col, border_color = invis) line.new(bar_index,mid,bar_index+50,mid, color = gray, style = line.style_dashed) for stuff in value.labs label_maker(stuff.x,stuff.y,stuff.dir) //---------------------------------------------------------------------------------------------------------------------} //Delete drawings //---------------------------------------------------------------------------------------------------------------------{ for boxes in box.all box.delete(boxes) for lines in line.all line.delete(lines) for labels in label.all label.delete(labels) //---------------------------------------------------------------------------------------------------------------------} //Data Arrays //---------------------------------------------------------------------------------------------------------------------{ var bull_fvg_ary = array.new<fvg>(na) // FVG Data, Not all will be Drawn var bear_fvg_ary = array.new<fvg>(na) var bull_inv_ary = array.new<fvg>(na) // Inversion Data, All will be Drawn var bear_inv_ary = array.new<fvg>(na) //---------------------------------------------------------------------------------------------------------------------} //FVG Detection //---------------------------------------------------------------------------------------------------------------------{ atr = nz(ta.atr(200)*atr_multi, ta.cum(high - low) / (bar_index+1)) fvg_up = (low > high[2]) and (close[1] > high[2]) fvg_down = (high < low[2]) and (close[1] < low[2]) if fvg_up and math.abs(low-high[2]) > atr array.push(bull_fvg_ary,fvg.new(time[1], low, time, high[2], math.avg(low,high[2]), 1, 0,array.new<lab>(na),na)) if fvg_down and math.abs(low[2]-high) > atr array.push(bear_fvg_ary,fvg.new(time[1], low[2], time, high, math.avg(high,low[2]),-1 ,0,array.new<lab>(na),na)) //---------------------------------------------------------------------------------------------------------------------} //Running Functions //---------------------------------------------------------------------------------------------------------------------{ // FVG_Data -> Inversion_Data -> Chart fvg_manage(bull_fvg_ary,bull_inv_ary) fvg_manage(bear_fvg_ary,bear_inv_ary) bear_signal = inv_manage(bull_inv_ary) bull_signal = inv_manage(bear_inv_ary) if barstate.islast send_it(bull_inv_ary) send_it(bear_inv_ary) //Alert Options alertcondition(bull_signal, "Bullish Signal") alertcondition(bear_signal, "Bearish Signal") //---------------------------------------------------------------------------------------------------------------------}
지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2025-07-14 10:08:40

안녕하세요 예스스탁입니다. 올리신 내용은 변환하는데 시간이 많이 소모됩니다. 업무상 일정시간 이상 요구되는 내용인 작성해 드리기 어렵습니다. 도움을 드리지 못해 죄송합니다. 즐거운 하루되세요 > 파생돌이 님이 쓴 글입니다. > 제목 : 부틱드립니다 > 수고하심니다 아래수식을 예스로 부탁드립니다 // This work is licensed under a Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) https://creativecommons.org/licenses/by-nc-sa/4.0/ // &#169;LuxAlgo //@version=5 indicator("Inversion Fair Value Gaps (IFVG) [LuxAlgo]", "LuxAlgo - Inversion Fair Value Gaps (IFVG)", overlay = true, max_boxes_count = 500, max_lines_count = 500, max_labels_count = 500) //---------------------------------------------------------------------------------------------------------------------} //Settings //---------------------------------------------------------------------------------------------------------------------{ disp_num = input.int(5, maxval = 100, minval = 1, title = "Show Last", tooltip = "Specifies the amount of most recent inversion FVG to display in Bullish/Bearish pairs, starting at the current and looking back.") signal_pref = input.string("Close", title = "Signal Preference", options = ["Close","Wick"], tooltip = "Choose to send signals based on Wicks or Close Price.") wt = signal_pref == "Wick" atr_multi = input.float(0.25, step = 0.25,minval = 0, title = "ATR Multiplier", tooltip = "Filters FVGs based on ATR Width, Only displays Inversions that are Greater-Than the ATR*Multiplier.") //Colors green = input.color(color.new(#089981, 80), title = "Bull Color", group = "Colors") red = input.color(color.new(#f23645, 80), title = "Bear Color", group = "Colors") gray = input.color(#787b86, title = "Midline Color", group = "Colors") invis = color.rgb(0,0,0,100) //---------------------------------------------------------------------------------------------------------------------} //UDT's //---------------------------------------------------------------------------------------------------------------------{ type lab //Contains Necessary Label Data to Send to Label Function int x float y int dir type fvg //Contains Necessary FVG Data to Send to Chart. int left = na float top = na int right = na float bot = na float mid = na int dir = na int state = na array<lab> labs = na int x_val = na //---------------------------------------------------------------------------------------------------------------------} //Functions //---------------------------------------------------------------------------------------------------------------------{ //Basic Calcs buffer = 100 //How many FVGs to keep in memory. c_top = math.max(open,close) c_bot = math.min(open,close) label_maker(_x,_y,_dir) => //Used for making Labels switch _dir == 1 => label.new(_x,_y,"₩n▲", style = label.style_text_outline, color = invis, textcolor = color.new(green,0), size = size.small, xloc = xloc.bar_time) _dir == -1 => label.new(_x,_y, "▼₩n", style = label.style_text_outline, color = invis, textcolor = color.new(red,0), size = size.small, xloc = xloc.bar_time) fvg_manage(_ary,_inv_ary) => //First step filtering of FVG data, Not all FVGs will be displayed, only inversions. if _ary.size() >= buffer _ary.shift() if _ary.size() > 0 for i = _ary.size()-1 to 0 value = _ary.get(i) _dir = value.dir if _dir == 1 and (c_bot < value.bot) value.x_val := time _inv_ary.push(_ary.remove(i)) if _dir == -1 and (c_top > value.top) value.x_val := time _inv_ary.push(_ary.remove(i)) inv_manage(_ary) => //All inversions will be displayed. fire = false if _ary.size() >= buffer _ary.shift() if _ary.size() > 0 for i = _ary.size()-1 to 0 value = _ary.get(i) bx_top = value.top bx_bot = value.bot _dir = value.dir st = value.state if (st == 0 and _dir == 1) value.state := 1 value.dir := -1 if (_dir == -1 and st == 0) value.state := 1 value.dir := 1 if st >= 1 value.right := time if (_dir == -1 and st == 1 and close < bx_bot and (wt?high:close[1]) >= bx_bot and (wt?high:close[1]) < bx_top) value.labs.push(lab.new(time,bx_top,-1)) fire := true if (_dir == 1 and st == 1 and close > bx_top and (wt?low:close[1]) <= bx_top and (wt?low:close[1]) > bx_bot) value.labs.push(lab.new(time,bx_bot,1)) fire := true if st >= 1 and ((_dir == -1 and c_top > bx_top) or (_dir == 1 and c_bot < bx_bot)) _ary.remove(i) fire send_it(_ary) => // Draws Everything on the Chart last_index = _ary.size()-1 for [index,value] in _ary bx_top = value.top bx_bot = value.bot bx_left = value.left xval = value.x_val mid = value.mid col = value.dir == -1 ? green : red o_col = value.dir == -1 ? red : green if index > last_index - disp_num box.new(bx_left,bx_top,xval,bx_bot,bgcolor = col, border_color = invis, xloc = xloc.bar_time) box.new(xval,bx_top,time,bx_bot, bgcolor = o_col, border_color = invis, xloc = xloc.bar_time) line.new(bx_left,mid,time,mid, color = gray, style = line.style_dashed, xloc = xloc.bar_time) box.new(bar_index,bx_top,bar_index+50,bx_bot, bgcolor = o_col, border_color = invis) line.new(bar_index,mid,bar_index+50,mid, color = gray, style = line.style_dashed) for stuff in value.labs label_maker(stuff.x,stuff.y,stuff.dir) //---------------------------------------------------------------------------------------------------------------------} //Delete drawings //---------------------------------------------------------------------------------------------------------------------{ for boxes in box.all box.delete(boxes) for lines in line.all line.delete(lines) for labels in label.all label.delete(labels) //---------------------------------------------------------------------------------------------------------------------} //Data Arrays //---------------------------------------------------------------------------------------------------------------------{ var bull_fvg_ary = array.new<fvg>(na) // FVG Data, Not all will be Drawn var bear_fvg_ary = array.new<fvg>(na) var bull_inv_ary = array.new<fvg>(na) // Inversion Data, All will be Drawn var bear_inv_ary = array.new<fvg>(na) //---------------------------------------------------------------------------------------------------------------------} //FVG Detection //---------------------------------------------------------------------------------------------------------------------{ atr = nz(ta.atr(200)*atr_multi, ta.cum(high - low) / (bar_index+1)) fvg_up = (low > high[2]) and (close[1] > high[2]) fvg_down = (high < low[2]) and (close[1] < low[2]) if fvg_up and math.abs(low-high[2]) > atr array.push(bull_fvg_ary,fvg.new(time[1], low, time, high[2], math.avg(low,high[2]), 1, 0,array.new<lab>(na),na)) if fvg_down and math.abs(low[2]-high) > atr array.push(bear_fvg_ary,fvg.new(time[1], low[2], time, high, math.avg(high,low[2]),-1 ,0,array.new<lab>(na),na)) //---------------------------------------------------------------------------------------------------------------------} //Running Functions //---------------------------------------------------------------------------------------------------------------------{ // FVG_Data -> Inversion_Data -> Chart fvg_manage(bull_fvg_ary,bull_inv_ary) fvg_manage(bear_fvg_ary,bear_inv_ary) bear_signal = inv_manage(bull_inv_ary) bull_signal = inv_manage(bear_inv_ary) if barstate.islast send_it(bull_inv_ary) send_it(bear_inv_ary) //Alert Options alertcondition(bull_signal, "Bullish Signal") alertcondition(bear_signal, "Bearish Signal") //---------------------------------------------------------------------------------------------------------------------}