Intraday Intensity Index [SyntaxGeek]
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © syntaxgeek

//           _____            _____                   _____            _____                   _____                                          _____                   _____                   _____                   _____          
//          /\    \          |\    \                 /\    \          /\    \                 /\    \                ______                  /\    \                 /\    \                 /\    \                 /\    \         
//         /::\    \         |:\____\               /::\____\        /::\    \               /::\    \              |::|   |                /::\    \               /::\    \               /::\    \               /::\____\        
//        /::::\    \        |::|   |              /::::|   |        \:::\    \             /::::\    \             |::|   |               /::::\    \             /::::\    \             /::::\    \             /:::/    /        
//       /::::::\    \       |::|   |             /:::::|   |         \:::\    \           /::::::\    \            |::|   |              /::::::\    \           /::::::\    \           /::::::\    \           /:::/    /         
//      /:::/\:::\    \      |::|   |            /::::::|   |          \:::\    \         /:::/\:::\    \           |::|   |             /:::/\:::\    \         /:::/\:::\    \         /:::/\:::\    \         /:::/    /          
//     /:::/__\:::\    \     |::|   |           /:::/|::|   |           \:::\    \       /:::/__\:::\    \          |::|   |            /:::/  \:::\    \       /:::/__\:::\    \       /:::/__\:::\    \       /:::/____/           
//     \:::\   \:::\    \    |::|   |          /:::/ |::|   |           /::::\    \     /::::\   \:::\    \         |::|   |           /:::/    \:::\    \     /::::\   \:::\    \     /::::\   \:::\    \     /::::\    \           
//   ___\:::\   \:::\    \   |::|___|______   /:::/  |::|   | _____    /::::::\    \   /::::::\   \:::\    \        |::|   |          /:::/    / \:::\    \   /::::::\   \:::\    \   /::::::\   \:::\    \   /::::::\____\________  
//  /\   \:::\   \:::\    \  /::::::::\    \ /:::/   |::|   |/\    \  /:::/\:::\    \ /:::/\:::\   \:::\    \ ______|::|___|___ ____ /:::/    /   \:::\ ___\ /:::/\:::\   \:::\    \ /:::/\:::\   \:::\    \ /:::/\:::::::::::\    \ 
// /::\   \:::\   \:::\____\/::::::::::\____/:: /    |::|   /::\____\/:::/  \:::\____/:::/  \:::\   \:::\____|:::::::::::::::::|    /:::/____/  ___\:::|    /:::/__\:::\   \:::\____/:::/__\:::\   \:::\____/:::/  |:::::::::::\____\
// \:::\   \:::\   \::/    /:::/~~~~/~~     \::/    /|::|  /:::/    /:::/    \::/    \::/    \:::\  /:::/    |:::::::::::::::::|____\:::\    \ /\  /:::|____\:::\   \:::\   \::/    \:::\   \:::\   \::/    \::/   |::|~~~|~~~~~     
//  \:::\   \:::\   \/____/:::/    /         \/____/ |::| /:::/    /:::/    / \/____/ \/____/ \:::\/:::/    / ~~~~~~|::|~~~|~~~      \:::\    /::\ \::/    / \:::\   \:::\   \/____/ \:::\   \:::\   \/____/ \/____|::|   |          
//   \:::\   \:::\    \  /:::/    /                  |::|/:::/    /:::/    /                   \::::::/    /        |::|   |          \:::\   \:::\ \/____/   \:::\   \:::\    \      \:::\   \:::\    \           |::|   |          
//    \:::\   \:::\____\/:::/    /                   |::::::/    /:::/    /                     \::::/    /         |::|   |           \:::\   \:::\____\      \:::\   \:::\____\      \:::\   \:::\____\          |::|   |          
//     \:::\  /:::/    /\::/    /                    |:::::/    /\::/    /                      /:::/    /          |::|   |            \:::\  /:::/    /       \:::\   \::/    /       \:::\   \::/    /          |::|   |          
//      \:::\/:::/    /  \/____/                     |::::/    /  \/____/                      /:::/    /           |::|   |             \:::\/:::/    /         \:::\   \/____/         \:::\   \/____/           |::|   |          
//       \::::::/    /                               /:::/    /                               /:::/    /            |::|   |              \::::::/    /           \:::\    \              \:::\    \               |::|   |          
//        \::::/    /                               /:::/    /                               /:::/    /             |::|   |               \::::/    /             \:::\____\              \:::\____\              \::|   |          
//         \::/    /                                \::/    /                                \::/    /              |::|___|                \::/____/               \::/    /               \::/    /               \:|   |          
//          \/____/                                  \/____/                                  \/____/                ~~                                              \/____/                 \/____/                 \|___|      

//@version=5
indicator("Intraday Intensity Index [SyntaxGeek]", "III")

// { consts
c_mode_histo = 'Histogram'
c_mode_hilo = 'High/Low'
// } consts

// { inputs
i_mode = input.string(c_mode_histo, '', options=[c_mode_histo, c_mode_hilo], group='Mode', inline='mode')
i_trendPeriod = input.int(20, '', group='Mode', tooltip=c_mode_hilo + ' Trend Period', inline='mode')
i_intradayMode = input.bool(true, 'Intraday mode clears after RTH session restarts')
i_colorUp = input.color(color.green, 'Up', group='Colors')
i_colorDown = input.color(color.red, 'Down', group='Colors')
// } inputs

// { vars
var v_finalVolumeIntensity = 0.0

if i_intradayMode and session.isfirstbar_regular
    v_finalVolumeIntensity := 0.0

v_finalVolumeIntensity += (ta.iii * 1000000) // sue me I like the numbers better this way :D
v_colorVolumeIntensity = v_finalVolumeIntensity > 0 ? v_finalVolumeIntensity < v_finalVolumeIntensity[1] ? color.new(i_colorUp, 50) : i_colorUp : v_finalVolumeIntensity > v_finalVolumeIntensity[1] ? color.new(i_colorDown, 50) : i_colorDown
// } vars

// { plots
plot(ta.sma(v_finalVolumeIntensity, i_trendPeriod), 'Trend', color=color.white, display=i_mode == c_mode_hilo ? display.all : display.none)
plot(v_finalVolumeIntensity, 'Intensity', color=v_colorVolumeIntensity, linewidth=3, style=i_mode == c_mode_histo ? plot.style_columns : plot.style_line)
plot(ta.highest(v_finalVolumeIntensity, i_trendPeriod), 'High', color=i_colorUp, display=i_mode == c_mode_hilo ? display.all : display.none)
plot(ta.lowest(v_finalVolumeIntensity, i_trendPeriod), 'Low', color=i_colorDown, display=i_mode == c_mode_hilo ? display.all : display.none)
hline(0, 'Neutral', color=color.white, linestyle=hline.style_dashed)
// } plots