Kualifikasi Cross Baseline ATR Volatility & HMA Trend Bias Mean Reversal Strategy

Penulis:ChaoZhang, Tanggal: 2024-01-17 16:37:23
Tag:

img

Gambaran umum

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.

Logika Strategi

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.

Analisis Keuntungan

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 & Solusi

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.

Arahan Optimasi

Strategi dapat dioptimalkan dalam aspek berikut:

  1. Uji lebih banyak kombinasi parameter untuk menemukan set nilai yang optimal, misalnya, periode dasar, periode ATR, koefisien volatilitas dll.

  2. Tambahkan lebih banyak filter atau osilator untuk menilai kondisi pasar untuk meningkatkan ketahanan model.

  3. Mengoptimalkan parameter untuk mekanisme mengambil keuntungan, menguji lebih banyak tingkat harga dan skema alokasi.

  4. Menggabungkan model pembelajaran mesin untuk menghasilkan sinyal perdagangan yang lebih efektif.

Kesimpulan

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)


Lebih banyak