RedK SmoothAndLazyMA
"RedK Smooth And Lazy Moving Average (SALMA)" by RedKTrader, MPL-2.0. Ported to FloScript by FloSignals; modifications under MPL-2.0. Original: RedK Smooth And Lazy Moving Average (SALMA) (v3.0), read 2026-10-12T16:17:15.699Z; source language v5.
Licence: Mozilla Public License 2.0 (MPL-2.0) — full text. The source is published with it, modifications included, under the same licence.
RedK Smooth And Lazy Moving Average (SALMA) by RedKTrader, ported from Pine v5. Overlay indicator with 3 plots, alerts and 13 inputs.
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © RedKTrader
// ------------------------------------------------------------------------------------------------
// Original author: RedKTrader
// Original title: RedK Smooth And Lazy Moving Average (SALMA)
// Licence: MPL-2.0 (the header above is the original notice, kept verbatim)
// Pine version: 5
// Fetched: 2026-10-12
// Ported to FloScript by FloSignals; modifications under MPL-2.0.
// Converter: @flosignals/floscript 0.1.0, strict mode, score 100/100
// ------------------------------------------------------------------------------------------------
//@floscript=1
//@version=5
indicator('RedK SmoothAndLazyMA', shorttitle='SALMA v3.0', overlay=true, timeframe='', timeframe_gaps=false)
// Corrects price points within specific StdDev band before calculting a smoothed WMA
price = input(close, 'Source')
length = input.int(10, 'Length', minval=1)
smooth = input.int(3, 'Extra Smooth [1 = None]', minval=1)
mult = input.float(0.3, minval=0.05, maxval=3, step=0.05, title='Width', inline='SD Channel', group='Volatility Filter (SD Channel)')
sd_len = input.int(5, minval=1, title='Length', inline='SD Channel', group='Volatility Filter (SD Channel)')
baseline = ta.wma(price, sd_len)
dev = mult * ta.stdev(price, sd_len)
upper = baseline + dev
lower = baseline - dev
cprice = price > upper ? upper : price < lower ? lower : price
// Uncomment these code lines to expose the base StdDev channel used as volatility filter
//plot (baseline, "Base MA")
//plot(upper, "Upper Band", color=color.green)
//plot(lower, "Lower Band", color=color.red)
REMA = ta.wma(ta.wma(cprice, length), smooth)
c_up = color.new(#33ff00, 0)
c_dn = color.new(#ff1111, 0)
REMA_up = REMA > REMA[1]
plot(REMA, title='SALMA', color=REMA_up ? c_up : c_dn, linewidth=3)
// ======================================================================================================
// add optional MA's - to enable us to track what many other traders are working with
// These MA's will be hidden by default until user exposes them as needed in the Settings
// the below code is based on the built-in MA Ribbon in the TV library - with some modifications
// ======================================================================
f_ma(source, length, mtype) =>
mtype == 'SMA' ? ta.sma(source, length) : mtype == 'EMA' ? ta.ema(source, length) : ta.wma(source, length)
// ======================================================================
gr_ma = 'Optional MA\'s'
t_ma1 = 'MA #1'
t_ma2 = 'MA #2'
show_ma1 = input.bool(false, t_ma1, inline=t_ma1, group=gr_ma)
ma1_type = input.string('SMA', '', options=['SMA', 'EMA', 'WMA'], inline=t_ma1, group=gr_ma)
ma1_source = input.source(close, '', inline=t_ma1, group=gr_ma)
ma1_length = input.int(50, '', minval=1, inline=t_ma1, group=gr_ma)
ma1_color = #9c27b0
ma1 = f_ma(ma1_source, ma1_length, ma1_type)
plot(show_ma1 ? ma1 : na, color=color.new(ma1_color, 0), title=t_ma1, linewidth=1, display=show_ma1 ? display.all : display.none)
show_ma2 = input.bool(false, t_ma2, inline=t_ma2, group=gr_ma)
ma2_type = input.string('SMA', '', options=['SMA', 'EMA', 'WMA'], inline=t_ma2, group=gr_ma)
ma2_source = input.source(close, '', inline=t_ma2, group=gr_ma)
ma2_length = input.int(100, '', minval=1, inline=t_ma2, group=gr_ma)
ma2_color = #1163f6
ma2 = f_ma(ma2_source, ma2_length, ma2_type)
plot(show_ma2 ? ma2 : na, color=color.new(ma2_color, 0), title=t_ma2, linewidth=1, display=show_ma2 ? display.all : display.none)
// ================================================================================================================
// v3: Adding alerts for swing up/down and any swing
// ================================================================================================================
SwingDn = REMA_up[1] and not REMA_up
SwingUp = REMA_up and not REMA_up[1]
alertcondition(SwingUp, ". SALMA Swing Up", "SALMA Swing Up Detected!") // explicit swing up
alertcondition(SwingDn, ".. SALMA Swing Down", "SALMA Swing Down Detected!") // explicit swing down
alertcondition(SwingUp or SwingDn, "... SALMA Swing", "SALMA Swing Detected!") // Detect any swing
This file is under the Mozilla Public License 2.0; it is a port of the original by RedKTrader, with the original licence header kept and the changes made for FloScript noted in the file.
- v2
Library refresh 2026-10-14
- v1
Library refresh 2026-10-12
Disclaimer. Scripts are written and published by members, or ported by FloSignals from open-source originals, and are their authors' own work and opinion. FloSignals does not review them for correctness and nothing in a script is financial advice or a recommendation to buy or sell anything — read the Risk Disclaimer. Posting here is under the Community Rules; a script that is not the poster's to post can be reported as the Copyright & Takedowns page says.

Comments (0)
No comments yet. Members can leave one.