3D Isometric MFI (Christmas Edition) [Kodexius]3D Isometric MFI (Christmas Edition) is a visual-first interpretation of the classic Money Flow Index, rendered as a projected 3D-style ribbon using an isometric mapping. Instead of plotting a standard oscillator line, the script reconstructs recent MFI history as a depth-aware ribbon that moves from back to front, producing a layered perspective effect that helps you read momentum shifts, regime transitions, and relative strength changes as a continuous structure.
This Christmas Edition was also built for fun and as a creative seasonal experiment. The goal is to keep the underlying indicator logic familiar, while presenting it in a playful, “3D showroom” style that looks great in a separate oscillator panel.
The indicator is designed for presentation quality and chart readability. It uses controlled object management (lines, polylines, labels) and renders only the most recent portion of the MFI history (user-defined depth). A decorative snow background effect adds atmosphere.
🔹 Features 🎄
🔸 Isometric 3D Projection Engine
The ribbon is produced by projecting 3D points (time offset, MFI value, depth) into 2D chart coordinates.
- X represents bar offset into history
- Y represents the MFI value
- Z introduces depth and perspective
Angle controls the projection direction, and Vertical Zoom scales the perceived amplitude.
🔸 Depth-Limited Ribbon Rendering (Back to Front)
Only the most recent History Depth values are drawn to keep performance and readability stable.
- Each segment connects two consecutive MFI values
- A top edge, bottom edge, and filled face are drawn to simulate thickness
- Older segments fade into the background
🔸 Dynamic Gradient Coloring + Depth Fade
Ribbon color follows a value-based gradient:
- Lower values lean red (risk-off pressure)
- Higher values lean green (risk-on pressure)
- Mid values blend naturally
Transparency increases with depth so older history is less dominant but still readable.
🔸 Tip Label (Value + Candy Marker) 🍭🍬
The most recent ribbon tip displays current MFI value.
A candy symbol that switches based on the 50 midpoint
The label is offset so it does not cover the ribbon tip.
🔸 Projected Reference Grid (80, 50, 20)
A projected grid is drawn at classic MFI reference levels to improve orientation:
- 80 Overbought reference
- 50 Midpoint reference
- 20 Oversold reference
These grid lines use the same projection math, so they stay aligned at any angle or zoom.
🔸 Seasonal Snow Background Effect ❄️
Randomized snow is rendered behind the ribbon using lightweight labels. This is purely decorative and does not alter MFI values or logic.
🔸 Object Lifecycle Management
Because 3D-style drawing uses many objects, the script manages them explicitly by storing references in arrays, deleting old objects, and redrawing on the last bar. This helps prevent visual stacking artifacts and keeps the panel clean.
🔹 Calculations
1) Money Flow Index Computation
The script separates “positive” and “negative” money flow based on the direction of change in the selected source, then converts their ratio into the standard 0 to 100 oscillator. Classic MFI Calculations.
calc_mfi(int length, float source) =>
float upper = math.sum(volume * (ta.change(source) <= 0 ? 0 : source), length)
float lower = math.sum(volume * (ta.change(source) >= 0 ? 0 : source), length)
float mfi = 100.0
if lower != 0
float r = upper / lower
mfi := 100 - (100 / (1 + r))
mfi
Interpretation:
upper accumulates volume-weighted source values on up moves
lower accumulates volume-weighted source values on down moves
if lower is zero, MFI defaults to 100 to avoid division errors
otherwise, MFI is computed from the ratio transform
2) History Buffer Management
The current MFI value is pushed into the front of an array every bar. The array is trimmed to History Depth so rendering stays bounded.
array.unshift(ctx.history_val, mfi_curr)
if ctx.history_val.size() > depth
ctx.history_val.pop()
3) 3D Point Model and Ribbon Thickness
Each segment is built from four projected points to form a filled face (a simple quad). A small thickness is applied to create the “ribbon” look, and depth is used to simulate perspective.
4) Isometric Projection to Chart Coordinates
3D points are mapped into chart coordinates with an angle rotation and scaling for zoom and depth.
method project(Point3 p, int anchor_bar, float angle_rad, float zoom, float z_scale) =>
float x_world = -float(p.x) * 2.0
float z_val = p.z * z_scale
float screen_x_offset = (x_world * math.cos(angle_rad)) - (z_val * 1.0)
float screen_y_offset = (p.y * zoom) + (x_world * math.sin(angle_rad)) * 0.5
int final_x = anchor_bar + int(math.round(screen_x_offset))
float final_y = screen_y_offset
chart.point.from_index(final_x, final_y)
5) Gradient and Depth Transparency
Color is derived from MFI value via a gradient, and transparency increases with segment depth so recent data remains dominant while older context stays visible.
6) Projected Reference Grid Construction
The 80, 50, 20 levels are drawn as dotted segments across the same historical span, using the same projection and depth fade logic for consistent alignment.
🎆 Wishing you a great year ahead 🎄✨
May your charts be clear, your risk be controlled, and your next year be filled with health, peace, and good trades. Happy Holidays and Happy New Year.
Chỉ báo Pine Script®






















