Strategi penyaringan volatilitas adaptif yang digerakkan oleh momentum multi-periode

momentum volatility SMA ATR stdev SPX
Tanggal Pembuatan: 2025-02-24 09:38:10 Akhirnya memodifikasi: 2025-02-24 09:38:10
menyalin: 0 Jumlah klik: 345
2
fokus pada
319
Pengikut

Strategi penyaringan volatilitas adaptif yang digerakkan oleh momentum multi-periode Strategi penyaringan volatilitas adaptif yang digerakkan oleh momentum multi-periode

Ringkasan

Strategi ini adalah sistem perdagangan canggih yang didasarkan pada indikator dinamika multi-siklus dan penyaringan tingkat fluktuasi. Ini membangun sistem penilaian dinamika komprehensif dengan menghitung pergerakan harga selama empat periode waktu 3 bulan, 6 bulan, 9 bulan dan 12 bulan.

Prinsip Strategi

Logika inti dari strategi ini mencakup beberapa elemen kunci berikut:

  1. Penghitungan momentum: Menggunakan metode ((harga saat ini / harga historis -1)) untuk menghitung indikator momentum masing-masing dari 4 periode waktu.
  2. Filter fluktuasi: Perhitungan perbedaan standar dalam tingkat pengembalian harian dan pengolahan tahunan, dengan membandingkannya dengan batas default ((0.5)) untuk memfilter periode fluktuasi tinggi.
  3. Pembuatan sinyal: ketika indikator dinamika komprehensif bergeser dari negatif ke positif dan fluktuasi di bawah nilai ambang menghasilkan sinyal ganda; ketika indikator dinamika bergeser negatif, posisi imbang.
  4. Manajemen risiko: Menggunakan 1% stop loss dan 50% stop loss untuk mengendalikan risiko transaksi tunggal.

Keunggulan Strategis

  1. Analisis dinamika multi-dimensi: Dengan mempertimbangkan dinamika dari beberapa periode waktu secara komprehensif, dapat lebih menyeluruh menilai kekuatan dan keberlanjutan tren harga.
  2. Adaptive oscillation rate filtering: Menghindari sinyal palsu selama periode yang tinggi dengan cara menghitung dan memfilter oscillasi secara dinamis.
  3. Pengendalian risiko yang baik: Pengaturan stop loss dan stop loss yang dapat mengontrol risiko transaksi secara efektif.
  4. Keputusan yang sistematis: Strategi yang sepenuhnya sistematis, menghindari gangguan dari penilaian subjektif.

Risiko Strategis

  1. Risiko terbaliknya tren: Anda mungkin menanggung kerugian besar jika tren yang kuat tiba-tiba terbalik.
  2. Sensitivitas parameter: Efek strategi lebih sensitif terhadap pengaturan parameter seperti siklus momentum, nilai terendah fluktuasi.
  3. Ketergantungan pada kondisi pasar: Sering terjadi sinyal palsu di pasar yang bergejolak.
  4. Efek slippage: Biaya transaksi yang lebih tinggi dapat terjadi ketika pasar tidak memiliki likuiditas.

Arah optimasi strategi

  1. Optimasi parameter dinamis: dapat diperkenalkan mekanisme penyesuaian parameter adaptif, menyesuaikan siklus momentum dan nilai ambang volatilitas sesuai dengan kondisi pasar yang dinamis.
  2. Klasifikasi kondisi pasar: menambahkan modul identifikasi kondisi pasar, dengan pengaturan parameter yang berbeda dalam lingkungan pasar yang berbeda.
  3. Mekanisme konfirmasi sinyal: memperkenalkan indikator teknis tambahan untuk mengkonfirmasi sinyal perdagangan dan meningkatkan stabilitas strategi.
  4. Pengelolaan dana yang optimal: Anda dapat menyesuaikan ukuran kepemilikan berdasarkan dinamika intensitas sinyal, untuk mencapai efisiensi penggunaan dana yang lebih baik.

Meringkaskan

Strategi ini dengan menggabungkan analisis dinamika multi-siklus dan penyaringan tingkat fluktuasi, membangun sistem perdagangan pelacakan tren yang lengkap. Keunggulan utamanya adalah proses pengambilan keputusan yang sistematis dan mekanisme pengendalian risiko yang baik. Meskipun ada beberapa risiko yang melekat, strategi ini masih memiliki ruang untuk perbaikan yang lebih besar melalui arah optimasi yang diusulkan.

Kode Sumber Strategi
/*backtest
start: 2024-02-25 00:00:00
end: 2025-02-22 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"SOL_USDT"}]
*/

//@version=5
strategy("GOATED Long-Only", overlay=true, initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// Strategy parameters
var float VOLATILITY_THRESHOLD = input.float(0.5, "Volatility Threshold", minval=0.1, maxval=1.0, step=0.1)
var int TRADING_DAYS_PER_YEAR = 252
var float SQRT_TRADING_DAYS = math.sqrt(TRADING_DAYS_PER_YEAR)

// Trade parameters
var float STOP_LOSS = input.float(0.05, "Stop Loss %", minval=0.01, maxval=0.20, step=0.01)
var float TAKE_PROFIT = input.float(0.15, "Take Profit %", minval=0.05, maxval=0.50, step=0.01)

// Momentum periods (in trading days)
var int MOMENTUM_3M = input.int(63, "3-Month Momentum Period", minval=20)
var int MOMENTUM_6M = input.int(126, "6-Month Momentum Period", minval=40)
var int MOMENTUM_9M = input.int(189, "9-Month Momentum Period", minval=60)
var int MOMENTUM_12M = input.int(252, "12-Month Momentum Period", minval=80)

// Function to calculate momentum for a specific period
momentum(period) =>
    close / close[period] - 1

// Function to calculate annualized volatility
calcVolatility() =>
    returns = ta.change(close) / close[1]
    stdDev = ta.stdev(returns, TRADING_DAYS_PER_YEAR)
    annualizedVol = stdDev * SQRT_TRADING_DAYS
    annualizedVol

// Calculate individual momentum scores
float mom3m = momentum(MOMENTUM_3M)
float mom6m = momentum(MOMENTUM_6M)
float mom9m = momentum(MOMENTUM_9M)
float mom12m = momentum(MOMENTUM_12M)

// Calculate average momentum score
var int validPeriods = 0
var float totalMomentum = 0.0

validPeriods := 0
totalMomentum := 0.0

if not na(mom3m)
    validPeriods := validPeriods + 1
    totalMomentum := totalMomentum + mom3m

if not na(mom6m)
    validPeriods := validPeriods + 1
    totalMomentum := totalMomentum + mom6m

if not na(mom9m)
    validPeriods := validPeriods + 1
    totalMomentum := totalMomentum + mom9m

if not na(mom12m)
    validPeriods := validPeriods + 1
    totalMomentum := totalMomentum + mom12m

float compositeMomentum = validPeriods > 0 ? totalMomentum / validPeriods : na

// Calculate volatility
float annualizedVolatility = calcVolatility()

// Generate trading signals
var float MOMENTUM_THRESHOLD = input.float(0.0, "Momentum Threshold", minval=-1.0, maxval=1.0, step=0.01)
bool validVolatility = not na(annualizedVolatility) and annualizedVolatility <= VOLATILITY_THRESHOLD
bool validMomentum = not na(compositeMomentum) and compositeMomentum > MOMENTUM_THRESHOLD

// Store previous momentum state
bool prevValidMomentum = nz(validMomentum[1])

// Entry and exit conditions
bool longCondition = validVolatility and validMomentum and not prevValidMomentum
bool exitLongCondition = validVolatility and (not validMomentum) and prevValidMomentum

// Plot signals
plotshape(longCondition, title="Long Entry", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(exitLongCondition, title="Long Exit", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)

// Plot momentum and volatility indicators
plot(compositeMomentum, "Composite Momentum", color=color.blue, linewidth=2)
hline(MOMENTUM_THRESHOLD, "Momentum Threshold", color=color.gray, linestyle=hline.style_dashed)

plot(annualizedVolatility, "Annualized Volatility", color=color.purple, linewidth=1)
hline(VOLATILITY_THRESHOLD, "Volatility Threshold", color=color.gray, linestyle=hline.style_dashed)

// Strategy execution - Long positions
if (longCondition)
    strategy.entry("Long", strategy.long)
    
if (strategy.position_size > 0)
    float longStopLoss = strategy.position_avg_price * (1 - STOP_LOSS)
    float longTakeProfit = strategy.position_avg_price * (1 + TAKE_PROFIT)
    strategy.exit("Exit Long", "Long", stop=longStopLoss, limit=longTakeProfit)
    if (exitLongCondition)
        strategy.close("Long", comment="Signal Exit")