Pelacakan tren rata-rata pergerakan ganda dan strategi penyaringan volatilitas dinamis

EMA TR ATR
Tanggal Pembuatan: 2025-01-17 15:00:37 Akhirnya memodifikasi: 2025-01-17 15:00:37
menyalin: 3 Jumlah klik: 303
1
fokus pada
1617
Pengikut

Pelacakan tren rata-rata pergerakan ganda dan strategi penyaringan volatilitas dinamis

Ringkasan

Strategi ini adalah sistem perdagangan cerdas yang menggabungkan pelacakan tren dan penyaringan volatilitas. Ia mengidentifikasi tren pasar melalui Exponential Moving Average (EMA), menggunakan True Range (TR) dan filter volatilitas dinamis untuk menentukan waktu masuk, dan mengelola risiko dengan mekanisme stop-profit dan stop-loss dinamis berdasarkan volatilitas. Strategi ini mendukung dua mode perdagangan: Scalp dan Swing, yang dapat diubah secara fleksibel sesuai dengan lingkungan pasar dan gaya perdagangan yang berbeda.

Prinsip Strategi

Logika inti dari strategi ini mencakup komponen-komponen kunci berikut:

  1. Identifikasi Tren: Gunakan EMA periode 50 sebagai penyaring tren dan hanya ambil posisi long ketika harga berada di atas EMA dan ambil posisi short ketika harga berada di bawah EMA.
  2. Penyaringan Volatilitas: Menghitung EMA dari Rentang Sejati (TR) dan menggunakan faktor filter yang dapat disesuaikan (default 1,5) untuk menyaring kebisingan pasar.
  3. Kondisi masuk: Dikombinasikan dengan analisis morfologi tiga garis K yang berurutan, pergerakan harga harus terus menerus dan dipercepat.
  4. Take Profit dan Stop Loss: Dalam mode jangka pendek, ditetapkan berdasarkan TR saat ini; dalam mode band, ditetapkan berdasarkan titik tinggi dan rendah sebelumnya untuk mencapai manajemen risiko yang dinamis.

Keunggulan Strategis

  1. Kemampuan beradaptasi yang kuat: Melalui kombinasi penyaringan volatilitas dinamis dan pelacakan tren, ia dapat beradaptasi dengan berbagai lingkungan pasar.
  2. Manajemen risiko yang sempurna: Menyediakan mekanisme stop-profit dan stop-loss yang dinamis untuk dua mode perdagangan, yang dapat dipilih secara fleksibel sesuai dengan karakteristik pasar.
  3. Penyesuaian parameter yang baik: parameter utama seperti koefisien filter, siklus tren, dll. dapat dioptimalkan sesuai dengan karakteristik produk perdagangan.
  4. Efek visualisasi yang baik: Menyediakan tanda sinyal beli dan jual yang jelas serta tampilan posisi stop-profit dan stop-loss untuk memudahkan pemantauan transaksi.

Risiko Strategis

  1. Risiko pembalikan tren: penghentian berturut-turut dapat terjadi pada titik balik tren.
  2. Risiko breakout palsu: Sinyal palsu dapat dipicu ketika volatilitas tiba-tiba meningkat.
  3. Sensitivitas parameter: Pengaturan koefisien filter yang tidak tepat dapat menyebabkan sinyal terlalu banyak atau terlalu sedikit.
  4. Dampak slippage: Di pasar yang cepat, Anda mungkin menghadapi slippage besar, yang dapat memengaruhi kinerja strategi Anda.

Arah optimasi strategi

  1. Tambahkan penyaringan kekuatan tren: Indikator seperti ADX dapat diperkenalkan untuk mengevaluasi kekuatan tren dan meningkatkan efek pelacakan tren.
  2. Optimalkan take-profit dan stop-loss: Pertimbangkan untuk memperkenalkan stop-loss bergerak untuk melindungi lebih banyak keuntungan.
  3. Memperbaiki model perdagangan ayunan: lebih banyak kondisi penilaian khusus perdagangan ayunan dapat ditambahkan untuk meningkatkan kemampuan memegang jangka menengah dan panjang.
  4. Tambahkan analisis volume: Gabungkan perubahan volume untuk mengonfirmasi validitas terobosan.

Meringkaskan

Strategi ini membangun sistem perdagangan lengkap dengan menggabungkan secara organik pelacakan tren, penyaringan volatilitas, dan manajemen risiko dinamis. Keuntungan dari strategi ini adalah sangat mudah beradaptasi dan risikonya terkendali, sekaligus menyediakan ruang besar untuk pengoptimalan. Dengan menetapkan parameter secara wajar dan memilih mode perdagangan yang tepat, strategi dapat mempertahankan kinerja yang stabil di berbagai lingkungan pasar. Disarankan agar pedagang melakukan pengujian ulang dan pengoptimalan parameter yang memadai sebelum penggunaan waktu nyata, dan membuat penyesuaian yang sesuai berdasarkan karakteristik produk perdagangan tertentu.

Kode Sumber Strategi
/*backtest
start: 2024-12-17 00:00:00
end: 2025-01-15 08:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Creativ3mindz

//@version=5
strategy("Scalp Slayer (I)", overlay=true)

// Input Parameters
filterNumber = input.float(1.5, "Filter Number", minval=1.0, maxval=10.0, tooltip="Higher = More aggressive Filter, Lower = Less aggressive")
emaTrendPeriod = input.int(50, "EMA Trend Period", minval=1, tooltip="Period for the EMA used for trend filtering")
lookbackPeriod = input.int(20, "Lookback Period for Highs/Lows", minval=1, tooltip="Period for determining recent highs/lows")
colorTP = input.color(title='Take Profit Color', defval=color.orange)
colorSL = input.color(title='Stop Loss Color', defval=color.red)

// Inputs for visibility
showBuyLabels = input.bool(true, title="Show Buy Labels")
showSellLabels = input.bool(true, title="Show Sell Labels")

// Alert Options
alertOnCondition = input.bool(true, title="Alert on Condition Met", tooltip="Enable to alert when condition is met")

// Trade Mode Toggle
tradeMode = input.bool(false, title="Trade Mode (ON = Swing, OFF = Scalp)", tooltip="Swing-mode you can use your own TP/SL.")

// Calculations
tr = high - low
ema = filterNumber * ta.ema(tr, 50)
trendEma = ta.ema(close, emaTrendPeriod)  // Calculate the EMA for the trend filter

// Highest and lowest high/low within lookback period for swing logic
swingHigh = ta.highest(high, lookbackPeriod)
swingLow = ta.lowest(low, lookbackPeriod)

// Variables to track the entry prices and SL/TP levels
var float entryPriceLong = na
var float entryPriceShort = na
var float targetPriceLong = na
var float targetPriceShort = na
var float stopLossLong = na
var float stopLossShort = na
var bool tradeActive = false

// Buy and Sell Conditions with Trend Filter
buyCondition = close > trendEma and  // Buy only if above the trend EMA
      close[2] > open[2] and close[1] > open[1] and close > open and 
      (math.abs(close[2] - open[2]) > math.abs(close[1] - open[1])) and 
      (math.abs(close - open) > math.abs(close[1] - open[1])) and 
      close > close[1] and close[1] > close[2] and tr > ema

sellCondition = close < trendEma and  // Sell only if below the trend EMA
       close[2] < open[2] and close[1] < open[1] and close < open and 
       (math.abs(close[2] - open[2]) > math.abs(close[1] - open[1])) and 
       (math.abs(close - open) > math.abs(close[1] - open[1])) and 
       close < close[1] and close[1] < close[2] and tr > ema

// Entry Rules
if (buyCondition and not tradeActive)
    entryPriceLong := close  // Track entry price for long position
    stopLossLong := tradeMode ? ta.lowest(low, lookbackPeriod) : swingLow  // Scalping: recent low, Swing: lowest low of lookback period
    targetPriceLong := tradeMode ? close + tr : swingHigh  // Scalping: close + ATR, Swing: highest high of lookback period
    tradeActive := true

if (sellCondition and not tradeActive)
    entryPriceShort := close  // Track entry price for short position
    stopLossShort := tradeMode ? ta.highest(high, lookbackPeriod) : swingHigh  // Scalping: recent high, Swing: highest high of lookback period
    targetPriceShort := tradeMode ? close - tr : swingLow  // Scalping: close - ATR, Swing: lowest low of lookback period
    tradeActive := true

// Take Profit and Stop Loss Logic
signalBuyTPPrint = (not na(entryPriceLong) and close >= targetPriceLong)
signalSellTPPrint = (not na(entryPriceShort) and close <= targetPriceShort)

signalBuySLPrint = (not na(entryPriceLong) and close <= stopLossLong)
signalSellSLPrint = (not na(entryPriceShort) and close >= stopLossShort)

if (signalBuyTPPrint or signalBuySLPrint)
    entryPriceLong := na  // Reset entry price for long position
    targetPriceLong := na  // Reset target price for long position
    stopLossLong := na  // Reset stop-loss for long position
    tradeActive := false

if (signalSellTPPrint or signalSellSLPrint)
    entryPriceShort := na  // Reset entry price for short position
    targetPriceShort := na  // Reset target price for short position
    stopLossShort := na  // Reset stop-loss for short position
    tradeActive := false

// Plot Buy and Sell Labels with Visibility Conditions
plotshape(showBuyLabels and buyCondition, "Buy", shape.labelup, location=location.belowbar, color=color.green, text="BUY", textcolor=color.white, size=size.tiny)
plotshape(showSellLabels and sellCondition, "Sell", shape.labeldown, location=location.abovebar, color=color.red, text="SELL", textcolor=color.white, size=size.tiny)

// Plot Take Profit Flags
plotshape(showBuyLabels and signalBuyTPPrint, title="Take Profit (buys)", text="TP", style=shape.flag, location=location.abovebar, color=colorTP, textcolor=color.white, size=size.tiny)
plotshape(showSellLabels and signalSellTPPrint, title="Take Profit (sells)", text="TP", style=shape.flag, location=location.belowbar, color=colorTP, textcolor=color.white, size=size.tiny)

// Plot Stop Loss "X" Marker
plotshape(showBuyLabels and signalBuySLPrint, title="Stop Loss (buys)", text="X", style=shape.xcross, location=location.belowbar, color=colorSL, textcolor=color.white, size=size.tiny)
plotshape(showSellLabels and signalSellSLPrint, title="Stop Loss (sells)", text="X", style=shape.xcross, location=location.abovebar, color=colorSL, textcolor=color.white, size=size.tiny)

// Alerts

alertcondition(buyCondition and alertOnCondition, title="Buy Alert", message='{"content": "Buy {{ticker}} at {{close}}"}')
alertcondition(sellCondition and alertOnCondition, title="Sell Alert", message='{"content": "Sell {{ticker}} at {{close}}"}')
alertcondition(signalBuyTPPrint and alertOnCondition, title="Buy TP Alert", message='{"content": "Buy TP {{ticker}} at {{close}}"}')
alertcondition(signalSellTPPrint and alertOnCondition, title="Sell TP Alert", message='{"content": "Sell TP {{ticker}} at {{close}}"}')
alertcondition(signalBuySLPrint and alertOnCondition, title="Buy SL Alert", message='{"content": "Buy SL {{ticker}} at {{close}}"}')
alertcondition(signalSellSLPrint and alertOnCondition, title="Sell SL Alert", message='{"content": "Sell SL {{ticker}} at {{close}}"}')

if buyCondition
    strategy.entry("Enter Long", strategy.long)
else if sellCondition
    strategy.entry("Enter Short", strategy.short)