
Strategi ini adalah strategi perdagangan berdasarkan prinsip persilangan indeks rata-rata. Ia menggabungkan penunjuk RSI dan penapis rata-rata, membentuk satu set yang lebih lengkap trend-mengikuti dan berbalik sistem perdagangan.
Strategi ini secara keseluruhannya adalah untuk membina sistem perdagangan purata bergerak indeks yang lebih lengkap. Ia berdasarkan mendapatkan isyarat perdagangan, pengenalan tambahan RSI untuk mengesahkan pelbagai lapisan. Ini pasti dapat meningkatkan kualiti isyarat dengan ketara, dan merupakan strategi yang patut dipelajari dan dioptimumkan.
/*backtest
start: 2023-02-13 00:00:00
end: 2024-02-19 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © QuantTherapy
//@version=4
strategy("B-Xtrender [Backtest Edition] @QuantTherapy")
i_short_l1 = input(5 , title="[Short] L1")
i_short_l2 = input(20, title="[Short] L2")
i_short_l3 = input(15, title="[Short] L3")
i_long_l1 = input(20, title="[Long] L1")
i_long_l2 = input(15, title="[Long] L2")
i_ma_use = input(true , title="[MA Filter] Yes/No" )
i_ma_len = input(200 , title="[MA Filter] length" )
i_ma_type = input("EMA", title="[MA Filter] type", options = ["SMA", "EMA"])
shortTermXtrender = rsi( ema(close, i_short_l1) - ema(close, i_short_l2), i_short_l3 ) - 50
longTermXtrender = rsi( ema(close, i_long_l1), i_long_l2 ) - 50
shortXtrenderCol = shortTermXtrender > 0 ? shortTermXtrender > shortTermXtrender[1] ? color.lime : #228B22 : shortTermXtrender > shortTermXtrender[1] ? color.red : #8B0000
plot(shortTermXtrender, color=shortXtrenderCol, style=plot.style_columns, linewidth=1, title="B-Xtrender Osc. - Histogram", transp = 40)
longXtrenderCol = longTermXtrender> 0 ? longTermXtrender > longTermXtrender[1] ? color.lime : #228B22 : longTermXtrender > longTermXtrender[1] ? color.red : #8B0000
macollongXtrenderCol = longTermXtrender > longTermXtrender[1] ? color.lime : color.red
plot(longTermXtrender , color=longXtrenderCol, style=plot.style_columns, linewidth=2, title="B-Xtrender Trend - Histogram", transp = 90)
plot(longTermXtrender , color=#000000 , style=plot.style_line, linewidth=5, title="B-Xtrender Trend - Line", transp = 100)
plot(longTermXtrender , color=macollongXtrenderCol, style=plot.style_line, linewidth=3, title="B-Xtrender Trend - Line", transp = 100)
// --- Initialize MA Filter
ma = i_ma_type == "EMA" ? ema(close, i_ma_len) : sma(close, i_ma_len)
maFilterLong = true
maFilterShort = true
if i_ma_use
maFilterLong := close > ma ? true : false
maFilterShort := close < ma ? true : false
long = shortTermXtrender > 0 and longTermXtrender > 0 and maFilterLong
closeLong = shortTermXtrender < 0 or longTermXtrender < 0
short = shortTermXtrender < 0 and longTermXtrender < 0 and maFilterShort
closeShort = shortTermXtrender > 0 or longTermXtrender > 0
plotshape(long[1]==true and long[2]==false ? 0 : na , location=location.absolute, style=shape.labelup , color=color.lime, size=size.small, transp=10)
plotshape(short[1]==true and short[2]==false ? 0 : na, location=location.absolute, style=shape.labeldown, color=color.red , size=size.small, transp=10)
plotshape(closeLong[1]==true and closeLong[2]==false
or closeShort[1]==true and closeShort[2]==false ? 0 : na, location=location.absolute, style=shape.circle, color=color.orange , size=size.small)
i_perc = input(defval = 20.0, title = "[TSL-%] Percent" , minval = 0.1 )
i_src = close // constant for calculation
sl_val = i_src * i_perc / 100
strategy.entry("Long", strategy.long, when = long )
strategy.close("Long", when = closeLong)
strategy.entry("Short", strategy.short, when = short)
strategy.close("Short", when = closeShort)
// Calculate SL
longStopPrice = 0.0, shortStopPrice = 0.0
longStopPrice := if (strategy.position_size > 0)
stopValue = close - sl_val
max(stopValue, longStopPrice[1])
else
0
shortStopPrice := if (strategy.position_size < 0)
stopValue = close + sl_val
min(stopValue, shortStopPrice[1])
else
syminfo.mintick*1000000
// For TSL Visualisation on Chart
// plot(series=(strategy.position_size > 0) ? longStopPrice : na,
// color=color.fuchsia, style = plot.style_circles,
// linewidth=1, title="Long Trail Stop")
// plot(series=(strategy.position_size < 0) ? shortStopPrice : na,
// color=color.fuchsia, style = plot.style_circles,
// linewidth=1, title="Short Trail Stop")
if (strategy.position_size > 0)
strategy.exit(id="TSL Long", stop=longStopPrice)
if (strategy.position_size < 0)
strategy.exit(id="TSL Short", stop=shortStopPrice)