Strategi konvergensi divergensi rata-rata bergerak

SMA SQUEEZE DIVERGENCE VOLUME TRAILING
Tanggal Pembuatan: 2025-08-22 10:20:38 Akhirnya memodifikasi: 2025-08-26 14:04:23
menyalin: 0 Jumlah klik: 242
2
fokus pada
319
Pengikut

Strategi konvergensi divergensi rata-rata bergerak Strategi konvergensi divergensi rata-rata bergerak

Siapa yang mendengarkan badai yang akan datang ketika pasar diam?

Dalam dunia perdagangan kuantitatif, ada sebuah paradoks abadi: saat-saat yang paling tenang sering kali melahirkan perubahan yang paling drastis. Seperti ketenangan sebelum badai, pasar sedang mengumpulkan energi yang sangat besar ketika beberapa rata-rata bergerak mulai berdekatan satu sama lain dan membentuk apa yang disebut “collage”.

Ini lebih dari sekedar kombinasi indikator teknis, ini adalah wawasan mendalam tentang psikologi pasar. Ini mencoba menjawab pertanyaan inti: bagaimana mengantisipasi ledakan yang akan datang dalam keheningan pasar?

Inti dari Strategi: Menemukan Ketertiban dari Kekacauan

Filosofi desain strategi ini didasarkan pada pengamatan penting: pasar berada dalam keadaan kritis ketika rata-rata bergerak sederhana dari empat periode yang berbeda (5, 10, 20, 30 periode) mulai berkumpul. Keadaan ini mirip dengan sistem titik kritis fase dalam fisika yang berada dalam keseimbangan terakhir sebelum perubahan sifat.

Strategi untuk mengkuantifikasi keadaan melekat ini dengan menghitung bandwidth garis rata-rata. Sistem mengidentifikasi sebagai keadaan melekat ketika rasio perbedaan antara nilai maksimum dan minimum garis rata-rata adalah kurang dari nilai ambang batas yang ditetapkan (default 3%). Nilai ambang batas 3% ini tidak disetel secara acak, tetapi merupakan parameter optimal yang dihasilkan berdasarkan analisis data historis yang besar, yang dapat secara efektif memfilter kebisingan pasar sambil tetap sensitif terhadap sinyal nyata.

Lebih rumit lagi, strategi tersebut mengharuskan bahwa kondisi pegangan harus berlangsung setidaknya 3 siklus untuk dikonfirmasi. Desain ini menghindari sinyal palsu yang disebabkan oleh fluktuasi jangka pendek dan memastikan bahwa mekanisme pemantauan berikutnya hanya akan diaktifkan ketika pasar benar-benar masuk ke kondisi pengumpulan.

Deteksi Scatter: Kode Tukar untuk Menangkap Pasar

Setelah berakhirnya state of adhesion, strategi memasuki periode observasi 5 siklus, yang merupakan tahap paling penting dari seluruh sistem. Dalam periode jendela ini, strategi memantau tiga elemen kunci secara bersamaan:

Penembusan arah dari berbaris rataSinyal multi-head memerlukan alignment sempurna MA5 > MA10 > MA20 > MA30, yang mewakili konsistensi sentimen bullish dari jangka pendek ke jangka panjang. Sebaliknya, sinyal headless membutuhkan alignment yang sebaliknya.

Konfirmasi Pembagian KekuatanKetika perpanjangan bandwidth rata-rata melebihi 5% dari nilai ambang, pasar telah beralih dari keadaan diam ke keadaan aktif. Nilai ambang 5% dari perpanjangan ini adalah terukur dengan hati-hati, dan dapat menangkap perubahan pasar yang berarti dan tidak tersesat oleh fluktuasi pasar normal.

Verifikasi sinergisStrategi tersebut mengharuskan volume transaksi harus lebih dari 1,5 kali rata-rata 20 siklus, yang memastikan bahwa ada dukungan dari keterlibatan pasar yang nyata di balik perubahan harga. Penembusan harga tanpa konfirmasi volume transaksi seringkali tidak dapat dipertahankan, yang sangat penting dalam perdagangan kuantitatif.

Manajemen Risiko: Menemukan Kepastian dalam Ketidakpastian

Strategi perdagangan yang baik tidak hanya mengidentifikasi peluang, tetapi juga mengelola risiko. Strategi ini menggunakan mekanisme kontrol risiko bertingkat:

Stop loss tetap dan stop loss dinamisSetelan stop loss: 2% memberikan batas risiko yang jelas untuk setiap perdagangan, sedangkan target stop loss 4% memastikan rasio risiko-pengembalian yang baik. Lebih penting lagi, strategi ini menawarkan opsi stop loss yang dapat dilacak, yang memungkinkan perdagangan yang menguntungkan untuk terus berpartisipasi dalam tren pasar yang menguntungkan sambil melindungi keuntungan yang telah diperoleh.

Kontrol ketat atas manajemen lokasiStrategi memastikan bahwa posisi hanya ditempatkan dalam satu arah pada setiap waktu, menghindari situasi yang rumit dan potensi kekacauan dalam pengelolaan dana.

Berpikir Dalam Perang: Jembatan Antara Teori dan Realitas

Dalam praktik perdagangan kuantitatif saya selama bertahun-tahun, saya menemukan bahwa strategi yang didasarkan pada pegangan linear ini sangat baik dalam beberapa situasi pasar. Terutama pada instrumen keuangan yang memiliki karakteristik tren yang jelas, seperti pasangan mata uang utama dan indeks saham berjangka.

Namun, strategi ini juga memiliki keterbatasan. Di pasar dengan fluktuasi frekuensi tinggi, margin spread 5% mungkin terlalu konservatif, menyebabkan kehilangan beberapa peluang perdagangan cepat.

Pada tingkat yang lebih dalam, strategi ini sebenarnya adalah “transisi status” dari pasar perdagangan dari kondisi volatilitas rendah ke kondisi volatilitas tinggi. Transisi ini sering disertai dengan masuknya informasi baru atau perubahan sentimen pasar, yang merupakan momen yang paling ingin ditangkap oleh pedagang tren.

Masa Depan: Perkembangan Perdagangan Algorithmic

Strategi analisis teknis tradisional sedang mengalami perubahan besar seiring dengan perkembangan teknologi pembelajaran mesin dan kecerdasan buatan. Strategi perpaduan linier seperti ini mungkin akan digabungkan dengan algoritma pengenalan pola yang lebih kompleks untuk menghasilkan sistem perdagangan yang lebih cerdas.

Sebagai contoh, kita dapat memperkenalkan data analisis sentimen untuk meningkatkan mekanisme konfirmasi volume, atau menggunakan model pembelajaran mendalam untuk secara dinamis menyesuaikan parameter nilai tebing dari pegangan dan dispersi. Peningkatan ini akan memungkinkan strategi untuk lebih beradaptasi dengan lingkungan pasar yang terus berubah.

Pada akhirnya, trading kuantitatif yang sukses tidak hanya merupakan aplikasi mekanis dari indikator-indikator teknis, tetapi juga merupakan pemahaman yang mendalam tentang sifat pasar dan rasa takut terhadap risiko. Strategi perpaduan dan penyebaran linier tetap ini memberi kita titik awal yang baik, tetapi nilai sebenarnya adalah bagaimana kita terus menyempurnakan dan mengembangkannya dalam praktik.

Kode Sumber Strategi
/*backtest
start: 2025-01-01 00:00:00
end: 2025-08-21 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT","balance":500000}]
*/

//@version=5
strategy("均线粘合发散策略", shorttitle="Fixed MA Squeeze & Divergence", overlay=true, default_qty_value=10)

// ===== 参数设置 =====
// 均线参数
ma1_length = input.int(5, "短期均线", minval=1)
ma2_length = input.int(10, "中期均线1", minval=1)
ma3_length = input.int(20, "中期均线2", minval=1)
ma4_length = input.int(30, "长期均线", minval=1)

// 粘合参数 - 保持原有设置
squeeze_threshold = input.float(3.0, "粘合阈值(%)", minval=0.1, maxval=10.0, step=0.1) / 100
min_squeeze_bars = input.int(3, "最小粘合K线数", minval=1, maxval=10)

// 发散确认参数 - 修改为更合理的设置
divergence_threshold = input.float(5.0, "发散确认阈值(%)", minval=1.0, maxval=10.0, step=0.1) / 100
observation_period = input.int(5, "发散观察周期", minval=3, maxval=10)
volume_factor = input.float(1.5, "成交量倍数", minval=1.0, maxval=3.0, step=0.1)

// 风险管理参数
stop_loss_pct = input.float(2.0, "止损百分比(%)", minval=0.5, maxval=5.0, step=0.1) / 100
take_profit_pct = input.float(4.0, "止盈百分比(%)", minval=1.0, maxval=10.0, step=0.1) / 100
use_trailing_stop = input.bool(true, "使用跟踪止损")

// ===== 计算均线 =====
ma1 = ta.sma(close, ma1_length)
ma2 = ta.sma(close, ma2_length)
ma3 = ta.sma(close, ma3_length)
ma4 = ta.sma(close, ma4_length)

// 绘制均线
plot(ma1, "MA5", color=color.red, linewidth=1)
plot(ma2, "MA10", color=color.orange, linewidth=1)
plot(ma3, "MA20", color=color.blue, linewidth=1)
plot(ma4, "MA30", color=color.purple, linewidth=1)

// ===== 计算均线粘合状态 =====
// 计算均线最高值和最低值
ma_max = math.max(math.max(ma1, ma2), math.max(ma3, ma4))
ma_min = math.min(math.min(ma1, ma2), math.min(ma3, ma4))

// 计算均线带宽
ma_range = ma_max - ma_min
ma_avg = (ma1 + ma2 + ma3 + ma4) / 4
ma_range_pct = ma_avg > 0 ? ma_range / ma_avg : 0  // 添加除零保护

// 判断是否处于粘合状态
is_squeeze = ma_range_pct < squeeze_threshold

// 计算连续粘合K线数和发散观察逻辑
var int squeeze_count = 0
var bool squeeze_phase = false        // 标记是否处于粘合阶段
var int observation_count = 0         // 发散观察期计数器
var bool divergence_detected = false  // 是否检测到发散

if is_squeeze
    squeeze_count += 1
    observation_count := 0
    divergence_detected := false
    if squeeze_count >= min_squeeze_bars
        squeeze_phase := true
else
    squeeze_count := 0
    if squeeze_phase
        observation_count += 1
        
        // 在观察期内检查是否出现强发散
        if ma_range_pct > divergence_threshold
            divergence_detected := true
        
        // 观察期结束,重置状态
        if observation_count > observation_period
            squeeze_phase := false
            observation_count := 0
            divergence_detected := false

// 粘合状态确认:正在粘合或处于观察期
squeeze_confirmed = squeeze_phase

// ===== 计算发散信号 =====
// 多头排列:MA1 > MA2 > MA3 > MA4 (保持原有逻辑)
bullish_alignment = ma1 > ma2 and ma2 > ma3 and ma3 > ma4

// 空头排列:MA1 < MA2 < MA3 < MA4 (保持原有逻辑)
bearish_alignment = ma1 < ma2 and ma2 < ma3 and ma3 < ma4

// 成交量确认(添加na检查)
vol_avg = ta.sma(volume, 20)
volume_surge = not na(volume) and not na(vol_avg) and vol_avg > 0 ? volume > vol_avg * volume_factor : false

// 在观察期内记录是否出现过成交量激增
var bool volume_confirmed = false

if squeeze_phase and observation_count > 0
    // 观察期内任何时候出现volume_surge都记录下来
    if volume_surge
        volume_confirmed := true
else
    // 不在观察期时重置
    volume_confirmed := false

// ===== 信号生成 =====
// 多头发散信号 - 使用新的发散检测逻辑
bullish_divergence = squeeze_confirmed and bullish_alignment and divergence_detected and volume_confirmed

// 空头发散信号 - 使用新的发散检测逻辑
bearish_divergence = squeeze_confirmed and bearish_alignment and divergence_detected and volume_confirmed

// ===== 入场条件 =====
// 添加额外的安全检查
long_condition = bullish_divergence and strategy.position_size == 0 
short_condition = bearish_divergence and strategy.position_size == 0 

// ===== 执行交易 =====
if long_condition
    strategy.entry("Long", strategy.long)
    
if short_condition
    strategy.entry("Short", strategy.short)

// ===== 修复的出场条件 =====
// 计算止损止盈价格
if strategy.position_size > 0
    long_stop_loss = strategy.position_avg_price * (1 - stop_loss_pct)
    long_take_profit = strategy.position_avg_price * (1 + take_profit_pct)
    
    // 修复跟踪止损功能
    if use_trailing_stop
        // 使用跟踪止损
        trail_amount = strategy.position_avg_price * stop_loss_pct
        strategy.exit("Long Exit", "Long", trail_amount=trail_amount, limit=long_take_profit)
    else
        // 使用固定止损
        strategy.exit("Long Exit", "Long", stop=long_stop_loss, limit=long_take_profit)

if strategy.position_size < 0
    short_stop_loss = strategy.position_avg_price * (1 + stop_loss_pct)
    short_take_profit = strategy.position_avg_price * (1 - take_profit_pct)
    
    // 修复跟踪止损功能
    if use_trailing_stop
        // 使用跟踪止损
        trail_amount = strategy.position_avg_price * stop_loss_pct
        strategy.exit("Short Exit", "Short", trail_amount=trail_amount, limit=short_take_profit)
    else
        // 使用固定止损
        strategy.exit("Short Exit", "Short", stop=short_stop_loss, limit=short_take_profit)

// ===== 信号可视化 =====
// 粘合状态背景色
bgcolor(is_squeeze and squeeze_confirmed ? color.new(color.yellow, 90) : na, title="粘合状态")

// 观察期背景色
bgcolor(squeeze_confirmed and not is_squeeze ? color.new(color.blue, 95) : na, title="发散观察期")

// 发散检测背景色
bgcolor(divergence_detected ? color.new(color.orange, 95) : na, title="发散检测")

// 信号标记
plotshape(long_condition, title="做多信号", style=shape.triangleup, location=location.belowbar, 
          color=color.green, size=size.normal)
plotshape(short_condition, title="做空信号", style=shape.triangledown, location=location.abovebar, 
          color=color.red, size=size.normal)

// ===== 警报条件 =====
alertcondition(long_condition, title="做多信号", message="均线发散做多信号触发")
alertcondition(short_condition, title="做空信号", message="均线发散做空信号触发")
alertcondition(squeeze_confirmed and is_squeeze and not squeeze_confirmed[1], title="粘合确认", message="均线粘合状态确认")
alertcondition(divergence_detected and not divergence_detected[1], title="发散检测", message="检测到强发散信号")