// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © yyy_trade
//@version=6
indicator("smc_yyy", overlay = true, max_lines_count = 500)
type kline
float high
float low
int time
type StructPt
string tp
chart.point pt
float price
show_inside = input.bool(defval = false)
inside_color = input.color(defval = color.orange)
show_fractal_line = input.bool(defval = false)
fractal_line_color = input.color(defval=color.black)
show_medium_line = input.bool(defval=false)
medium_line_color = input.color(defval=color.black)
var float ref_high = na
var float ref_low = na
var array<kline> non_inside_arr = array.new<kline>()
var StructPt lastfx = na
var array<StructPt> medium_pts = array.new<StructPt>()
var string trend = na
var StructPt mss_pt = na
var StructPt pending_pt = na
var bool is_inside = false
if na(ref_high)
ref_high := high
ref_low := low
is_inside := false
else
is_inside := high <= ref_high and low >= ref_low
if not is_inside
ref_high := high
ref_low := low
barcolor(is_inside and show_inside ? inside_color : na)
if not is_inside
non_inside_arr.push(kline.new(high, low, time))
non_inside_arr_len = array.size(non_inside_arr)
if non_inside_arr_len > 3