
Strategi gabungan pengoptimuman trend dinamik adalah strategi perdagangan kuantitatif garis panjang dan tengah yang menggabungkan faktor dinamik dan faktor trend untuk menghasilkan isyarat membeli dan menjual melalui kombinasi purata bergerak indeks, purata bergerak, jumlah transaksi dan indikator kecenderungan. Strategi ini dioptimumkan untuk perdagangan T+1 dan hanya sesuai untuk melakukan pelbagai arah. Pengoptimuman juga sesuai untuk pasaran saham antarabangsa.
Strategi ini menggunakan purata bergerak mudah 6 hari dan purata bergerak mudah 35 hari untuk menentukan dua purata bergerak. Garis isyarat membeli ditakrifkan sebagai purata bergerak indeks 2 hari, dan garis isyarat menjual diukur dengan kemiringan berdasarkan harga penutupan 8 hari yang lalu. Di samping itu, rata-rata bergerak indeks 20 hari juga ditakrifkan sebagai penunjuk jumlah transaksi.
Apabila harga penutupan saham lebih tinggi daripada purata bergerak 35 hari, dan jumlah transaksi lebih tinggi daripada purata jumlah transaksi 20 hari, dan diperiksa sebagai pasaran berbilang minggu, isyarat beli dipicu oleh salib emas di bawah; sebaliknya, isyarat jual dipicu oleh salib mati di atas.
Dari segi pengurusan risiko, strategi memperkenalkan mekanisme penyesuaian kedudukan dinamik. Kedudukan sebenar dikira berdasarkan kepentingan akaun, nisbah kedudukan maksimum, ATR dan faktor risiko. Ini membantu mengawal strategi untuk penarikan maksimum.
Strategi ini menggabungkan faktor momentum dan penapisan trend, yang dapat mengenal pasti arah garis panjang tengah dengan berkesan. Pada masa yang sama, penapisan terhadap Noise juga lebih baik, yang membantu untuk mengelakkan isyarat salah dalam keadaan gegaran. Selain itu, pengenalan mekanisme pengurusan risiko juga menjadikan kawalan pengunduran maksimum sesuai, yang memastikan kehandalan strategi.
Dari hasil tinjauan semula, kadar pulangan keseluruhan strategi mencapai 128.86%, dengan Alpha yang sangat ketara. Pada masa yang sama, kadar kemenangan strategi mencapai 60.66%, yang mencerminkan kestabilan kesan strategi.
Walaupun strategi itu sendiri telah mengoptimumkan mekanisme pengurusan risiko, terdapat beberapa risiko yang perlu diperhatikan. Secara khusus, risiko utama termasuk:
Risiko penarikan balik. Dari kerugian maksimum tunggal 222,021.46 yuan dapat dilihat, strategi penarikan balik lebih besar. Ini berkaitan dengan mekanisme pengurusan kedudukan yang tidak sempurna.
Risiko kestabilan isyarat. Isyarat strategi mungkin dipengaruhi oleh faktor-faktor khusus individu, sehingga terdapat isyarat salah. Ini akan memberi kesan kepada hasil strategi.
Risiko perubahan keadaan pasaran. Jika keadaan pasaran makro berubah secara signifikan, parameter strategi mungkin perlu disesuaikan untuk terus memberi kesan.
Berdasarkan analisis risiko di atas, strategi ini masih mempunyai keperluan dan kemungkinan untuk dioptimumkan.
Dari segi kerugian maksimum, mekanisme pengurusan kedudukan boleh dioptimumkan lebih jauh, memperkenalkan modul hentian kerugian untuk mengawal tahap kerugian tunggal.
Anda boleh mempertimbangkan untuk menambah lebih banyak penapis untuk mengenal pasti beberapa fenomena saham khusus untuk mengurangkan kemungkinan isyarat palsu.
Parameter strategi harus terus dikaji semula dan disahkan, dengan penyesuaian parameter yang tepat pada masanya mengikut perubahan keadaan pasaran.
Strategi gabungan pengoptimuman trend dinamik adalah strategi perdagangan kuantitatif garis tengah yang panjang, yang menggabungkan faktor dinamik dan penapis trend, yang dioptimumkan khusus untuk perdagangan T + 1. Dari segi pengukuran, kesan keseluruhan strategi adalah ketara, dengan alfa yang sangat menakjubkan. Tetapi juga harus memperhatikan risiko yang mungkin, dan menyesuaikan parameter selaras dengan keadaan pasaran.
/*backtest
start: 2024-01-06 00:00:00
end: 2024-02-05 00:00:00
period: 1h
basePeriod: 15m
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/
// © fzj20020403
////@version=5
//@version=5
strategy("Optimized Zhaocaijinbao", overlay=true, margin_long=100, margin_short=0, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// Define two moving averages
ma6 = ta.sma(close, 6)
ma35 = ta.sma(close, 35)
// Define buy and sell signal lines
buyLine = ta.ema(close, 2)
sellSlope = (close - close[8]) / 8
sellLine = sellSlope * 1 + ta.sma(close, 8)
// Define volume indicator
volumeEMA = ta.ema(volume, 20)
// Define weekly slope factor
weeklyMa = ta.sma(close, 50)
weeklySlope = (weeklyMa - weeklyMa[4]) / 4 > 0
// Generate buy and sell signals
buySignal = ta.crossover(buyLine, sellLine) and close > ma35 and volume > volumeEMA and weeklySlope
sellSignal = ta.crossunder(sellLine, buyLine)
// Define dynamic position sizing factor
equity = strategy.equity
maxPositionSize = equity * input.float(title='Max Position Size (%)', defval=0.01, minval=0.001, maxval=0.5, step=0.001)
riskFactor = input.float(title='Risk Factor', defval=2.0, minval=0.1, maxval=10.0, step=0.1)
atr = ta.atr(14)
positionSize = maxPositionSize * riskFactor / atr
// Define position status
var inPosition = false
// Define buy and sell conditions
buyCondition = buySignal and not inPosition
sellCondition = sellSignal and inPosition
// Perform buy and sell operations
if (buyCondition)
strategy.entry("Long", strategy.long, qty=positionSize)
inPosition := true
if (sellCondition)
strategy.close("Long")
inPosition := false
// Draw vertical line markers for buy and sell signals
plotshape(buyCondition, style=shape.arrowdown, location=location.belowbar, color=color.green, size=size.small)
plotshape(sellCondition, style=shape.arrowup, location=location.abovebar, color=color.red, size=size.small)
// Draw two moving averages
plot(ma6, color=color.blue)
plot(ma35, color=color.orange)
// Draw volume indicator line
plot(volumeEMA, color=color.yellow)
// Define stop loss and take profit
stopLoss = strategy.position_avg_price * 0.5
takeProfit = strategy.position_avg_price * 1.25
if inPosition
strategy.exit("Long Stop Loss", "Long", stop=stopLoss)
strategy.exit("Long Take Profit", "Long", limit=takeProfit)