Advertisement IC Markets

The Ultimate 1 Minute Forex Scalping Strategy: ALMA Indicator Explained

Discuss 1-minute to 15-minute price action setups, fading intraday momentum, key support/resistance zones, and proven short-term trading methodologies.
PTScalper
Site Admin
Posts: 3349
Joined: Mon Jul 20, 2026 1:28 pm

The Ultimate 1 Minute Forex Scalping Strategy: ALMA Indicator Explained

Post by PTScalper »

Hi all scalpers :-)

Did you hear about this forex scalping stratégy or do you have any experience with it? I found it several months ago and seems to me, that it works. I will try to explain basic setup and how i trade it.

When it comes to ultra-short timeframes, lag is the enemy. Over nearly two decades of navigating the markets and testing countless setups, I've found that traditional moving averages (like SMA or even EMA) simply react too slowly when you are hunting for quick 5-10 pip gains.
Recently, I’ve been refining a specific 1 minute forex scalping strategy ALMA indicator setup, and the results in terms of noise reduction and responsiveness are fantastic. For those who aren't familiar with it, I wanted to break down what ALMA is and how I use it.
What is the ALMA Indicator?
ALMA stands for Arnaud Legoux Moving Average. Unlike standard moving averages that either lag heavily or suffer from market noise, ALMA applies a Gaussian filter. In simple terms, it calculates the moving average from left to right and right to left. This dual-directional smoothing eliminates price noise while keeping the indicator incredibly close to the current price action. You get the best of both worlds: extreme smoothness and minimal lag.
The Strategy Setup (1-Minute Chart):
Here is the baseline for my 1 minute forex scalping strategy ALMA indicator approach.
Currency Pairs: High liquidity only (EUR/USD, GBP/USD).
Timeframe: M1 (1-minute).
ALMA Settings: Window size 9, Offset 0.85, Sigma 6 (You can tweak this based on volatility).
Confirmation Indicator: MACD (12, 26, 9) or a fast Stochastic to measure momentum.
Entry Rules:
1. Long (Buy): Wait for the price to cross and close definitively above the ALMA line. Confirm that your MACD histogram is printing above the zero line. The lack of lag with ALMA means you get in right as the momentum shifts, not three candles later.
2. Short (Sell): Wait for the price to cross and close below the ALMA line. Confirm with the MACD printing below zero.
Exit Strategy & Risk Management:
Because this is an aggressive M1 approach, I keep my Stop Loss tight—usually just behind the recent swing high/low, or right on the opposite side of the ALMA curve. Take Profit is generally 1.5x to 2x the risk.
I’ve documented more variations of this and other fast-paced setups over at forex-scalping.com if anyone wants to dive deeper into the technical mechanics.
Has anyone else here experimented with ALMA for scalping? Do you pair it with other momentum oscillators on the 1-minute chart? Let me know your thoughts or if you have a different favorite moving average for the M1!

Feel free to ask about anything or leave feedback how it works for you ;-)

Take a care,
Have a great trades.
Preserve your own money. Scale with the market's money. Exponential growth is the ultimate key.
Recommended broker for automated trading & scalping IC Markets
LondonScalper
Posts: 770
Joined: Sat Sep 05, 2026 7:54 am

Re: The Ultimate 1 Minute Forex Scalping Strategy: ALMA Indicator Explained

Post by LondonScalper »

PTScalper wrote:1 minute forex scalping strategy ALMA indicator setup
ALMA’s appeal is understandable — less lag theatre than a plain SMA, a bit cleaner than some EMA stacks on M1. I’ve tested it as a context filter, not as a standalone entry oracle.

Where it helps: spotting when short-term noise is leaning with a slightly smoother baseline. Where it fails: treating crossovers as destiny in a lunchtime range. On EURUSD M1 you still need session, spread, and a clear invalidation; ALMA doesn’t pay the spread for you.

Practical use I’d defend:
  • ALMA slope / side as permission
  • Entry from price action at a level, not from the line alone
  • Stand down when ALMA is flat and ATR is compressed
If the write-up is getting views but no replies, it may be because people want the boring bit: sample size, pair list, and average hold. Happy to compare notes — are you using ALMA mainly as trend permission or as the actual trigger?
FTtrader
Posts: 954
Joined: Mon Aug 03, 2026 2:43 pm

Re: The Ultimate 1 Minute Forex Scalping Strategy: ALMA Indicator Explained

Post by FTtrader »

PTScalper wrote: Thu Jul 23, 2026 8:37 am Hi all scalpers :-)

Did you hear about this forex scalping stratégy or do you have any experience with it? I found it several months ago and seems to me, that it works. I will try to explain basic setup and how i trade it.

When it comes to ultra-short timeframes, lag is the enemy. Over nearly two decades of navigating the markets and testing countless setups, I've found that traditional moving averages (like SMA or even EMA) simply react too slowly when you are hunting for quick 5-10 pip gains.
Recently, I’ve been refining a specific 1 minute forex scalping strategy ALMA indicator setup, and the results in terms of noise reduction and responsiveness are fantastic. For those who aren't familiar with it, I wanted to break down what ALMA is and how I use it.
What is the ALMA Indicator?
ALMA stands for Arnaud Legoux Moving Average. Unlike standard moving averages that either lag heavily or suffer from market noise, ALMA applies a Gaussian filter. In simple terms, it calculates the moving average from left to right and right to left. This dual-directional smoothing eliminates price noise while keeping the indicator incredibly close to the current price action. You get the best of both worlds: extreme smoothness and minimal lag.
The Strategy Setup (1-Minute Chart):
Here is the baseline for my 1 minute forex scalping strategy ALMA indicator approach.
Currency Pairs: High liquidity only (EUR/USD, GBP/USD).
Timeframe: M1 (1-minute).
ALMA Settings: Window size 9, Offset 0.85, Sigma 6 (You can tweak this based on volatility).
Confirmation Indicator: MACD (12, 26, 9) or a fast Stochastic to measure momentum.
Entry Rules:
1. Long (Buy): Wait for the price to cross and close definitively above the ALMA line. Confirm that your MACD histogram is printing above the zero line. The lack of lag with ALMA means you get in right as the momentum shifts, not three candles later.
2. Short (Sell): Wait for the price to cross and close below the ALMA line. Confirm with the MACD printing below zero.
Exit Strategy & Risk Management:
Because this is an aggressive M1 approach, I keep my Stop Loss tight—usually just behind the recent swing high/low, or right on the opposite side of the ALMA curve. Take Profit is generally 1.5x to 2x the risk.
I’ve documented more variations of this and other fast-paced setups over at forex-scalping.com if anyone wants to dive deeper into the technical mechanics.
Has anyone else here experimented with ALMA for scalping? Do you pair it with other momentum oscillators on the 1-minute chart? Let me know your thoughts or if you have a different favorite moving average for the M1!

Feel free to ask about anything or leave feedback how it works for you ;-)

Take a care,
Have a great trades.
Hi PTscalper,

Spot on regarding the ALMA indicator. Standard SMAs and EMAs on the 1-minute chart will get you chopped to pieces by lag, but ALMA’s Gaussian filter genuinely feels like a cheat code for smoothing out the noise without sacrificing responsiveness.

Pairing it with the MACD histogram is a classic but highly effective filter. On the M1 timeframe, you get constant false crossovers just from standard market breathing. Demanding that the MACD momentum agrees with the ALMA crossover keeps you out of those tight, low-volume consolidation traps.

The only thing I'd add for anyone trying this: spreads and commissions will eat you alive on M1 if you aren't careful. Sticking to EUR/USD and GBP/USD during London/New York overlap is mandatory to make a 1.5x risk/reward math work out in your favor.

Since you mentioned you've been testing this manually, I went ahead and coded a TradingView Pine Script (v5) strategy based exactly on your rules. This will let you backtest the setup instantly across different pairs and automatically calculate the swing high/low for your Stop Loss and Take Profit.
FTtrader
Posts: 954
Joined: Mon Aug 03, 2026 2:43 pm

Re: The Ultimate 1 Minute Forex Scalping Strategy: ALMA Indicator Explained

Post by FTtrader »

The ALMA + MACD Scalping Pine Script

You can copy and paste this directly into the Pine Editor in TradingView. I've set your specific parameters as the defaults, but you can tweak them in the script settings.

Code: Select all

//@version=5
strategy("ALMA + MACD 1-Min Scalping Strategy", overlay=true, initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// ==========================================
// INPUTS
// ==========================================
// ALMA Settings
almaLength = input.int(9, title="ALMA Window Size", group="ALMA Settings")
almaOffset = input.float(0.85, title="ALMA Offset", step=0.05, group="ALMA Settings")
almaSigma  = input.int(6, title="ALMA Sigma", group="ALMA Settings")

// MACD Settings
fastLength = input.int(12, title="MACD Fast Length", group="MACD Settings")
slowLength = input.int(26, title="MACD Slow Length", group="MACD Settings")
signalLength = input.int(9, title="MACD Signal Length", group="MACD Settings")

// Risk Management
rrRatio = input.float(1.5, title="Risk/Reward Ratio (TP multiplier)", step=0.1, group="Risk Management")
lookback = input.int(5, title="Swing High/Low Lookback (bars)", group="Risk Management")

// ==========================================
// INDICATOR CALCULATIONS
// ==========================================
// Calculate ALMA
almaLine = ta.alma(close, almaLength, almaOffset, almaSigma)

// Calculate MACD
[macdLine, signalLine, histLine] = ta.macd(close, fastLength, slowLength, signalLength)

// Plot ALMA on the chart
plot(almaLine, color=color.new(color.blue, 0), linewidth=2, title="ALMA")

// ==========================================
// ENTRY CONDITIONS
// ==========================================
// Wait for price to cross and close over/under ALMA
longCross  = ta.crossover(close, almaLine)
shortCross = ta.crossunder(close, almaLine)

// Confirm with MACD histogram
longCond  = longCross and histLine > 0
shortCond = shortCross and histLine < 0

// ==========================================
// TRADE EXECUTION & RISK MANAGEMENT
// ==========================================
var float trade_sl = na
var float trade_tp = na

// Long Entry
if (longCond and strategy.position_size == 0)
    // Find the recent swing low for Stop Loss
    trade_sl := ta.lowest(low[1], lookback)
    risk = close - trade_sl
    // Calculate TP based on 1.5x RR
    trade_tp := close + (risk * rrRatio)
    
    strategy.entry("Long", strategy.long)

// Short Entry
if (shortCond and strategy.position_size == 0)
    // Find the recent swing high for Stop Loss
    trade_sl := ta.highest(high[1], lookback)
    risk = trade_sl - close
    // Calculate TP based on 1.5x RR
    trade_tp := close - (risk * rrRatio)
    
    strategy.entry("Short", strategy.short)

// Manage Exits
if (strategy.position_size > 0)
    strategy.exit("Exit Long", "Long", stop=trade_sl, limit=trade_tp)

if (strategy.position_size < 0)
    strategy.exit("Exit Short", "Short", stop=trade_sl, limit=trade_tp)
FTtrader
Posts: 954
Joined: Mon Aug 03, 2026 2:43 pm

Re: The Ultimate 1 Minute Forex Scalping Strategy: ALMA Indicator Explained

Post by FTtrader »

How the script works:

The Entry: It strictly looks for the candle to cross and close over/under the ALMA (using ta.crossover). The MACD histogram must be on the correct side of the zero line at the exact moment of the close.

The Stop Loss: Instead of a fixed pip amount, it scans the last 5 candles (you can adjust the lookback) to find the recent swing high or low.

The Take Profit: It calculates your risk (Entry Price - Stop Loss) and automatically sets a limit order at 1.5x that distance.

Load it up on EUR/USD M1 and let the backtester run. You might find that tweaking the ALMA Sigma up to 7 or 8 during low-volume Asian sessions helps filter out even more noise.

Has anyone else played around with adding an ATR (Average True Range) filter to this to ensure there is enough volatility before taking the ALMA cross?
FTtrader
Posts: 954
Joined: Mon Aug 03, 2026 2:43 pm

Re: The Ultimate 1 Minute Forex Scalping Strategy: ALMA Indicator Explained

Post by FTtrader »

I’ve engineered an advanced, "Pro" version of the Pine Script (v5). This iteration graduates from a basic logic script to a robust algorithmic backtesting tool.

What Makes This "Pro":

Realistic Execution Modeling: Factored in slippage and commission costs per trade. On M1, a 1-pip spread can destroy a strategy with a high win rate.

Session Filtering (London/NY): M1 mean-reversion and scalping setups fail during the Asian session chop. The script only takes setups during high-liquidity overlaps.

Macro Trend Alignment: Added an optional 200 EMA higher-timeframe filter to ensure you are only scalping in the direction of the macro institutional flow.

ATR-Based Dynamic Risk: Fixed pip stops or simple swing-low lookbacks get hunted in M1 liquidity sweeps. This script uses Average True Range (ATR) to dynamically expand your Stop Loss during high volatility and tighten it when the market compresses.

Visual HUD: Added a real-time dashboard table and custom candle coloring to instantly identify ALMA trend state.
FTtrader
Posts: 954
Joined: Mon Aug 03, 2026 2:43 pm

Re: The Ultimate 1 Minute Forex Scalping Strategy: ALMA Indicator Explained

Post by FTtrader »

The ALMA + MACD Pro Scalper Pine Script

Code: Select all

//@version=5
strategy("ALMA + MACD Pro Scalper [M1]", overlay=true, initial_capital=10000, 
         default_qty_type=strategy.percent_of_equity, default_qty_value=2, 
         commission_type=strategy.commission.cash_per_order, commission_value=3, slippage=1,
         max_labels_count=500, max_lines_count=500)

// ==========================================
// INPUT GROUPS & PARAMETERS
// ==========================================
var string G_ALMA   = "ALMA Core Settings"
var string G_MACD   = "MACD Momentum Filter"
var string G_FILTER = "Pro Filters (Session & Trend)"
var string G_RISK   = "Dynamic Risk Management (ATR)"
var string G_UI     = "Visuals & HUD"

// ALMA Settings
almaLength = input.int(9, title="Window Size", group=G_ALMA)
almaOffset = input.float(0.85, title="Offset", step=0.05, group=G_ALMA)
almaSigma  = input.int(6, title="Sigma", group=G_ALMA)

// MACD Settings
fastLength   = input.int(12, title="Fast Length", group=G_MACD)
slowLength   = input.int(26, title="Slow Length", group=G_MACD)
signalLength = input.int(9, title="Signal Length", group=G_MACD)

// Filters
useSession   = input.bool(true, title="Enable Session Filter?", group=G_FILTER)
sessionTimes = input.session("0800-1700", title="Trading Session (Exchange Time)", group=G_FILTER)
useHtfEma    = input.bool(true, title="Filter with 200 EMA?", group=G_FILTER)

// Risk Management (ATR)
atrLength    = input.int(14, title="ATR Length", group=G_RISK)
slMultiplier = input.float(1.5, title="SL ATR Multiplier", step=0.1, group=G_RISK)
rrRatio      = input.float(2.0, title="Risk/Reward Ratio (TP multiplier)", step=0.1, group=G_RISK)

// Visuals
showHUD      = input.bool(true, title="Show Dashboard Table?", group=G_UI)
colorCandles = input.bool(true, title="Color Candles by ALMA Trend?", group=G_UI)

// ==========================================
// INDICATOR & FILTER CALCULATIONS
// ==========================================
// ALMA & MACD
almaLine = ta.alma(close, almaLength, almaOffset, almaSigma)
[macdLine, signalLine, histLine] = ta.macd(close, fastLength, slowLength, signalLength)

// ATR for Dynamic Stop Loss
atr = ta.atr(atrLength)

// 200 EMA Macro Trend
ema200 = ta.ema(close, 200)

// Session Time check
inSession = useSession ? not na(time(timeframe.period, sessionTimes)) : true

// ==========================================
// VISUAL RENDERING
// ==========================================
almaColor = close > almaLine ? color.new(#00E676, 0) : color.new(#FF5252, 0)
plot(almaLine, color=almaColor, linewidth=2, title="ALMA")
plot(useHtfEma ? ema200 : na, color=color.new(color.white, 50), linewidth=1, title="200 EMA")

// Color Candles
barcolor(colorCandles ? almaColor : na)
bgcolor(useSession and inSession ? color.new(color.blue, 95) : na, title="Trading Session")

// ==========================================
// ENTRY LOGIC (Strict Confluence)
// ==========================================
longCross  = ta.crossover(close, almaLine)
shortCross = ta.crossunder(close, almaLine)

// Core Logic: ALMA Cross + MACD alignment + Time Session + (Optional) Price above 200 EMA
longCond  = longCross  and (histLine > 0) and inSession and (useHtfEma ? close > ema200 : true)
shortCond = shortCross and (histLine < 0) and inSession and (useHtfEma ? close < ema200 : true)

// ==========================================
// TRADE EXECUTION & RISK MANAGEMENT
// ==========================================
var float trade_sl = na
var float trade_tp = na

if (longCond and strategy.position_size == 0)
    trade_sl := close - (atr * slMultiplier)
    risk = close - trade_sl
    trade_tp := close + (risk * rrRatio)
    strategy.entry("Long", strategy.long)

if (shortCond and strategy.position_size == 0)
    trade_sl := close + (atr * slMultiplier)
    risk = trade_sl - close
    trade_tp := close - (risk * rrRatio)
    strategy.entry("Short", strategy.short)

if (strategy.position_size > 0)
    strategy.exit("Exit Long", "Long", stop=trade_sl, limit=trade_tp)

if (strategy.position_size < 0)
    strategy.exit("Exit Short", "Short", stop=trade_sl, limit=trade_tp)

// ==========================================
// DASHBOARD HUD
// ==========================================
if showHUD
    var table hud = table.new(position.top_right, 2, 4, border_width = 1)
    if barstate.islast
        table.cell(hud, 0, 0, "Metric", text_color=color.white, bgcolor=color.gray)
        table.cell(hud, 1, 0, "Value", text_color=color.white, bgcolor=color.gray)
        
        table.cell(hud, 0, 1, "ALMA Trend", text_color=color.white, bgcolor=color.black)
        table.cell(hud, 1, 1, close > almaLine ? "BULLISH" : "BEARISH", text_color=close > almaLine ? color.green : color.red, bgcolor=color.black)
        
        table.cell(hud, 0, 2, "Market Session", text_color=color.white, bgcolor=color.black)
        table.cell(hud, 1, 2, inSession ? "ACTIVE" : "CLOSED", text_color=inSession ? color.green : color.red, bgcolor=color.black)
        
        table.cell(hud, 0, 3, "Current Volatility (ATR)", text_color=color.white, bgcolor=color.black)
        table.cell(hud, 1, 3, str.tostring(atr, "#.#####"), text_color=color.yellow, bgcolor=color.black)
FTtrader
Posts: 954
Joined: Mon Aug 03, 2026 2:43 pm

Re: The Ultimate 1 Minute Forex Scalping Strategy: ALMA Indicator Explained

Post by FTtrader »

Apply this to the chart and you will immediately see how the ATR stop loss keeps you alive through standard 1-minute order book sweeps, while the session filter drastically flattens the equity curve drawdowns during dead hours.
FTtrader
Posts: 954
Joined: Mon Aug 03, 2026 2:43 pm

Re: The Ultimate 1 Minute Forex Scalping Strategy: ALMA Indicator Explained

Post by FTtrader »

Moving the ALMA logic from TradingView to MetaTrader requires a different approach because neither MT4 nor MT5 has ALMA as a built-in native indicator [cite: 1.1.1].

Most traders handle this by downloading a custom .ex4 or .ex5 indicator file and calling it via iCustom. However, for algorithmic execution on the 1-minute chart, that creates heavy overhead and slows down backtesting significantly. The professional way to build this is to embed the Gaussian distribution mathematics directly into the Expert Advisor (EA) [cite: 1.1.3]. This makes the bot completely standalone, lightning-fast, and precise.

Below are the complete, standalone EAs for both MT5 and MT4. Both scripts execute on candle close to prevent intra-bar repainting, calculate the MACD histogram natively, and use dynamic ATR for Stop Loss and Take Profit.
FTtrader
Posts: 954
Joined: Mon Aug 03, 2026 2:43 pm

Re: The Ultimate 1 Minute Forex Scalping Strategy: ALMA Indicator Explained

Post by FTtrader »

MQL5 Version (For MetaTrader 5)

Create a new Expert Advisor in MetaEditor 5, paste this in, and compile. It uses the modern CTrade class for execution.

Code: Select all

//+------------------------------------------------------------------+
//|                                              ALMA_Pro_MT5.mq5    |
//+------------------------------------------------------------------+
#include <Trade\Trade.mqh>
CTrade trade;

// --- Inputs ---
input int    InpAlmaLength = 9;       // ALMA Window Size
input double InpAlmaOffset = 0.85;    // ALMA Offset
input double InpAlmaSigma  = 6.0;     // ALMA Sigma
input int    InpMacdFast   = 12;      // MACD Fast
input int    InpMacdSlow   = 26;      // MACD Slow
input int    InpMacdSignal = 9;       // MACD Signal
input int    InpAtrPeriod  = 14;      // ATR Period
input double InpSlAtrMult  = 1.5;     // SL ATR Multiplier
input double InpRrRatio    = 2.0;     // Risk/Reward Ratio
input double InpLotSize    = 0.1;     // Fixed Lot Size
input ulong  InpMagic      = 123456;  // Magic Number

int macdHandle, atrHandle;

int OnInit() {
    trade.SetExpertMagicNumber(InpMagic);
    macdHandle = iMACD(_Symbol, _Period, InpMacdFast, InpMacdSlow, InpMacdSignal, PRICE_CLOSE);
    atrHandle = iATR(_Symbol, _Period, InpAtrPeriod);
    
    if(macdHandle == INVALID_HANDLE || atrHandle == INVALID_HANDLE) return(INIT_FAILED);
    return(INIT_SUCCEEDED);
}

void OnTick() {
    if(!IsNewBar()) return; // Execute strictly on bar close
    
    if(PositionsTotal() > 0) return; // Prevent overlapping trades
    
    // Calculate ALMA for the last two closed bars
    double alma1 = CalculateALMA(1, InpAlmaLength, InpAlmaOffset, InpAlmaSigma);
    double alma2 = CalculateALMA(2, InpAlmaLength, InpAlmaOffset, InpAlmaSigma);
    if(alma1 == 0 || alma2 == 0) return;
    
    double close1 = iClose(_Symbol, _Period, 1);
    double close2 = iClose(_Symbol, _Period, 2);
    
    // Fetch MACD and ATR data
    double macdMain[1], macdSignal[1], atr[1];
    if(CopyBuffer(macdHandle, 0, 1, 1, macdMain) <= 0) return;
    if(CopyBuffer(macdHandle, 1, 1, 1, macdSignal) <= 0) return;
    if(CopyBuffer(atrHandle, 0, 1, 1, atr) <= 0) return;
    
    // MACD Histogram = Main Line - Signal Line
    double hist1 = macdMain[0] - macdSignal[0]; 
    
    // Entry Conditions
    bool longCross  = (close1 > alma1 && close2 <= alma2);
    bool shortCross = (close1 < alma1 && close2 >= alma2);
    
    if(longCross && hist1 > 0) {
        double sl = NormalizeDouble(close1 - (atr[0] * InpSlAtrMult), _Digits);
        double tp = NormalizeDouble(close1 + ((close1 - sl) * InpRrRatio), _Digits);
        trade.Buy(InpLotSize, _Symbol, 0, sl, tp, "ALMA Long");
    }
    else if(shortCross && hist1 < 0) {
        double sl = NormalizeDouble(close1 + (atr[0] * InpSlAtrMult), _Digits);
        double tp = NormalizeDouble(close1 - ((sl - close1) * InpRrRatio), _Digits);
        trade.Sell(InpLotSize, _Symbol, 0, sl, tp, "ALMA Short");
    }
}

// Custom Gaussian Distribution ALMA Calculation
double CalculateALMA(int shift, int length, double offset, double sigma) {
    double m = offset * (length - 1);
    double s = length / sigma;
    double wSum = 0.0, res = 0.0;
    
    double prices[];
    if(CopyClose(_Symbol, _Period, shift, length, prices) < length) return 0.0;
    
    for(int i = 0; i < length; i++) {
        double w = MathExp(-(MathPow(i - m, 2)) / (2 * s * s));
        res += prices[i] * w; // CopyClose defaults to oldest -> newest alignment
        wSum += w;
    }
    return wSum > 0 ? res / wSum : 0.0;
}

bool IsNewBar() {
    static datetime lastBar = 0;
    datetime currBar = (datetime)SeriesInfoInteger(_Symbol, _Period, SERIES_LASTBAR_DATE);
    if(lastBar != currBar) {
        lastBar = currBar;
        return true;
    }
    return false;
}
Post Reply