
Strategi ini membuat keputusan dagangan berdasarkan kemerosotan dan harga MA berbanding dengan kedudukan MA. Strategi ini membeli apabila kemerosotan MA lebih besar daripada penurunan kemerosotan minimum dan harga lebih tinggi daripada MA. Strategi ini juga menggunakan Trailing Stop Loss untuk menguruskan risiko dan memasuki semula dalam keadaan tertentu. Strategi ini bertujuan untuk menangkap peluang dalam trend menaik, sambil mengoptimumkan keuntungan dan risiko melalui mekanisme berhenti dan masuk semula yang dinamik.
Strategi ini menilai trend melalui kemerosotan rata-rata bergerak dan kedudukan harga berbanding rata-rata bergerak, dan menggunakan mekanisme untuk mengesan berhenti dan masuk semula dengan syarat untuk menguruskan perdagangan. Kelebihan strategi adalah keupayaan untuk mengikuti trend, perlindungan berhenti dan peluang masuk semula secara dinamik. Walau bagaimanapun, strategi ini juga mempunyai isu-isu yang berpotensi seperti sensitiviti parameter, kesilapan pengenalan trend, frekuensi berhenti dan risiko masuk semula.
/*backtest
start: 2024-05-01 00:00:00
end: 2024-05-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("MA Incline Strategy with Trailing Stop-Loss and Conditional Re-Entry", overlay=true, calc_on_every_tick=true)
// Input parameters
windowSize = input.int(10, title="Window Size")
maLength = input.int(150, title="Moving Average Length")
minSlope = input.float(0.001, title="Minimum Slope")
trailingStopPercentage = input.float(2.8, title="Trailing Stop Percentage (%)") / 100
reEntryPercentage = input.float(4.2, title="Re-Entry Percentage Above MA (%)") / 100
// Calculate the moving average
ma = ta.sma(close, maLength)
// Calculate the slope of the moving average over the window size
previousMa = ta.sma(close[windowSize], maLength)
slopeMa = (ma - previousMa) / windowSize
// Check conditions
isAboveMinSlope = slopeMa > minSlope
isAboveMa = close > ma
// Variables to track stop loss and re-entry condition
var bool stopLossOccurred = false
var float trailStopPrice = na
// Buy condition
buyCondition = isAboveMinSlope and isAboveMa and ((not stopLossOccurred) or (stopLossOccurred and low < ma * (1 + reEntryPercentage)))
// Execute strategy
if (buyCondition and strategy.opentrades == 0)
if (stopLossOccurred and close < ma * (1 + reEntryPercentage))
strategy.entry("Long", strategy.long)
stopLossOccurred := false
else if (not stopLossOccurred)
strategy.entry("Long", strategy.long)
// Trailing stop-loss
if (strategy.opentrades == 1)
// Calculate the trailing stop price
trailStopPrice := close * (1 - trailingStopPercentage)
// Use the built-in strategy.exit function with the trailing stop
strategy.exit("Trail Stop", "Long", stop=close * (1 - trailingStopPercentage))
// Exit condition
sellCondition = ta.crossunder(close, ma)
if (sellCondition and strategy.opentrades == 1)
strategy.close("Long")
// Check if stop loss occurred
if (strategy.closedtrades > 0)
lastExitPrice = strategy.closedtrades.exit_price(strategy.closedtrades - 1)
if (not na(trailStopPrice) and lastExitPrice <= trailStopPrice)
stopLossOccurred := true
// Reset stop loss flag if the price crosses below the MA
if (ta.crossunder(close, ma))
stopLossOccurred := false