MFMASTER FURRYMARKET INTELLIGENCE
OFFICIAL DEVELOPER DOCUMENTATION

Learn FurryScript. Build for MF Fusion.

The complete practical guide to the native MF Fusion scripting language — from your first indicator to multi-pane studies, strategies, alerts, market-structure engines and publishing.

Start here

FurryScript is the native scripting language of MF Fusion. It is designed for market indicators, strategies, chart visuals, alerts and MF intelligence engines. The compiler in MF Quant Core is the authority: if syntax is not documented here, do not assume it exists.

Version rule

Every script starts with furryscript 1.0 or furryscript 1.1. Use 1.1 when a generic dashboard is present.

Your first indicator

furryscript 1.0
indicator "EMA Trend" { overlay: true }

input fastLen = 8
input slowLen = 21

series fast = EMA(close, fastLen)
series slow = EMA(close, slowLen)

condition bullish {
 fast > slow
}

plot fast { width: 2 style: line }
plot slow { width: 2 style: line }
label BUY { when: bullish position: below }

How to read it: declare the language version, choose an indicator/strategy/library shell, declare inputs and calculated series, create named conditions, then consume those declarations in visuals, signals, alerts or strategy orders.

Program shell

One top-level declaration follows the version line. Supported types are indicator, strategy and library. The shell block contains only overlay.

furryscript 1.0
indicator "My Indicator" { overlay: true }

// line comment
/* block comment */
ShellUse
indicatorAnalysis, visuals and signals.
strategyRules that can use entries/exits and trade evaluation.
libraryLibrary-style script package supported by the compiler.
overlay: trueMain price chart.
overlay: falseSeparate study pane for a whole-script oscillator. For mixed price + oscillator layouts, use the 1.1 multi-pane API instead.

Inputs

Inputs expose values a user can configure without editing the strategy logic.

input length = 20
input enabled = true
input mode = "Fast"

input fast = 21 {
 title: "Fast EMA"
 group: "TREND"
 tooltip: "Fast trend length"
 type: number
 min: 1
 max: 200
 step: 1
}

Metadata types: number, bool, text, select, timeframe, symbol. Select inputs may define options: "A", "B", "C".

Series & timeframes

Generic calculated series intentionally use a focused set of functions: EMA, SMA, WMA, RSI and ATR. Price sources are open, high, low and close, including historical references such as close[1].

series fast = EMA(close, 21)
series slow = SMA(close, 50)
series momentum = RSI(close, 14)
series atr = ATR(14)
series previousClose = close[1]

series h1Fast = EMA(close, 21, timeframe: "H1")
series h4Atr = ATR(14, timeframe: "H4")

Generic multi-timeframe series support M5, M15, H1, H4 and D1. There is no Pine-style request.security().

Conditions

Conditions are named boolean rules. Each line is a clause. Use and, or, and the not prefix; comparisons support > < >= <= == !=.

condition trendUp {
 fast > slow and close > fast
}
condition crossUp {
 crossover(fast, slow)
}
condition entryReady {
 trendUp and crossUp
}

Cross functions: crossover(a,b), crossunder(a,b), cross(a,b). Conditions may reference earlier named conditions.

Plots & drawings

plot fast { width: 2 style: line }
fill fast, slow { opacity: 15 }
label BUY { when: entryReady position: below }
line stopLine { price: low extend: right width: 1 when: entryReady }
box zone { top: high bottom: low bars: 20 extend: none opacity: 12 when: entryReady }

Plot styles are line and step; multi-pane plots also support histogram. Plot width is 1–8. Drawing values can use numeric literals, inputs, declared series, or OHLC/history sources.

Multi-pane API 1.0

FurryScript 1.1 can keep price visuals on the main chart while routing oscillator visuals to independent lower panes.

furryscript 1.1
indicator "Trend + Momentum" { overlay: true }

pane momentum {
 title: "Momentum"
 position: bottom
 height: 28
 scale: independent
 zero_line: true
}

series rsi = RSI(close, 14)
plot rsi {
 pane: momentum
 style: histogram
 width: 2
}

Pane height is a 12–60 percent hint. Add pane: momentum to plot, fill, label or signal blocks. Untagged visuals stay on the main price pane.

Signals & alerts

signal BUY {
 when: entryReady
 confirm: bar.closed
 mode: event
}

alertcondition LongAlert {
 when: entryReady
 title: "Long setup"
 message: "{{symbol}} long on {{timeframe}} @ {{price}}"
 frequency: once
 confirm: bar.closed
}

Signal confirmation: bar.closed or none. Signal modes: event, every, reversal. Alert frequency: once or every; alert confirmation: bar.closed or bar.live.

Strategies & risk

strategy.entry LONG {
 when: entryReady
 confirm: bar.closed
 stop: ATR(14) * 1.5
 target: 2R
}

strategy.exit LONG {
 when: exitLong
 confirm: bar.closed
}

The strategy. prefix is optional for entry/exit. Prefer closed-bar confirmation unless you deliberately need supported live behavior. Generic position sizing, commission, pyramiding, trailing-stop, break-even and partial-exit commands are not part of the current generic grammar.

Market structure engines

FurryScript provides high-level structure blocks so developers do not need to rebuild common market-context machinery from unsupported low-level syntax.

structure market { swing: 3 show_levels: true show_labels: true }
support resistance { source: market zones: true broken: true width_atr: 0.12 }
fvg gaps { min_atr: 0.15 show_bullish: true show_bearish: true show_zones: true show_labels: true mitigation: true max_zones: 6 }
liquidity liq { source: market equal_tolerance_atr: 0.15 show_buyside: true show_sellside: true show_levels: true show_sweeps: true show_labels: true max_levels: 6 }
confluence conf { structure: market bullish_trend: bullTrend bearish_trend: bearTrend min_score: 3 show_labels: true max_signals: 6 proximity_atr: 0.18 sweep_memory: 4 }

Confluence can be consumed with confluence(conf, bullish) >= 3 or component checks such as confluence_has(conf, bullish, fvg).

MF intelligence engines

MF engines are documented public runtime blocks. They expose specific predicates and presentation controls; their internal calculations are not generic language functions.

MF Context

Structure, FVG and active ribbon context. Configuration includes pivot/ATR/ribbon/regime controls.

mf context context { ... }

Dominant Turns

Primary reversal engine. Consume with turn_buy(major) and turn_sell(major).

MF Intelligence

Market regime / readiness. Consume with intelligence_ready(regime) and intelligence_forming(regime).

MF Continuation

Continuation engine linked to dominant turns. Consume with continuation_buy(cont) / continuation_sell(cont).

MF Trade

Maps named long/short conditions into ATR-based stop and TP1/TP2/TP3 geometry plus journal presentation.

Opportunity Radar

Scans exactly six symbols in this language version. It discovers opportunity state; it is not an order executor.

Protected product source

Documentation explains supported public blocks and predicates. It does not expose the proprietary source implementation of Master Furry Algo Pro or the Momentum Engine.

Generic dashboards — FurryScript 1.1

furryscript 1.1
indicator "Trend Dashboard" { overlay: true }

dashboard status {
 title: "TREND STATUS"
 position: top_right
 width: 260
 row "Fast EMA" value: fast decimals: 2
 row "Bullish" condition: bullish true: "YES" false: "NO"
 row "State" text: "ACTIVE"
}

Positions: top_left, top_right, bottom_left, bottom_right. Built-ins include position, entry, sl, tp, tp1, tp2, tp3, trades, wins, losses, win_rate, net_r and avg_r.

Build, test & publish

  1. Define intent.Decide indicator vs strategy, overlay behavior, inputs, conditions and outputs.
  2. Create in Strategy Lab / FurryScript editor.Start with the version and shell, then declarations in dependency order.
  3. Compile and run.Fix compiler errors before treating a script as runnable.
  4. Verify on chart.Check plots, signals, panes and strategy behavior against the intended market logic.
  5. Save versions.Keep meaningful revisions before major changes.
  6. Publish.Publishing FurryScripts requires Fusion Pro or Elite. Invite-only publishing is an Elite capability.

Compiler & debugging

Debug from the first compiler error downward. Most follow-on errors disappear after the earliest invalid declaration is fixed.

ProblemCheck
Unknown function/propertyUse only functions and block properties in this reference.
Unknown identifierDeclare the input, series, condition or engine before consuming it.
Plot does not compileA plot must reference a declared series.
when reference failswhen must reference a declared condition.
Dashboard rejectedUse furryscript 1.1.
Lower pane emptyEnsure a finite series is actually plotted with pane: paneName.
Radar rejectedThe current Opportunity Radar grammar accepts exactly six symbols.

Quick reference

SeriesEMA SMA WMA RSI ATR
TimeframesM5 M15 H1 H4 D1
Crossescrossover crossunder cross
Visualsplot fill label line box pane
Executionsignal entry exit alertcondition
Contextstructure support resistance fvg liquidity confluence
MFcontext · dominant turns · intelligence · continuation · trade · algo pro · opportunity radar

What FurryScript is not

FurryScript is not Pine Script, JavaScript or Python. Current generic syntax does not expose arbitrary variables/assignment, loops, arrays, custom functions, ternaries, arbitrary arithmetic series expressions, a math namespace, volume as a generic series, generic ADX/DMI, MACD, Bollinger Bands, VWAP, stochastic, Supertrend, sessions/date filters, account balance, quantity sizing, commissions/slippage, pyramiding, generic trailing stops/break-even/partial exits, HTTP access or Pine APIs.

High-level engines are different

Some MF engines internally calculate values such as ADX/DMI or volume context. That does not make those internals callable as generic FurryScript syntax.

More examples

Closed-bar crossover signal

furryscript 1.0
indicator "EMA Cross Signals" { overlay: true }
series fast = EMA(close, 8)
series slow = EMA(close, 21)
condition longCross { crossover(fast, slow) }
condition shortCross { crossunder(fast, slow) }
plot fast { width: 2 style: line }
plot slow { width: 2 style: line }
signal BUY { when: longCross confirm: bar.closed mode: event }
signal SELL { when: shortCross confirm: bar.closed mode: event }
alertcondition BuyAlert { when: longCross title: "EMA Buy" message: "{{symbol}} BUY" frequency: once confirm: bar.closed }

Multi-timeframe filter

series h1Fast = EMA(close, 21, timeframe: "H1")
series h1Slow = EMA(close, 50, timeframe: "H1")
condition h1Bull { h1Fast > h1Slow }
condition localBull { close > fast }
condition qualifiedLong { h1Bull and localBull }
Scroll to Top