Untitled
unknown
plain_text
a year ago
2.6 kB
14
Indexable
//@version=5
strategy('RSN TREND STR', overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10)
// Length parameter
length = input.int(20, title="Length")
// Source input
src = input(close, title="Source")
// Exponent parameter with step of 0.1
powValue = input.float(2.0, title="Pow Value", step=0.1, minval=0.1, maxval=10)
// Fixed percentage change threshold (0.1%)
percentageThreshold = 0.001 // Hardcoded to 0.1%
// Bar color parameters
showBarColor = input(true, title="Bar Color")
upBarColor = input.color(color.green, title="Up Bar Color")
downBarColor = input.color(color.red, title="Down Bar Color")
//--dS--
ama = 0.0
hh = math.max(math.sign(ta.change(ta.highest(length))), 0)
ll = math.max(math.sign(ta.change(ta.lowest(length)) * -1), 0)
// Calculate tc with user-adjustable powValue
tc = math.pow(ta.sma(hh or ll ? 1 : 0, length), powValue)
// AMA calculation
ama := nz(ama[1] + tc * (src - ama[1]), src)
// Define global variable for line color
var color lineColor = na
// Variable to check uptrend or downtrend
var bool isUptrend = na
// Calculate price change percentage
priceChangePercent = (ama - ama[1]) / ama[1]
// Change line color based on price change percentage
if priceChangePercent > percentageThreshold
if isUptrend != true
lineColor := color.green // Change color when transitioning from downtrend to uptrend
isUptrend := true
else if priceChangePercent < -percentageThreshold
if isUptrend != false
lineColor := color.red // Change color when transitioning from uptrend to downtrend
isUptrend := false
else
lineColor := lineColor[1] // Keep the previous color during sideways movement
// Plot the AMA
plot(ama, 'Plot', color=lineColor, linewidth=2)
// Set bar colors based on trend
barcolor(showBarColor ? (isUptrend ? upBarColor : downBarColor) : na)
// Strategy entry and exit conditions
if isUptrend
strategy.entry("Buy", strategy.long)
if not isUptrend
strategy.close("Buy")
// Start and end date for the strategy
startDate = timestamp(2020, 1, 1, 0, 0)
endDate = timestamp(2025, 1, 1, 0, 0)
if (time < startDate) or (time > endDate)
strategy.cancel_all()
// Take Profit based on a user-adjustable value (in steps of 0.1)
takeProfitPercent = input.float(1.0, title="Take Profit Percentage", step=0.1) / 100
// Take profit logic
takeProfitLevel = strategy.position_avg_price * (1 + takeProfitPercent)
if (strategy.position_size > 0) and (close >= takeProfitLevel)
strategy.close("Buy", comment="Take Profit")
Editor is loading...
Leave a Comment