Files

44 lines
1.4 KiB
Plaintext
Raw Permalink Normal View History

// Licensed under the Apache License, Version 2.0
// © mihakralj
//@version=6
indicator("Bill Williams Market Facilitation Index (BW_MFI)", "BW_MFI", overlay=false)
//@function Bill Williams MFI with 4-zone classification
//@returns [mfi, zone] where zone: 1=Green, 2=Fade, 3=Fake, 4=Squat
//@optimized O(1) per bar — division + two comparisons
bw_mfi() =>
float mfi = volume != 0 ? (high - low) / volume : 0.0
float prev_mfi = nz(mfi[1])
float prev_vol = nz(volume[1])
int zone = na
if bar_index < 1
zone := 0
else
bool mfi_up = mfi > prev_mfi
bool vol_up = volume > prev_vol
if mfi_up and vol_up
zone := 1 // Green: trend continuation
else if not mfi_up and not vol_up
zone := 2 // Fade: fading momentum
else if mfi_up and not vol_up
zone := 3 // Fake: unsupported price move
else
zone := 4 // Squat: accumulation/distribution
[mfi, zone]
// ---------- Main loop ----------
[mfi_val, zone_val] = bw_mfi()
// Zone-based bar coloring
zone_color = switch zone_val
1 => color.green // Green zone
2 => color.new(#8B4513, 0) // Fade (brown)
3 => color.blue // Fake zone
4 => color.fuchsia // Squat zone
=> color.gray // First bar / unknown
plot(mfi_val, title="BW_MFI", color=zone_color, style=plot.style_columns, linewidth=3)
hline(0, "Zero", color=color.gray, linestyle=hline.style_dashed)