Inti dari strategi ini adalah menggunakan crossover rata-rata bergerak eksponensial sebagai sinyal perdagangan, dikombinasikan dengan trailing stop loss dan persentase stop loss untuk mengunci keuntungan dan mengendalikan risiko.
Menghitung EMA cepat dan EMA lambat, dengan periode EMA cepat adalah 20 hari dan periode EMA lambat adalah 50 hari.
Setelah masuk, atur stop loss trailing berdasarkan arah holding, misalnya 7% untuk posisi long dan 7% untuk posisi short.
Pada saat yang sama, tetapkan harga stop loss berdasarkan harga masuk dan arah kepemilikan, misalnya 2% di bawah harga masuk untuk perdagangan panjang dan 2% di atas harga masuk untuk perdagangan pendek.
Bandingkan harga stop trailing dan harga stop loss, gunakan yang lebih dekat dengan harga pasar sebagai stop loss akhir untuk perdagangan ini, kirimkan perintah stop loss.
Sederhana dan mudah untuk menerapkan sinyal perdagangan rata-rata bergerak.
Mengikuti stop loss mengunci keuntungan sejauh mungkin, sementara menghindari kerugian yang tidak perlu dari sinyal palsu.
Persentase stop loss intuitif dan mudah disesuaikan untuk mengontrol kerugian maksimum per perdagangan.
Menggabungkan trailing stop dan stop tetap kedua kunci dalam keuntungan dan mengontrol risiko.
Rata-rata bergerak dapat menghasilkan sinyal palsu dengan mudah, menambahkan filter lebih lanjut seperti volume.
Trailing berhenti kadang-kadang memicu terlalu awal, relaksasi persentase trailing sedikit.
Pengaturan stop loss tetap yang tidak benar bisa terlalu agresif atau konservatif, perlu menguji dan menyesuaikan parameter persentase.
Mekanis stop loss exit bisa kehilangan peluang pembalikan pasar, menggabungkan indikator teknis untuk menilai stop trigger.
Cobalah kombinasi EMA yang berbeda untuk menemukan keseimbangan yang optimal.
Tambahkan indikator seperti volume untuk menyaring sinyal palsu.
Uji lebih banyak saham untuk menemukan persentase stop loss yang tepat.
Cobalah stop adaptif yang menyesuaikan dengan kondisi pasar.
Sertakan indikator seperti RSI untuk menentukan waktu stop loss.
Strategi ini mengintegrasikan sinyal perdagangan rata-rata bergerak, trailing stop dan stop persentase. Melalui optimasi parameter, dapat mencapai keuntungan yang stabil dengan pengendalian risiko yang ketat di berbagai saham dan komoditas, yang layak untuk diteliti dan terus ditingkatkan untuk pedagang kuantitas.
/*backtest start: 2023-12-26 00:00:00 end: 2024-01-02 00:00:00 period: 10m basePeriod: 1m 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/ // © wouterpruym1828 //@version=5 strategy(title=" Combining Trailing Stop and Stop loss (% of instrument price)", overlay=true, pyramiding=1, shorttitle="TSL&SL%") //INDICATOR SECTION // Indicator Input options+ i_FastEMA = input.int(title = "Fast EMA period", minval = 0, defval = 20) i_SlowEMA = input.int(title = "Slow EMA period", minval = 0, defval = 50) // Calculate moving averages fastEMA = ta.ema(close, i_FastEMA) slowEMA = ta.ema(close, i_SlowEMA) // Plot moving averages plot(fastEMA, title="Fast SMA", color=color.blue) plot(slowEMA, title="Slow SMA", color=color.orange) //STRATEGY SECTION // Calculate trading conditions buy = ta.crossover(fastEMA, slowEMA) sell = ta.crossunder(fastEMA, slowEMA) // STEP 1: // Configure trail stop loss level with input options (optional) longTrailPerc = input.float(title="Long Trailing Stop (%)", minval=0.0, step=0.1, defval=7) * 0.01 shortTrailPerc = input.float(title="Short Trailing Stop (%)", minval=0.0, step=0.1, defval=7) * 0.01 //Configure stop loss level with input options (optional) longStopPerc = input.float(title="Long Stop Loss (%)", minval=0.0, step=0.1, defval=2)*0.01 shortStopPerc = input.float(title="Short Stop Loss (%)", minval=0.0, step=0.1, defval=2)*0.01 // STEP 2: // Determine trail stop loss prices longTrailPrice = 0.0, shortTrailPrice = 0.0 longTrailPrice := if (strategy.position_size > 0) stopValue = high * (1 - longTrailPerc) math.max(stopValue, longTrailPrice[1]) else 0 shortTrailPrice := if (strategy.position_size < 0) stopValue = low * (1 + shortTrailPerc) math.min(stopValue, shortTrailPrice[1]) else 999999 // Determine stop loss prices entryPrice = 0.0 entryPrice := strategy.opentrades.entry_price(strategy.opentrades - 1) longLossPrice = entryPrice * (1 - longStopPerc) shortLossPrice = entryPrice * (1 + shortStopPerc) // Plot stop loss values for confirmation plot(series=(strategy.position_size > 0) ? longTrailPrice : na, color=color.fuchsia, style=plot.style_cross, linewidth=2, title="Long Trail Stop") plot(series=(strategy.position_size < 0) ? shortTrailPrice : na, color=color.fuchsia, style=plot.style_cross, linewidth=2, title="Short Trail Stop") plot(series=(strategy.position_size > 0) ? longLossPrice : na, color=color.olive, style=plot.style_cross, linewidth=2, title="Long Stop Loss") plot(series=(strategy.position_size < 0) ? shortLossPrice : na, color=color.olive, style=plot.style_cross, linewidth=2, title="Short Stop Loss") // Submit entry orders if (buy) strategy.entry("Buy", strategy.long) if (sell) strategy.entry("Sell", strategy.short) //Evaluating trailing stop or stop loss to use longStopPrice = longTrailPrice < longLossPrice ? longLossPrice : longTrailPrice shortStopPrice = shortTrailPrice > shortLossPrice ? shortLossPrice : shortTrailPrice // STEP 3: // Submit exit orders for stop price if (strategy.position_size > 0) strategy.exit(id="Buy Stop", stop=longStopPrice) if (strategy.position_size < 0) strategy.exit(id="Sell Stop", stop=shortStopPrice)