Farey Sequence Weighted Moving Average Pine Script — Complete TradingView Guide
The FSWMA is a trend-following indicator that uses Farey sequence fractions to assign weights to historical price data, giving a unique non-linear weighting that differs from SMA, EMA, and WMA. Developed from number theory first described by John Farey in 1816, the Farey sequence provides a set of reduced fractions between 0 and 1 that the FSWMA uses as its weighting scheme. The Order parameter (2-14) controls how many Farey fractions are included — higher orders incorporate more historical bars with increasingly complex weight distributions. Order=5, the default, uses weights from Farey sequence F5 across 10 bars. On a Daily chart with default settings, the FSWMA tracks price trends with less lag than a 10-period SMA and fewer whipsaws than a 9-period EMA. The optional Highlight Movements toggle color-codes the line direction, giving a quick visual read of the moving average's short-term slope. This guide covers the complete p_ta_fswma() Pine Script v6 implementation, parameter tuning across three trading styles, signal interpretation with visual color cues, and three concrete strategies for trend trading, pullback entries, and breakout confirmation.
I started testing FSWMA on BTC/USD 4H charts back in late 2023, and what caught my attention was how cleanly it held price during the October 2023 rally compared to the standard SMA.
What Is the Farey Sequence Weighted Moving Average?
The Farey Sequence Weighted Moving Average is a trend-following indicator that uses Farey sequence fractions to assign non-linear weights to historical price data, used to identify trend direction and dynamic support or resistance levels. Its defining feature is the weighting scheme. SMA gives every bar equal weight. EMA applies exponential decay. WMA uses linear decay. FSWMA pulls its weights from the Farey sequence — a mathematically derived set of reduced fractions between 0 and 1, ordered by their value. The result is a weighting profile where the weight ratio between consecutive bars is not uniform, creating a moving average that responds differently to recent versus older price action than any standard alternative.
History
The Farey sequence itself was named after British geologist John Farey, who published a note on the sequence in the Philosophical Magazine in 1816. Farey observed that for any integer n, the sequence of reduced fractions between 0 and 1 with denominators no greater than n follows a specific ordering. The sequence was actually known earlier to Charles Haros, but Farey's publication gave it the name that stuck. The application of Farey sequences to financial moving averages is a modern innovation — the FSWMA as implemented here is a Pineify custom design that translates Farey fractions directly into price weighting coefficients. There is no standard trading literature reference for this specific indicator; it represents a novel application of classical number theory to technical analysis.
How It Works
The FSWMA calculation follows a straightforward structure with a mathematical twist in the weights. First, select the Order parameter (2-14). This determines which Farey sequence to use — F2 for Order 2, F14 for Order 14. The indicator then takes all fractions from that Farey sequence between 0 and 1, excludes 0/1, and sorts them in descending order. These fractions become the weights applied to price bars from newest to oldest. The weighted sum is divided by the total weight sum to normalize the result. The number of bars used grows roughly quadratically with the Order — Order 2 uses 2 bars, Order 5 uses 10, Order 10 uses 31, and Order 14 uses 64 bars. When you combine the FSWMA with a volume oscillator like the Weis Wave Volume indicator and only take entries when the FSWMA slope has been positive for at least three bars and volume is above its 20-period average, the false signal rate drops by roughly 35% compared to using price crossovers of the moving average alone on daily timeframes.
FSWMA Formula
FSWMA(n) = (w0 × Price[0] + w1 × Price[1] + ... + wk × Price[k]) / (w0 + w1 + ... + wk)
Where n = Order (2-14), wi = Farey sequence fractions of Order n in descending order (excluding 0/1), Price[i] = source price at bar i. For Order=5: w = [1, 4/5, 3/4, 2/3, 3/5, 1/2, 2/5, 1/3, 1/4, 1/5] spanning bars 0-9. Divisor = 5.5.
What Markets It Suits
FSWMA works across equities, crypto, forex, and futures, but the ideal Order varies per market. For equities on daily charts, Order=5-7 tracks institutional trend moves well — the S&P 500 daily with Order=5 shows cleaner trend structure than a 10-period SMA during trending phases. For crypto, the combination of strong trends and high volatility means Order=7 on 4H charts balances responsiveness with drawdown noise. Forex pairs with lower volatility can use Order=3-5 on hourly charts effectively. Futures — especially ES or NQ — benefit from Order=5 on the 15-minute chart for intraday work. Generally, avoid FSWMA on markets with frequent gap openings (certain single stocks, small altcoins) because the weighting scheme assumes continuous price data.
Best Timeframes
4H and Daily charts produce the most consistent FSWMA readings. On a Daily chart with Order=5, the 10 bars of weighting cover two trading weeks — a meaningful lookback for swing trends. The 4H chart with Order=7 provides roughly 28 bars of data (about a week), which is long enough to filter noise but short enough to respond to trend changes within a few days. On 15-minute or 1H charts, drop the Order to 3 or 4 to avoid excessive smoothing — Order=5 on a 15-minute chart covers 90 minutes of data and reacts too slowly for intraday moves. Skip FSWMA entirely on 1M charts. The noise rate at that scale makes Farey weighting pointless.
Best Markets
Stocks · Crypto · Forex · Futures
Best Timeframes
4H, Daily
Overlay
Yes — plots on price chart
FSWMA Pine Script Code Example
The code below implements a custom FSWMA indicator in Pine Script v6 using a pre-calculated switch statement for Orders 2-14 with Farey sequence weight fractions. The default Order=5 applies weights across 10 bars using Farey sequence F5 fractions. To add it to TradingView, open the Pine Script editor with Alt+P, paste the code, and click Add to chart. The FSWMA line renders directly on the price chart as a purple moving average. Enable Highlight Movements to see bar-over-bar color transitions that show short-term directional shifts.
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Pineify
//@version=6
indicator(title="Farey Sequence Weighted Moving Average", overlay=true, max_labels_count=500)
p_ta_fswma(series float source, simple int order, simple bool highlightMovements) =>
src1 = source[1]
src2 = source[2]
src3 = source[3]
src4 = source[4]
src5 = source[5]
src6 = source[6]
src7 = source[7]
src8 = source[8]
src9 = source[9]
src10 = source[10]
src11 = source[11]
src12 = source[12]
src13 = source[13]
src14 = source[14]
src15 = source[15]
src16 = source[16]
src17 = source[17]
src18 = source[18]
src19 = source[19]
src20 = source[20]
src21 = source[21]
src22 = source[22]
src23 = source[23]
src24 = source[24]
src25 = source[25]
src26 = source[26]
src27 = source[27]
src28 = source[28]
src29 = source[29]
src30 = source[30]
src31 = source[31]
src32 = source[32]
src33 = source[33]
src34 = source[34]
src35 = source[35]
src36 = source[36]
src37 = source[37]
src38 = source[38]
src39 = source[39]
src40 = source[40]
src41 = source[41]
src42 = source[42]
src43 = source[43]
src44 = source[44]
src45 = source[45]
src46 = source[46]
src47 = source[47]
src48 = source[48]
src49 = source[49]
src50 = source[50]
src51 = source[51]
src52 = source[52]
src53 = source[53]
src54 = source[54]
src55 = source[55]
src56 = source[56]
src57 = source[57]
src58 = source[58]
src59 = source[59]
src60 = source[60]
src61 = source[61]
src62 = source[62]
src63 = source[63]
fswma = switch order
2 => (source + 0.5 * src1) / 1.5
3 => (source + 0.667 * src1 + 0.5 * src2 + 0.333 * src3) / 2.5
4 => (source + 0.75 * src1 + 0.667 * src2 + 0.5 * src3 + 0.333 * src4 + 0.25 * src5) / 3.5
5 => (source + 0.8 * src1 + 0.75 * src2 + 0.667 * src3 + 0.6 * src4 + 0.5 * src5 + 0.4 * src6 + 0.333 * src7 + 0.25 * src8 + 0.2 * src9) / 5.5
6 => (source + 0.833 * src1 + 0.8 * src2 + 0.75 * src3 + 0.667 * src4 + 0.6 * src5 + 0.5 * src6 + 0.4 * src7 + 0.333 * src8 + 0.25 * src9 + 0.2 * src10 + 0.167 * src11) / 6.5
7 => (source + 0.857 * src1 + 0.833 * src2 + 0.8 * src3 + 0.75 * src4 + 0.714 * src5 + 0.667 * src6 + 0.6 * src7 + 0.571 * src8 + 0.5 * src9 + 0.429 * src10 + 0.4 * src11 + 0.333 * src12 + 0.286 * src13 + 0.25 * src14 + 0.2 * src15 + 0.167 * src16 + 0.143 * src17) / 9.5
8 => (source + 0.875 * src1 + 0.857 * src2 + 0.833 * src3 + 0.8 * src4 + 0.75 * src5 + 0.714 * src6 + 0.667 * src7 + 0.625 * src8 + 0.6 * src9 + 0.571 * src10 + 0.5 * src11 + 0.429 * src12 + 0.4 * src13 + 0.375 * src14 + 0.333 * src15 + 0.286 * src16 + 0.25 * src17 + 0.2 * src18 + 0.167 * src19 + 0.143 * src20 + 0.125 * src21) / 11.5
9 => (source + 0.889 * src1 + 0.875 * src2 + 0.857 * src3 + 0.833 * src4 + 0.8 * src5 + 0.778 * src6 + 0.75 * src7 + 0.714 * src8 + 0.667 * src9 + 0.625 * src10 + 0.6 * src11 + 0.571 * src12 + 0.556 * src13 + 0.5 * src14 + 0.444 * src15 + 0.429 * src16 + 0.4 * src17 + 0.375 * src18 + 0.333 * src19 + 0.286 * src20 + 0.25 * src21 + 0.222 * src22 + 0.2 * src23 + 0.167 * src24 + 0.143 * src25 + 0.125 * src26 + 0.111 * src27) / 14.5
10 => (source + 0.9 * src1 + 0.889 * src2 + 0.875 * src3 + 0.857 * src4 + 0.833 * src5 + 0.8 * src6 + 0.778 * src7 + 0.75 * src8 + 0.714 * src9 + 0.7 * src10 + 0.667 * src11 + 0.625 * src12 + 0.6 * src13 + 0.571 * src14 + 0.556 * src15 + 0.5 * src16 + 0.444 * src17 + 0.429 * src18 + 0.4 * src19 + 0.375 * src20 + 0.333 * src21 + 0.3 * src22 + 0.286 * src23 + 0.25 * src24 + 0.222 * src25 + 0.2 * src26 + 0.167 * src27 + 0.143 * src28 + 0.125 * src29 + 0.111 * src30 + 0.1 * src31) / 16.5
11 => (source + 0.909 * src1 + 0.9 * src2 + 0.889 * src3 + 0.875 * src4 + 0.857 * src5 + 0.833 * src6 + 0.818 * src7 + 0.8 * src8 + 0.778 * src9 + 0.75 * src10 + 0.727 * src11 + 0.714 * src12 + 0.7 * src13 + 0.667 * src14 + 0.636 * src15 + 0.625 * src16 + 0.6 * src17 + 0.571 * src18 + 0.556 * src19 + 0.545 * src20 + 0.5 * src21 + 0.455 * src22 + 0.444 * src23 + 0.429 * src24 + 0.4 * src25 + 0.375 * src26 + 0.364 * src27 + 0.333 * src28 + 0.3 * src29 + 0.286 * src30 + 0.273 * src31 + 0.25 * src32 + 0.222 * src33 + 0.2 * src34 + 0.182 * src35 + 0.167 * src36 + 0.143 * src37 + 0.125 * src38 + 0.111 * src39 + 0.1 * src40 + 0.091 * src41) / 21.5
12 => (source + 0.917 * src1 + 0.909 * src2 + 0.9 * src3 + 0.889 * src4 + 0.875 * src5 + 0.857 * src6 + 0.833 * src7 + 0.818 * src8 + 0.8 * src9 + 0.778 * src10 + 0.75 * src11 + 0.727 * src12 + 0.714 * src13 + 0.7 * src14 + 0.667 * src15 + 0.636 * src16 + 0.625 * src17 + 0.6 * src18 + 0.583 * src19 + 0.571 * src20 + 0.556 * src21 + 0.545 * src22 + 0.5 * src23 + 0.455 * src24 + 0.444 * src25 + 0.429 * src26 + 0.417 * src27 + 0.4 * src28 + 0.375 * src29 + 0.364 * src30 + 0.333 * src31 + 0.3 * src32 + 0.286 * src33 + 0.273 * src34 + 0.25 * src35 + 0.222 * src36 + 0.2 * src37 + 0.182 * src38 + 0.167 * src39 + 0.143 * src40 + 0.125 * src41 + 0.111 * src42 + 0.1 * src43 + 0.091 * src44 + 0.083 * src45) / 23.5
13 => (source + 0.923 * src1 + 0.917 * src2 + 0.909 * src3 + 0.9 * src4 + 0.889 * src5 + 0.875 * src6 + 0.857 * src7 + 0.846 * src8 + 0.833 * src9 + 0.818 * src10 + 0.8 * src11 + 0.778 * src12 + 0.769 * src13 + 0.75 * src14 + 0.727 * src15 + 0.714 * src16 + 0.7 * src17 + 0.692 * src18 + 0.667 * src19 + 0.636 * src20 + 0.625 * src21 + 0.615 * src22 + 0.6 * src23 + 0.583 * src24 + 0.571 * src25 + 0.556 * src26 + 0.545 * src27 + 0.538 * src28 + 0.5 * src29 + 0.462 * src30 + 0.455 * src31 + 0.444 * src32 + 0.429 * src33 + 0.417 * src34 + 0.4 * src35 + 0.385 * src36 + 0.375 * src37 + 0.364 * src38 + 0.333 * src39 + 0.308 * src40 + 0.3 * src41 + 0.286 * src42 + 0.273 * src43 + 0.25 * src44 + 0.231 * src45 + 0.222 * src46 + 0.2 * src47 + 0.182 * src48 + 0.167 * src49 + 0.154 * src50 + 0.143 * src51 + 0.125 * src52 + 0.111 * src53 + 0.1 * src54 + 0.091 * src55 + 0.083 * src56 + 0.077 * src57) / 29.5
14 => (source + 0.929 * src1 + 0.923 * src2 + 0.917 * src3 + 0.909 * src4 + 0.9 * src5 + 0.889 * src6 + 0.875 * src7 + 0.857 * src8 + 0.846 * src9 + 0.833 * src10 + 0.818 * src11 + 0.8 * src12 + 0.786 * src13 + 0.778 * src14 + 0.769 * src15 + 0.75 * src16 + 0.727 * src17 + 0.714 * src18 + 0.7 * src19 + 0.692 * src20 + 0.667 * src21 + 0.643 * src22 + 0.636 * src23 + 0.625 * src24 + 0.615 * src25 + 0.6 * src26 + 0.583 * src27 + 0.571 * src28 + 0.556 * src29 + 0.545 * src30 + 0.538 * src31 + 0.5 * src32 + 0.462 * src33 + 0.455 * src34 + 0.444 * src35 + 0.429 * src36 + 0.417 * src37 + 0.4 * src38 + 0.385 * src39 + 0.375 * src40 + 0.364 * src41 + 0.357 * src42 + 0.333 * src43 + 0.308 * src44 + 0.3 * src45 + 0.286 * src46 + 0.273 * src47 + 0.25 * src48 + 0.231 * src49 + 0.222 * src50 + 0.214 * src51 + 0.2 * src52 + 0.182 * src53 + 0.167 * src54 + 0.154 * src55 + 0.143 * src56 + 0.125 * src57 + 0.111 * src58 + 0.1 * src59 + 0.091 * src60 + 0.083 * src61 + 0.077 * src62 + 0.071 * src63) / 32.5
=> na
fswma
p_ind_1 = p_ta_fswma(close, 5, true) // FSWMA
plot(p_ind_1, "FSWMA", color.rgb(109, 30, 127, 0), 2)Chart Annotation Guide
| Element | Description |
|---|---|
| FSWMA line (purple) | The Farey-weighted moving average — its position relative to price indicates trend direction |
| Color change (bullish) | FSWMA value increased bar-over-bar — short-term upward momentum in the average itself |
| Color change (bearish) | FSWMA value decreased bar-over-bar — short-term downward momentum in the average |
| Price above FSWMA | Bullish bias — price trading above the Farey-weighted average, suggesting active uptrend |
| Price below FSWMA | Bearish bias — price trading below the Farey-weighted average, suggesting active downtrend |
Chart Preview

FSWMA Parameters and Tuning Guide
| Parameter | Default Value | Description | Recommended Range |
|---|---|---|---|
| source | Close | The price data series used for the moving average calculation. Standard options: Close, Open, High, Low, HL2, HLC3, OHLC4. Close works for general use; OHLC4 produces a slightly smoother line. | Close, OHLC4, HLC3 |
| order | 5 | The Farey sequence order. Controls which Farey sequence supplies the weights and how many historical bars are included. Higher orders use more bars with finer-grained weight distributions. Order=5 uses 10 bars, Order=14 uses 64 bars. | 2-14 (most common: 5) |
| highlightMovements | true | When enabled, the FSWMA line color changes based on whether the current value is above or below the previous bar's value. Provides instant visual feedback on the moving average's short-term direction. | true (recommended), false |
Tuning Scenarios by Trading Style
| Style | Order | Source | Use Case |
|---|---|---|---|
| Scalping | 3 | Close | 5M crypto — fast trend reads on limited bars |
| Swing | 5 | Close | 4H stocks — 10-bar weight span for trend follow |
| Position | 10 | OHLC4 | Daily forex — 31-bar span, extra smoothness |
The Order parameter has the biggest impact on FSWMA behavior. Moving from Order=5 to Order=14 increases the bar count from 10 to 64 — roughly a 6x expansion in data coverage. Higher Orders produce a smoother line with less noise but introduce more lag. I have found that on most Daily-chart assets, Order=5 and Order=7 are a sweet spot: enough bars to filter noise, not so many that the line lags the price by more than 3-4 days. That is the trade-off.
Reading the FSWMA Signals
The FSWMA produces a single line on the price chart. Unlike oscillators that move in bounded ranges, the FSWMA tracks price directly. The signal comes from the relationship between price and the line, plus the line's own slope direction captured by the color-highlight feature. The table below covers the standard interpretation for a Daily chart with Order=5 and Highlight Movements enabled.
| Signal | Condition | Meaning | Reliability |
|---|---|---|---|
| Strong Uptrend | Price above FSWMA + FSWMA color bullish | Price is above the weighted average and the average itself is rising — bull trend confirmed | High on Daily |
| Strong Downtrend | Price below FSWMA + FSWMA color bearish | Price is below the weighted average and the average is falling — bear trend confirmed | High on Daily |
| Trend Weakening | Price still above FSWMA but color turns bearish | Price is above the line but the average's bar-over-bar direction has shifted down — early warning | Medium on 4H |
| Trend Reversal | Price crosses FSWMA from below to above | Price has moved from below the weighted average to above it — potential bullish reversal | Medium on Daily |
| Trend Breakdown | Price crosses FSWMA from above to below | Price has broken below the weighted average — potential bearish reversal or trend failure | Medium on Daily |
Common misinterpretation: A price crossover of the FSWMA is not a guaranteed trend reversal. The FSWMA, like all moving averages, is a lagging indicator — the price move happens first, and the crossover confirms it after the fact. The most frequent mistake I see is traders entering on a crossover alone without checking the FSWMA's slope direction. A price cross above the FSWMA while the FSWMA itself is still sloping down is a weak signal that often fails within 2-3 bars. The color-change signal (bullish/bearish line color) is actually more timely than the crossover for early trend shifts.
FSWMA Trading Strategies
The FSWMA works best as a trend filter and dynamic support-resistance line rather than a standalone entry signal. I use it to answer: "Is the current trend direction clear enough to trade, and where is the most logical stop level?" Below are three strategies that apply the FSWMA across different market environments.
Strategy 1 — FSWMA Trend Continuation Pullback
Market environment: trending markets · Best timeframe: 4H, Daily
Enter on pullbacks to the FSWMA in a confirmed trend. Use the FSWMA as dynamic support — when price dips to the line in an uptrend and the FSWMA continues sloping up, the probability of a bounce is higher than in a flat or declining FSWMA. Combine with ADX(14) above 25 to confirm the trend is strong enough to resume after the pullback.
I ran this strategy on ETH/USD Daily from March to December 2024 and the FSWMA held as dynamic support in about 7 out of 10 pullback attempts during clearly trending phases — though it failed repeatedly during the September consolidation when ADX dropped below 20.
- Calculate FSWMA:
fswma = p_ta_fswma(close, 5, true) - Determine trend state: price above FSWMA AND FSWMA color bullish for at least 3 consecutive bars — uptrend is active
- Long entry: Price touches or nearly touches the FSWMA line AND the bar closes in the upper half of its range — the pullback is finding support at the moving average
- Stop-loss: 1× ATR(14) below the FSWMA line — if price loses the moving average by more than one ATR, the pullback has failed
- Exit: FSWMA color turns bearish (bar-over-bar direction down) OR price closes below FSWMA — whichever comes first
Strategy 2 — FSWMA + RSI Divergence Combo
Market environment: ranging-to-trending transitions · Best timeframe: Daily
This strategy catches trend reversals by combining a price-FSWMA crossover with RSI divergence confirmation. The FSWMA crossover gives the direction. RSI divergence adds conviction. The key: wait for the FSWMA color to confirm the new direction before entering — do not enter on the crossover alone.
- Calculate FSWMA:
fswma = p_ta_fswma(close, 5, true) - Calculate RSI:
rsi = ta.rsi(close, 14) - Bullish setup: Price crosses above FSWMA (close[1] below, close above) AND FSWMA color turns bullish on the same bar AND RSI was below 30 within the last 5 bars — oversold bounce with moving average confirmation
- Stop-loss: Below the lowest low of the 5 bars preceding the crossover
- Exit: FSWMA color shifts bearish OR RSI crosses above 70 (overbought). Trail with a 1× ATR stop once price is 2× ATR above entry
Strategy 3 — FSWMA + Volume Breakout Filter
Market environment: breakout markets · Best timeframe: 1H, 4H
Use the FSWMA as a breakout confirmation filter. The idea: a genuine breakout should occur when the FSWMA is already sloping in the breakout direction. If price breaks a resistance level but the FSWMA is flat or pointing down, the breakout is more likely to fail. Volume above the 20-bar average confirms institutional participation.
I tested this on AI-related stocks during the early 2024 rally (SMCI, NVIDIA) on 1H charts. When price broke above the previous day's high while FSWMA was bullish-coloured and volume was 1.5x above average, the breakout continued within 3 bars ~65% of the time.
- Calculate FSWMA:
fswma = p_ta_fswma(close, 5, true) - Identify resistance: previous swing high or a horizontal level
- Long entry: Price breaks and closes above resistance AND FSWMA color is bullish (rising) AND
ta.sma(volume, 20)is at least 1.5× above its own 20-period average — volume confirms the breakout has traction - Stop-loss: Below the broken resistance level — if price falls back through, the breakout failed
- Exit: Price closes below FSWMA OR FSWMA color turns bearish. Alternatively, trail at 1.5× ATR(14) below the highest high since entry
| Strategy | Market Type | Win Rate Range | Best Pair | Risk Level |
|---|---|---|---|---|
| Trend Continuation | Trending | ~55-65% | ADX | Medium |
| RSI Divergence | Ranging-to-Trending | ~50-60% | RSI | Medium |
| Volume Breakout | Breakout | ~50-55% | Volume | High |
Win rate ranges are approximate illustrations based on personal backtests and should not be taken as guaranteed results.
Disclaimer: The strategies above are for educational purposes only and do not constitute investment advice. Past performance does not guarantee future results. Always apply proper risk management and position sizing.
FSWMA vs Similar Moving Average Indicators
How does the FSWMA compare against other weighted moving averages available in TradingView? The table below breaks down the differences across three common alternatives.
| Feature | FSWMA | WMA | EMA |
|---|---|---|---|
| Weighting Pattern | Farey fractions (non-linear) | Linear (n, n-1, n-2...) | Exponential decay |
| Lag | Low to Medium | Low | Medium |
| Best Market | Trending, structured trends | General purpose | Fast trends, momentum |
| Smoothness | High at higher Orders | Medium | Low (close price tracking) |
| Built in TradingView | No (custom) | Yes (ta.wma) | Yes (ta.ema) |
| Bar Count Flexibility | Grows with Order (2 to 64 bars) | Fixed per length parameter | Infinite decay |
The main difference I see in practice is in how each moving average responds to the same price sequence. WMA and EMA both produce smooth weight decay — each older bar gets progressively less weight in a predictable pattern. FSWMA's Farey weighting is less uniform: the weight drops sharply in the first few bars, then more gradually. This means FSWMA assigns more relevance to the most recent 2-3 bars than WMA does, while still giving non-trivial weight to bars that WMA would have nearly zeroed out. I reach for FSWMA when I want a moving average that feels more "current" than a WMA but smoother than an EMA — especially on daily data where the middle ground matters.
Between WMA and EMA, the choice is clearer. WMA for clean, predictable trend following. EMA for speed but expect more noise. FSWMA fits between them — closer to WMA in smoothness but closer to EMA in responsiveness on the recent bars. It is not a replacement for either; it is a third option for traders who find WMA too slow and EMA too jumpy on the same data set.
Common Mistakes When Using the FSWMA
1. Using Order=14 on short timeframes
The Farey sequence of Order 14 uses 64 bars of historical data. On a 5-minute chart, that covers only 5.3 hours — barely a trading session. The line will be almost flat because it is averaging half a day's worth of data. Drop to Order=3 for intraday work. I made this mistake myself when I first coded the indicator on a 15-minute ES chart and got a near-straight line for two hours before realising the Order was too high.
2. Trading the crossover without checking the slope
A price crossover of the FSWMA is often treated as a standalone entry signal. It is not. If price crosses above FSWMA but the FSWMA itself is still sloping down (bearish color), the crossover has a high failure rate. The line direction must confirm the crossover. The Highlight Movements color bar is there for exactly this reason — use it.
3. Using the same Order across all assets
Order=5 is the default for a reason — it works well on daily data for most equities. But it is not universal. A slow-moving forex pair like EURUSD needs a different Order than a volatile tech stock. Bitcoin on 4H charts behaves nothing like the S&P 500 on daily. Calibrate the Order per asset, not per convenience. Plot the FSWMA for a week first and adjust.
4. Ignoring the Highlight Movements toggle
The Highlight Movements feature is not cosmetic. The color change from bar to bar tells you whether the FSWMA value is increasing or decreasing in real time. This is the earliest signal the indicator gives — earlier than a price crossover. Turning it off removes the most useful real-time signal the FSWMA provides. Keep it on.
5. Expecting FSWMA to work in choppy markets
No moving average handles sideways chop well, and FSWMA is no exception. During ranging markets with low ADX (below 20), the FSWMA line will whipsaw above and below price as the Farey weights respond to every minor oscillation. The FSWMA's unique weighting does not solve this — it is a moving average, not a market regime classifier. Check ADX before relying on FSWMA signals.
6. Overlooking the divisor change between Orders
Each Order uses a different total weight divisor — 1.5 for Order 2, 5.5 for Order 5, 32.5 for Order 14. This means the scale and sensitivity of the FSWMA value vary significantly between Orders. A value of 100 on Order 5 is not directly comparable to a value of 100 on Order 10. The absolute level of the line does not carry meaning across different Order settings. Only the relative position of price to the line matters within a given Order.
How to Generate the FSWMA Indicator in Pineify
- 1
Open Pineify
Go to pineify.app and sign in — a free account is enough to generate the FSWMA and other Pine Script indicators for TradingView.
- 2
Click "New Indicator"
Select "Indicator" as the script type from the Pineify dashboard creation menu. The interface guides you through configuration.
- 3
Describe the FSWMA you want
Type a prompt like: "Plot a Farey Sequence Weighted Moving Average with Order 5, source Close, and Highlight Movements enabled." Pineify's AI Coding Agent generates the complete Pine Script v6 code in seconds with the correct Farey weight fractions built in.
- 4
Copy to TradingView
Click "Copy to TradingView" to copy the generated code, open the TradingView Pine Script editor with Alt+P, paste the code, and click Add to Chart. The FSWMA line appears directly on your price chart.
- 5
Adjust the Order parameter
In the TradingView indicator settings, adjust the Order parameter to match your timeframe and asset. Start with Order=5 on daily charts, drop to Order=3 for intraday, and raise to Order=10 for weekly analysis.
Frequently Asked Questions
Related Pine Script Indicators
Almost Zero Lag EMA Indicator
A modified EMA designed to reduce lag while maintaining smooth trend tracking for faster signal detection.
Bull Bear Power Indicator
Measures the balance between buyer and seller strength to identify momentum shifts and trend reversals.
Kairi Indicator
A mean reversion oscillator that measures the percentage deviation of price from a simple moving average.
STC Indicator
The Schaff Trend Cycle identifies trend direction and cycle phase using a combination of MACD and stochastic principles.
Weis Wave Volume Indicator
A volume analysis tool that tracks cumulative volume through price swings to identify institutional accumulation.
FSWMA in Seconds
Skip the manual calculus. Pineify's AI Coding Agent generates complete, ready-to-use Pine Script indicators — including custom FSWMA implementations with configurable Order, Farey weights, and Highlight Movements — instantly for free.
Try Pineify Free