Strategi Penembusan Purata Pergerakan Berganda Berdasarkan Volatiliti ATR dan Sisihan Aliran HMA


Tarikh penciptaan: 2024-01-17 16:37:23 Akhirnya diubah suai: 2024-01-17 16:37:23
Salin: 2 Bilangan klik: 529
1
fokus pada
1617
Pengikut

Strategi Penembusan Purata Pergerakan Berganda Berdasarkan Volatiliti ATR dan Sisihan Aliran HMA

Gambaran keseluruhan

Strategi ini adalah strategi perdagangan kuantitatif yang menggabungkan isyarat penembusan dua garis rata dengan penapisan turun naik ATR dan bias trend HMA. Strategi ini menggunakan isyarat perdagangan yang dibina secara rata dalam dua kitaran yang berbeza, menggabungkan penunjuk turun naik ATR untuk menapis sebahagian daripada isyarat tidak sah, menggunakan HMA untuk menentukan arah trend, untuk mengelakkan operasi berlawanan.

Prinsip Strategi

Strategi menggunakan garis rata-rata dengan panjang 37 kitaran sebagai garis rata-rata rujukan, menghasilkan isyarat beli apabila harga menembusi ke atas dari garis rata-rata di bawahnya, menghasilkan isyarat jual apabila ia menembusi ke bawah. Untuk memfilter isyarat kesalahan, strategi menetapkan harga untuk menembusi garis rata-rata rujukan dan terus bergerak ke arah yang sama setelah lebih dari 2 kali ATR turun naik untuk mengesahkan arahan penjanaan isyarat yang berkesan.

Dalam mod menang, strategi menyokong pilihan untuk menggunakan satu stop atau dua atau tiga stop harga yang berbeza. Untuk mod berhenti, strategi secara langsung di atas dan di bawah garis orbit sebagai stop yang panjang dan pendek.

Analisis kelebihan strategi

Berbanding dengan strategi single even line breakout, strategi ini menambah penapisan ATR yang bergelombang semasa penjanaan isyarat, yang dapat menapis sebahagian besar isyarat yang tidak berkesan, yang sangat selaras dengan strategi bentuk K linear secara visual, dan oleh itu dapat memperoleh kadar kemenangan yang lebih tinggi. Pada masa yang sama, meningkatkan HMA menilai bias trend, mengelakkan penempatan berlawanan, dan dapat mengurangkan kerugian yang tidak perlu.

Analisis risiko dan penyelesaian

Risiko terbesar strategi ini adalah bahawa penapisan ATR yang bergelombang mungkin memadamkan sebahagian daripada isyarat yang berkesan, menyebabkan strategi tidak dapat membuat kedudukan tepat pada masanya. Selain itu, HMA menilai kesan tren besar tidak jelas, kadang-kadang harga hanyalah penyesuaian jangka pendek dan bukan pembalikan tren besar, yang boleh menyebabkan kerugian yang tidak perlu. Untuk mengurangkan risiko di atas, parameter penapisan ATR yang bergelombang dapat dikurangkan dengan sewajarnya, meluaskan julat pergerakan, dan membolehkan lebih banyak isyarat bentuk K dihasilkan melalui arahan pengesahan.

Arah pengoptimuman strategi

Strategi ini boleh dioptimumkan dalam beberapa arah:

  1. Uji lebih banyak jenis kombinasi parameter untuk mencari kombinasi parameter yang optimum. Seperti panjang garis rata-rata asas, kitaran ATR, faktor penapisan yang bergelombang, dan lain-lain adalah parameter yang boleh disesuaikan.

  2. Menambah lebih banyak penapis atau penunjuk osilator untuk menilai keadaan pasaran, meningkatkan lagi kekuatan strategi.

  3. Tetapan parameter untuk mengoptimumkan cara keuntungan. Tetapan titik henti untuk tahap kuantiti dan harga yang berbeza diuji lebih lanjut.

  4. Menerbitkan isyarat dagangan yang lebih cekap dengan menggunakan model pembelajaran mesin.

ringkaskan

Strategi ini mengintegrasikan isyarat teras penembusan garisan dua rata, isyarat tidak berkesan penapisan ATR yang tidak stabil, dan menggunakan HMA untuk menilai kecenderungan besar untuk mengelakkan kedudukan yang bertentangan, merupakan strategi perdagangan kuantitatif yang sangat praktikal. Ruang untuk mengoptimumkan parameter strategi adalah besar, dan kesannya masih mempunyai ruang untuk meningkatkan, yang layak untuk penyelidikan dan pengoptimuman lanjut.

Kod sumber strategi
/*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)