Strategi ini mengintegrasikan sinyal reversi rata-rata dasar, filter volatilitas ATR, dan filter tren HMA untuk menghasilkan sinyal perdagangan yang kuat untuk strategi perdagangan kuantitatif.
Strategi ini menggunakan rata-rata bergerak 37-periode sebagai garis dasar. Ketika harga keluar ke atas dari garis dasar ini, itu menghasilkan sinyal beli, dan ketika rusak dari atas, itu menghasilkan sinyal jual. Untuk menghindari sinyal palsu, strategi ini mengharuskan harga untuk bergerak melampaui volatilitas 2xATR setelah menembus garis dasar untuk mengkonfirmasi keabsahan sinyal. Juga, strategi ini menggunakan HMA 11-periode untuk menilai tren utama.
Untuk mengambil keuntungan, strategi ini mendukung menggunakan satu atau beberapa (dua atau tiga) mengambil tingkat keuntungan. untuk stop loss, itu hanya mengambil garis band atas dan bawah sebagai SL untuk posisi panjang dan pendek.
Dibandingkan dengan strategi breakout rata-rata bergerak sederhana, strategi ini menambahkan filter volatilitas ATR yang menghilangkan banyak sinyal yang tidak valid. Ini selaras dengan baik dengan teknik breakout pola visual, sehingga mengarah pada tingkat kemenangan yang lebih tinggi.
Risiko utama adalah filter volatilitas ATR dapat menghapus beberapa sinyal yang valid, menyebabkan kegagalan untuk membuka posisi tepat waktu. Juga, penilaian tren HMA tidak sangat signifikan kadang-kadang ketika harga hanya mengalami retracement jangka pendek, bukan pembalikan. Ini dapat menyebabkan stop loss yang tidak perlu. Untuk mengurangi risiko, kita dapat menurunkan parameter filter volatilitas ATR untuk memungkinkan lebih banyak sinyal. Kita juga dapat menyesuaikan parameter periode HMA untuk menggunakan HMA jangka panjang untuk menilai tren utama, mencegah gangguan dari fluktuasi jangka pendek.
Strategi dapat dioptimalkan dalam aspek berikut:
Uji lebih banyak kombinasi parameter untuk menemukan set nilai yang optimal, misalnya, periode dasar, periode ATR, koefisien volatilitas dll.
Tambahkan lebih banyak filter atau osilator untuk menilai kondisi pasar untuk meningkatkan ketahanan model.
Mengoptimalkan parameter untuk mekanisme mengambil keuntungan, menguji lebih banyak tingkat harga dan skema alokasi.
Menggabungkan model pembelajaran mesin untuk menghasilkan sinyal perdagangan yang lebih efektif.
Strategi ini mengintegrasikan sinyal dasar rata-rata bergerak ganda, filter volatilitas ATR dan filter bias tren HMA ke dalam sistem perdagangan kuantitatif yang sangat praktis.
/*backtest start: 2023-01-10 00:00:00 end: 2024-01-16 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/ // © sevencampbell //@version=5 strategy(title="Baseline Cross Qualifier Volatility Strategy with HMA Trend Bias", overlay=true) // --- User Inputs --- // Baseline Inputs baselineLength = input.int(title="Baseline Length", defval=20) baseline = ta.sma(close, baselineLength) // PBCQ Inputs pbcqEnabled = input.bool(title="Post Baseline Cross Qualifier Enabled", defval=true) pbcqBarsAgo = input.int(title="Post Baseline Cross Qualifier Bars Ago", defval=3) // Volatility Inputs atrLength = input.int(title="ATR Length", defval=14) multiplier = input.float(title="Volatility Multiplier", defval=2.0) rangeMultiplier = input.float(title="Volatility Range Multiplier", defval=1.0) qualifierMultiplier = input.float(title="Volatility Qualifier Multiplier", defval=0.5) // Take Profit Inputs takeProfitType = input.string(title="Take Profit Type", options=["1 Take Profit", "2 Take Profits", "3 Take Profits"], defval="1 Take Profit") // HMA Inputs hmaLength = input.int(title="HMA Length", defval=50) // --- Calculations --- // ATR atr = ta.atr(atrLength) // Range Calculation rangeHigh = baseline + rangeMultiplier * atr rangeLow = baseline - rangeMultiplier * atr rangeColor = rangeLow <= close and close <= rangeHigh ? color.yellow : na bgcolor(rangeColor, transp=90) // Qualifier Calculation qualifier = qualifierMultiplier * atr // Dot Calculation isLong = close > baseline and (close - baseline) >= qualifier and close > ta.hma(close, hmaLength) isShort = close < baseline and (baseline - close) >= qualifier and close < ta.hma(close, hmaLength) colorDot = isLong ? color.green : isShort ? color.red : na plot(isLong or isShort ? baseline : na, color=colorDot, style=plot.style_circles, linewidth=3) // --- Strategy Logic --- // PBCQ pbcqValid = not pbcqEnabled or low[pbcqBarsAgo] > baseline // Entry Logic longCondition = isLong and pbcqValid shortCondition = isShort and pbcqValid if (longCondition) strategy.entry("Long", strategy.long) if (shortCondition) strategy.entry("Short", strategy.short) // Exit Logic if (takeProfitType == "1 Take Profit") strategy.exit("TP/SL", "Long", limit=rangeHigh, stop=rangeLow) strategy.exit("TP/SL", "Short", limit=rangeLow, stop=rangeHigh) else if (takeProfitType == "2 Take Profits") strategy.exit("TP1", "Long", qty=strategy.position_size * 0.5, limit=rangeHigh / 2) strategy.exit("TP2", "Long", qty=strategy.position_size * 0.5, limit=rangeHigh) strategy.exit("TP1", "Short", qty=strategy.position_size * 0.5, limit=rangeLow / 2) strategy.exit("TP2", "Short", qty=strategy.position_size * 0.5, limit=rangeLow) else if (takeProfitType == "3 Take Profits") strategy.exit("TP1", "Long", qty=strategy.position_size * 0.5, limit=rangeHigh / 2) strategy.exit("TP2", "Long", qty=strategy.position_size * 0.25, limit=rangeHigh * 0.75) strategy.exit("TP3", "Long", qty=strategy.position_size * 0.25, limit=rangeHigh * 1.5)