Professional Documents
Culture Documents
// This source code is subject to the terms of the Mozilla Public License 2.0 at
https://mozilla.org/MPL/2.0/
// CREDITS - BEGIN
// Volume levels
// Name: Poor man's volume profile
// User: IldarAkhmetgaleev
//
// See also https://github.com/akhilman/vol-poorofile
// Timeframe to minutes
// Name: MTF Selection Framework - PineCoders FAQ
// User: PineCoders
// CREDITS - END
LAST_BLOCK_COLOR = color.gray
CURRENT_PRICE_LEVEL_COLOR = color.blue
SUPPORT_PRICE_LEVEL_COLOR = color.green
RESISTANCE_PRICE_LEVEL_COLOR = color.red
VPOC_PRICE_LEVEL_COLOR = color.yellow
int current_price_level_number = na
int support_price_level_number = na
int resistance_price_level_number = na
int vpoc_price_level_number = na
max_bars_back(volume, 500)
max_bars_back(high, 500)
max_bars_back(low, 500)
get_resolution_bar_minutes(resolution) =>
minutes = resolution == '1' ? (1 * 1) :
resolution == '3' ? (3 * 1) :
resolution == '5' ? (5 * 1) :
resolution == '15' ? (15 * 1) :
resolution == '30' ? (30 * 1) :
resolution == '45' ? (45 * 1) :
resolution == '60' ? (60 * 1) :
resolution == '120' ? (2 * 60) :
resolution == '180' ? (3 * 60) :
resolution == '240' ? (4 * 60) :
resolution == '1D' ? (24 * 60) :
resolution == '1W' ? (7 * 24 * 60) :
f_resInMinutes() // Equal to current symbol
minutes
recent_n_bars_based_on_resolution =
int(floor(get_resolution_bar_minutes(vp_timeframe) / f_resInMinutes()))
recent_n_bars = 0
if enable_custom_recent_n_bars
recent_n_bars := custom_recent_n_bars
else
recent_n_bars := recent_n_bars_based_on_resolution
row_width_multiplier = recent_n_bars
////
// Utils
///
get_resistances_price_decimal_digits_zero_string () =>
zero_string = ""
if not (resistances_price_decimal_digits == 0)
for digit = 1 to resistances_price_decimal_digits
zero_string := zero_string + "0"
zero_string
if (total_volume != 0)
return_price := price_ponderated_top_sum / total_volume
else
return_price := ((row_low + row_high ) / 2)
return_price
tick_based_lvl_price
recent_lvl_width
get_level_colour(level_number) =>
if (level_number == vpoc_price_level_number)
VPOC_PRICE_LEVEL_COLOR
else if (level_number == current_price_level_number)
CURRENT_PRICE_LEVEL_COLOR
else if (level_number == support_price_level_number)
SUPPORT_PRICE_LEVEL_COLOR
else if (level_number == resistance_price_level_number)
RESISTANCE_PRICE_LEVEL_COLOR
else
LAST_BLOCK_COLOR
get_level_tooltip(level_number) =>
if (level_number == vpoc_price_level_number)
"Volume Point Of Control (VPoc)"
else if (level_number == current_price_level_number)
"Current price"
else if (level_number == support_price_level_number)
"Support"
else if (level_number == resistance_price_level_number)
"Resistance"
else
""
get_level_label_offset(level_number) =>
if (enable_improve_horizontal_overlap_mode)
if (level_number == vpoc_price_level_number)
(3 * recent_label_offset)
else if (level_number == support_price_level_number)
(2 * recent_label_offset)
else if (level_number == current_price_level_number)
(1 * recent_label_offset)
else if (level_number == resistance_price_level_number)
(0 * recent_label_offset)
else
(0 * recent_label_offset)
else
0
float recent_high = na
float recent_low = na
float recent_highest_lvl_value = na
float highest_recent_lvl_width = na
float highest_recent_lvl_value = na
float recent_lvl_price_tmp = na
float previous_recent_lvl_value_tmp = na
float recent_lvl_width_tmp = na
float recent_lvl_value_tmp = na
if enable_recent_profile
recent_high := highest(high, recent_n_bars)
recent_low := lowest(low, recent_n_bars)
recent_lvl_height = (recent_high - recent_low) / PRICE_LEVELS
if (barstate.islast)
// Value
for level_number = 0 to (PRICE_LEVELS - 1)
recent_lvl_value_tmp := level_value_wrapper(recent_lvl_height,
recent_low, level_number, 0, recent_n_bars)
recent_highest_lvl_value := max(nz(recent_highest_lvl_value),
recent_lvl_value_tmp)
if nz(highest_recent_lvl_value) < recent_highest_lvl_value
highest_recent_lvl_value := recent_highest_lvl_value
vpoc_price_level_number := level_number
// Width
for level_number = 0 to (PRICE_LEVELS - 1)
recent_lvl_width_tmp := level_width(recent_highest_lvl_value,
recent_lvl_height, recent_low, level_number)
if nz(highest_recent_lvl_width) < recent_lvl_width_tmp
highest_recent_lvl_width := recent_lvl_width_tmp
////
// Draw recent block
///
if (barstate.islast)
line.delete(recent_lvl0_line)
line.delete(recent_lvl1_line)
line.delete(recent_lvl2_line)
line.delete(recent_lvl3_line)
line.delete(recent_lvl4_line)
line.delete(recent_lvl5_line)
line.delete(recent_lvl6_line)
line.delete(recent_lvl7_line)
line.delete(recent_lvl8_line)
line.delete(recent_lvl9_line)
line.delete(recent_lvl10_line)
line.delete(recent_lvl11_line)
line.delete(recent_lvl12_line)
line.delete(recent_lvl13_line)
line.delete(recent_lvl14_line)
line.delete(recent_lvl15_line)
line.delete(recent_lvl16_line)
line.delete(recent_lvl17_line)
line.delete(recent_lvl18_line)
line.delete(recent_lvl19_line)
label.delete(recent_current_price_label)
label.delete(recent_support_price_label)
label.delete(recent_resistance_price_label)
label.delete(recent_vpoc_price_label)
recent_lvl0_line := draw_recent_lvl_line(highest_recent_lvl_width,
(level_price_wrapper(recent_lvl_height, recent_low, 0)),
(level_width(recent_highest_lvl_value, recent_lvl_height, recent_low, 0)), 0)
recent_lvl1_line := draw_recent_lvl_line(highest_recent_lvl_width,
(level_price_wrapper(recent_lvl_height, recent_low, 1)),
(level_width(recent_highest_lvl_value, recent_lvl_height, recent_low, 1)), 1)
recent_lvl2_line := draw_recent_lvl_line(highest_recent_lvl_width,
(level_price_wrapper(recent_lvl_height, recent_low, 2)),
(level_width(recent_highest_lvl_value, recent_lvl_height, recent_low, 2)), 2)
recent_lvl3_line := draw_recent_lvl_line(highest_recent_lvl_width,
(level_price_wrapper(recent_lvl_height, recent_low, 3)),
(level_width(recent_highest_lvl_value, recent_lvl_height, recent_low, 3)), 3)
recent_lvl4_line := draw_recent_lvl_line(highest_recent_lvl_width,
(level_price_wrapper(recent_lvl_height, recent_low, 4)),
(level_width(recent_highest_lvl_value, recent_lvl_height, recent_low, 4)), 4)
recent_lvl5_line := draw_recent_lvl_line(highest_recent_lvl_width,
(level_price_wrapper(recent_lvl_height, recent_low, 5)),
(level_width(recent_highest_lvl_value, recent_lvl_height, recent_low, 5)), 5)
recent_lvl6_line := draw_recent_lvl_line(highest_recent_lvl_width,
(level_price_wrapper(recent_lvl_height, recent_low, 6)),
(level_width(recent_highest_lvl_value, recent_lvl_height, recent_low, 6)), 6)
recent_lvl7_line := draw_recent_lvl_line(highest_recent_lvl_width,
(level_price_wrapper(recent_lvl_height, recent_low, 7)),
(level_width(recent_highest_lvl_value, recent_lvl_height, recent_low, 7)), 7)
recent_lvl8_line := draw_recent_lvl_line(highest_recent_lvl_width,
(level_price_wrapper(recent_lvl_height, recent_low, 8)),
(level_width(recent_highest_lvl_value, recent_lvl_height, recent_low, 8)), 8)
recent_lvl9_line := draw_recent_lvl_line(highest_recent_lvl_width,
(level_price_wrapper(recent_lvl_height, recent_low, 9)),
(level_width(recent_highest_lvl_value, recent_lvl_height, recent_low, 9)), 9)
recent_lvl10_line := draw_recent_lvl_line(highest_recent_lvl_width,
(level_price_wrapper(recent_lvl_height, recent_low, 10)),
(level_width(recent_highest_lvl_value, recent_lvl_height, recent_low, 10)), 10)
recent_lvl11_line := draw_recent_lvl_line(highest_recent_lvl_width,
(level_price_wrapper(recent_lvl_height, recent_low, 11)),
(level_width(recent_highest_lvl_value, recent_lvl_height, recent_low, 11)), 11)
recent_lvl12_line := draw_recent_lvl_line(highest_recent_lvl_width,
(level_price_wrapper(recent_lvl_height, recent_low, 12)),
(level_width(recent_highest_lvl_value, recent_lvl_height, recent_low, 12)), 12)
recent_lvl13_line := draw_recent_lvl_line(highest_recent_lvl_width,
(level_price_wrapper(recent_lvl_height, recent_low, 13)),
(level_width(recent_highest_lvl_value, recent_lvl_height, recent_low, 13)), 13)
recent_lvl14_line := draw_recent_lvl_line(highest_recent_lvl_width,
(level_price_wrapper(recent_lvl_height, recent_low, 14)),
(level_width(recent_highest_lvl_value, recent_lvl_height, recent_low, 14)), 14)
recent_lvl15_line := draw_recent_lvl_line(highest_recent_lvl_width,
(level_price_wrapper(recent_lvl_height, recent_low, 15)),
(level_width(recent_highest_lvl_value, recent_lvl_height, recent_low, 15)), 15)
recent_lvl16_line := draw_recent_lvl_line(highest_recent_lvl_width,
(level_price_wrapper(recent_lvl_height, recent_low, 16)),
(level_width(recent_highest_lvl_value, recent_lvl_height, recent_low, 16)), 16)
recent_lvl17_line := draw_recent_lvl_line(highest_recent_lvl_width,
(level_price_wrapper(recent_lvl_height, recent_low, 17)),
(level_width(recent_highest_lvl_value, recent_lvl_height, recent_low, 17)), 17)
recent_lvl18_line := draw_recent_lvl_line(highest_recent_lvl_width,
(level_price_wrapper(recent_lvl_height, recent_low, 18)),
(level_width(recent_highest_lvl_value, recent_lvl_height, recent_low, 18)), 18)
recent_lvl19_line := draw_recent_lvl_line(highest_recent_lvl_width,
(level_price_wrapper(recent_lvl_height, recent_low, 19)),
(level_width(recent_highest_lvl_value, recent_lvl_height, recent_low, 19)), 19)
recent_current_price_tick_difference = 0.0
recent_support_price_tick_difference = get_tick_difference
(recent_support_price, recent_current_price)
recent_resistance_price_tick_difference = get_tick_difference
(recent_resistance_price, recent_current_price)
recent_vpoc_price_tick_difference = get_tick_difference (recent_vpoc_price,
recent_current_price)
recent_current_price_label := draw_label(highest_recent_lvl_width,
recent_current_price, current_price_level_number, recent_lvl_height, recent_low,
recent_current_price_tick_difference, recent_current_price)
recent_support_price_label := draw_label(highest_recent_lvl_width,
recent_support_price, support_price_level_number, recent_lvl_height, recent_low,
recent_support_price_tick_difference, recent_current_price)
recent_resistance_price_label := draw_label(highest_recent_lvl_width,
recent_resistance_price, resistance_price_level_number, recent_lvl_height,
recent_low, recent_resistance_price_tick_difference, recent_current_price)
recent_vpoc_price_label := draw_label(highest_recent_lvl_width,
recent_vpoc_price, vpoc_price_level_number, recent_lvl_height, recent_low,
recent_vpoc_price_tick_difference, recent_current_price)