
Strategi ini mewujudkan operasi penembusan yang bernasib baik dengan membina saluran dua segi tiga, digabungkan dengan petunjuk trend super untuk menentukan arah penembusan harga. Strategi ini digabungkan dengan EMA untuk menentukan trend keseluruhan pasaran, dan mengelakkan perdagangan yang tidak berkesan dalam keadaan gegaran.
Membina petanda trend super dengan tiga parameter yang berbeza untuk menentukan arah trend harga dalam jangka pendek, sederhana dan jangka panjang.
Menentukan sama ada harga telah menembusi saluran naik atau turun, sebagai isyarat ListEntry dan Exit, melalui saluran dua segi tiga.
Gabungan 233 kitaran EMA menilai arah trend keseluruhan, harga perlu melakukan lebih banyak untuk menembusi saluran naik di pasaran EMA berbilang, dan kosong untuk menembusi saluran turun di pasaran kosong.
Untuk menentukan tanda berhenti dan hentikan dengan menggabungkan tiga indikator super trend. Apabila dua atau lebih indikator berubah warna, hentikan atau hentikan.
Saluran dua segitiga digabungkan dengan penilaian kitaran masa yang berlainan untuk menangkap penembusan trend secara tepat.
Syarat penyaringan pelbagai peringkat dapat mengelakkan transaksi yang tidak sah dan meningkatkan peluang kemenangan.
Tracking Stop Loss Dinamika, mengurangkan risiko penarikan balik.
Tetapan parameter yang mudah dan mudah difahami.
Dalam pasaran goyah kitaran besar, mungkin terdapat keadaan yang sering membuka kedudukan dan kemudian dihentikan. Parameter kitaran ATR boleh disesuaikan dengan sewajarnya untuk mengurangkan frekuensi pembukaan kedudukan.
Tempoh EMA yang terlalu pendek tidak dapat menentukan trend keseluruhan, dan terlalu lama tidak dapat dikesan. Ujian disyorkan untuk menentukan parameter EMA yang optimum.
Tahap Stop Loss tidak dapat mengikuti pergerakan pergerakan pasaran secara dinamik dan memerlukan intervensi manusia. Pada masa akan datang, anda boleh mempertimbangkan untuk menyesuaikan jarak Stop Loss secara dinamik dengan ATR.
Strategi penembusan dua segitiga Moonlight Tracker dengan menggabungkan indikator trend super dengan saluran dua segitiga, dapat menangkap penembusan yang kuat dengan tepat. Pada masa yang sama, mekanisme penapisan bertingkat dapat menapis isyarat yang tidak berkesan, dengan kemenangan yang lebih tinggi. Tetapan parameter yang mudah juga memudahkan penggunaannya.
/*backtest
start: 2023-11-13 00:00:00
end: 2023-11-17 04:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// @version=5
// author=theasgard and moonshot-indicator (ms)
// year 2021
//
// This is a well knowen strategy by using 3 different Supertrends and a trend-defining EMA,
// feel free to play around with the settings, a backtest on 8h ETHUSDT pair brought some good results using
// the 233EMA and investing 75% of a 10k start capital
//
// the idea is to have at least 2 supertrnds going green above the trend-EMA to go long and exit by turning
// 2 supertrends red (idea: 1 supertrend in red could initialize a take profit)
// shorts work vice versa
// The EMA shows in green for uptrends and in red for downtrends, if it is blue no Signal will be taken because
// the 3 supertrends are not all above or below the trendline(EMA)
strategy("ms hypertrender", overlay=true)
// set up 3 supertrendlines and colour the direction up/down
atrPeriod1 = input(10, "ATR Length 1")
factor1 = input.float(1.0, "ATR Factor 1", step = 0.01)
[supertrend1, direction1] = ta.supertrend(factor1, atrPeriod1)
upTrend1 = plot(direction1 < 0 ? supertrend1 : na, "Up Trend 1", color = color.green, style=plot.style_linebr)
downTrend1 = plot(direction1 < 0? na : supertrend1, "Down Trend 1", color = color.red, style=plot.style_linebr)
atrPeriod2 = input(11, "ATR Length 2")
factor2 = input.float(2.0, "ATR Factor 2", step = 0.01)
[supertrend2, direction2] = ta.supertrend(factor2, atrPeriod2)
upTrend2 = plot(direction2 < 0 ? supertrend2 : na, "Up Trend 2", color = color.green, style=plot.style_linebr)
downTrend2 = plot(direction2 < 0? na : supertrend2, "Down Trend 2", color = color.red, style=plot.style_linebr)
atrPeriod3 = input(12, "ATR Length 3")
factor3 = input.float(3.0, "ATR Factor 3", step = 0.01)
[supertrend3, direction3] = ta.supertrend(factor3, atrPeriod3)
upTrend3 = plot(direction3 < 0 ? supertrend3 : na, "Up Trend 1", color = color.green, style=plot.style_linebr)
downTrend3 = plot(direction3 < 0? na : supertrend3, "Down Trend 1", color = color.red, style=plot.style_linebr)
//set up the trend dividing EMA and color uptrend nutreal downtrend
len = input.int(233, minval=1, title="Trend-EMA Length")
src = input(close, title="Source")
offset = input.int(title="Offset", defval=0, minval=-500, maxval=500)
//general Bull or Bear Trend? Visualized by ema
ematrend = ta.ema(src, len)
generaluptrend = supertrend1 > ematrend and supertrend2 > ematrend and supertrend3 > ematrend
generaldowntrend = supertrend1 < ematrend and supertrend2 < ematrend and supertrend3 < ematrend
emacolor = if generaluptrend
color.green
else if generaldowntrend
color.red
else
color.blue
plot(ematrend, title="EMA", color=emacolor, offset=offset)
// Bullish? min 2 supertrends green
bullish = (direction1 < 0 and direction2 < 0) or (direction1 < 0 and direction3 < 0) or (direction2 < 0 and direction3 < 0) and generaluptrend
extremebullish = direction1 < 0 and direction2 < 0 and direction3 < 0 and generaluptrend //all 3 green
// Bearish? min 2 supertrends red
bearish = (direction1 > 0 and direction2 > 0) or (direction1 > 0 and direction3 > 0) or (direction2 > 0 and direction3 > 0) and generaldowntrend
extremebearish = direction1 > 0 and direction2 > 0 and direction3 > 0 and generaldowntrend //all 3 red
// Open Long
//plotchar(((bullish and not bullish[1]) or (extremebullish and not extremebullish[1])) and (emacolor==color.green)? close : na, title = 'Start Long', char='▲', color = #80eb34, location = location.belowbar, size = size.small)
// TP 10% Long
TP10long = ((generaluptrend and bullish[1]) or (generaluptrend and extremebullish[1])) and (direction1 > 0 or direction2 > 0 or direction3 > 0)
//plotchar(TP10long and not TP10long[1]? close : na, title = 'TP on Long', char='┼', color = #ffd000, location = location.abovebar, size = size.tiny)
// Exit Long
//plotchar(extremebearish and not extremebearish[1] or bearish and not bearish[1]? close : na, title = 'Close all Longs', char='Ꭓ', color = #ff0037, location = location.abovebar, size = size.tiny)
// Open Short
//plotchar(((bearish and not bearish[1]) or (extremebearish and not extremebearish[1])) and (emacolor==color.red)? close : na, title = 'Start Short', char='▼', color = #0547e3, location = location.abovebar, size = size.small)
// TP 10% Short
TP10short = ((generaldowntrend and bearish[1]) or (generaldowntrend and extremebearish[1])) and (direction1 < 0 or direction2 < 0 or direction3 < 0)
//plotchar(TP10short and not TP10short[1]? close : na, title = 'TP on Short', char='┼', color = #ffd000, location = location.belowbar, size = size.tiny)
// Exit Short
//plotchar(extremebullish and not extremebullish[1] or bullish and not bullish[1]? close : na, title = 'Close all Shorts', char='Ꭓ', color = #ff0037, location = location.belowbar, size = size.tiny)
// Set stop loss level with input options (optional)
longLossPerc = input.float(title="Long Stop Loss (%)",
minval=0.0, step=0.1, defval=1) * 0.01
shortLossPerc = input.float(title="Short Stop Loss (%)",
minval=0.0, step=0.1, defval=1) * 0.01
// Determine stop loss price
longStopPrice = strategy.position_avg_price * (1 - longLossPerc)
shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc)
openlong = (((bullish and not bullish[1]) or (extremebullish and not extremebullish[1])) and (emacolor==color.green))
openshort = (((bearish and not bearish[1]) or (extremebearish and not extremebearish[1])) and (emacolor==color.red))
exitlong = (extremebearish and not extremebearish[1] or bearish and not bearish[1]) or TP10long
exitshort = (extremebullish and not extremebullish[1] or bullish and not bullish[1]) or TP10short
strategy.entry("buy", strategy.long, when=openlong)
strategy.entry("sell", strategy.short, when=openshort)
strategy.close("buy", when=exitlong)
strategy.close("sell", when=exitshort)
// Submit exit orders based on calculated stop loss price
if (strategy.position_size > 0)
strategy.exit(id="Long Stop", stop=longStopPrice)
if (strategy.position_size < 0)
strategy.exit(id="Short Stop", stop=shortStopPrice)