Strategi penapisan turun naik adaptif dipacu momentum berbilang tempoh

momentum volatility SMA ATR stdev SPX
Tarikh penciptaan: 2025-02-24 09:38:10 Akhirnya diubah suai: 2025-02-24 09:38:10
Salin: 0 Bilangan klik: 345
2
fokus pada
319
Pengikut

Strategi penapisan turun naik adaptif dipacu momentum berbilang tempoh Strategi penapisan turun naik adaptif dipacu momentum berbilang tempoh

Gambaran keseluruhan

Strategi ini adalah sistem perdagangan yang lebih tinggi berdasarkan indikator pergerakan berkala dan penapisan kadar turun naik. Ia membina sistem penilaian dinamika yang komprehensif dengan mengira pergerakan harga dalam empat kitaran masa 3 bulan, 6 bulan, 9 bulan dan 12 bulan.

Prinsip Strategi

Logik teras strategi ini merangkumi beberapa elemen utama:

  1. Pengiraan momentum: Menggunakan kaedah ((harga semasa / harga sejarah-1) untuk mengira indikator momentum 4 tempoh masa.
  2. Penapisan kadar turun naik: Pengiraan perbezaan piawai dalam kadar pulangan harian dan penanganan tahunan, dengan membandingkannya dengan had pra-set ((0.5) untuk penapisan kadar turun naik yang tinggi semasa。
  3. Penjanaan isyarat: menghasilkan isyarat ganda apabila indikator dinamik komprehensif bertukar negatif dan kadar turun naiknya lebih rendah daripada paras paras paras paras; apabila indikator dinamik bertukar negatif, ia berada di kedudukan rata.
  4. Pengurusan Risiko: Menggunakan 1% Stop Loss dan 50% Stop Stop untuk mengawal risiko perdagangan tunggal.

Kelebihan Strategik

  1. Analisis dinamika pelbagai dimensi: Dengan mempertimbangkan dinamika dalam pelbagai tempoh masa, kekuatan dan kesinambungan trend harga dapat dinilai secara lebih menyeluruh.
  2. Penapisan kadar lonjakan yang beradaptasi: Dengan pengiraan dan penapisan kadar lonjakan secara dinamik, isyarat palsu yang berlaku semasa lonjakan tinggi dapat dielakkan.
  3. Kawalan risiko yang baik: Ia menyediakan nilai hentian dan penangguhan yang dapat mengawal risiko perdagangan tunggal dengan berkesan.
  4. Keputusan sistematik: Strategi sepenuhnya sistematik, mengelakkan gangguan dari penilaian subjektif.

Risiko Strategik

  1. Risiko trend reversal: Jika trend yang kuat tiba-tiba berbalik, anda mungkin menanggung kerugian yang lebih besar.
  2. Sensitiviti parameter: Kesan strategi lebih sensitif kepada tetapan parameter seperti kitaran tenaga, nilai terhad kadar turun naik.
  3. Kepercayaan kepada keadaan pasaran: Isyarat palsu mungkin berlaku dalam pasaran yang bergolak.
  4. Kesan titik tergelincir: Kos dagangan yang tinggi mungkin berlaku apabila pasaran kurang cair.

Arah pengoptimuman strategi

  1. Pengoptimuman parameter dinamik: mekanisme penyesuaian parameter adaptif boleh diperkenalkan, menyesuaikan kitaran dinamik dan nilai terhad kadar turun naik mengikut keadaan pasaran.
  2. Klasifikasi keadaan pasaran: menambah modul pengenalan keadaan pasaran, menggunakan parameter yang berbeza dalam keadaan pasaran yang berbeza.
  3. Mekanisme pengesahan isyarat: pengenalan penunjuk teknikal tambahan untuk mengesahkan isyarat perdagangan, meningkatkan kestabilan strategi.
  4. Pengurusan dana yang dioptimumkan: anda boleh menyesuaikan saiz pegangan mengikut dinamik kekuatan isyarat, untuk mencapai kecekapan penggunaan dana yang lebih baik.

ringkaskan

Strategi ini menggabungkan analisis dinamik pelbagai kitaran dan penapisan kadar turun naik untuk membina sistem perdagangan trend yang lengkap. Kelebihan utamanya adalah proses membuat keputusan yang sistematik dan mekanisme kawalan risiko yang baik. Walaupun terdapat beberapa risiko yang wujud, strategi ini masih mempunyai ruang untuk penambahbaikan yang besar melalui arah pengoptimuman yang dikemukakan.

Kod 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")