Strategi jangka panjang Bitcoin VWMA-ADX berdasarkan momentum dan tren

VWMA ADX DMI SMA EMA RMA WMA HMA SMMA
Tanggal Pembuatan: 2024-04-03 17:47:49 Akhirnya memodifikasi: 2024-04-03 17:47:49
menyalin: 8 Jumlah klik: 951
1
fokus pada
1617
Pengikut

Strategi jangka panjang Bitcoin VWMA-ADX berdasarkan momentum dan tren

Ringkasan

Strategi ini menggunakan beberapa moving average (VWMA), average directional index (ADX), dan moving indicator (DMI) untuk menangkap banyak peluang di pasar bitcoin. Dengan menggabungkan beberapa indikator teknis seperti pergerakan harga, arah tren, dan volume transaksi, strategi ini bertujuan untuk menemukan titik masuk dengan tren naik yang kuat dan cukup dinamis, sambil mengendalikan risiko secara ketat.

Prinsip Strategi

  1. VWMA 9 dan 14 digunakan untuk menilai tren multihead, yang menghasilkan sinyal multihead ketika rata-rata jangka pendek melewati rata-rata jangka panjang.
  2. Memperkenalkan garis rata-rata adaptif yang dibangun dari 89 hari tertinggi dan terendah VWMA sebagai filter tren, hanya untuk mempertimbangkan posisi terbuka jika harga penutupan atau harga buka lebih tinggi dari garis rata-rata tersebut.
  3. Untuk mengkonfirmasi kekuatan tren dengan indikator ADX dan DMI, tren dianggap cukup kuat hanya jika ADX lebih besar dari 18 dan selisih + DI dengan -DI lebih besar dari 15.
  4. Fungsi persentase volume transaksi digunakan untuk memfilter volume transaksi dari garis bar antara 60% dan 95%, menghindari periode ketika volume transaksi terlalu rendah.
  5. Stop loss yang disetel berada pada titik tinggi garis K sebelumnya 0,96 - 0,99 kali, dan berkurang seiring bertambahnya jangka waktu untuk mengendalikan risiko.
  6. Hemat posisi saat jangka waktu yang ditentukan tercapai atau harga turun di bawah garis rata-rata adaptasi.

Analisis Keunggulan

  1. Sinyal ini lebih dapat diandalkan dengan menggabungkan beberapa indikator teknis untuk menilai kondisi pasar dari berbagai dimensi seperti tren, momentum, dan volume transaksi.
  2. Adaptasi rata-rata dan mekanisme penyaringan volume transaksi dapat secara efektif memfilter sinyal palsu dan mengurangi transaksi yang tidak valid.
  3. Pengaturan stop loss yang ketat dan pembatasan waktu memegang posisi secara signifikan mengurangi risiko dari strategi tersebut.
  4. Desain kode yang modular, mudah dibaca dan dapat dipertahankan, memudahkan optimasi dan perluasan lebih lanjut.

Analisis risiko

  1. Strategi ini dapat menghasilkan lebih banyak sinyal palsu ketika pasar bergejolak atau tren tidak jelas.
  2. Stop loss posisi relatif dekat, dalam kondisi pasar yang berfluktuasi besar mungkin terlalu cepat memicu stop loss, menyebabkan kerugian berkembang.
  3. Kurangnya pertimbangan terhadap situasi ekonomi makro dan peristiwa-peristiwa besar, mungkin akan gagal dalam menghadapi peristiwa “Black Swan”.
  4. Pengaturan parameter relatif tetap, kurangnya kemampuan beradaptasi, dan kinerja yang mungkin tidak stabil dalam berbagai lingkungan pasar.

Arah optimasi

  1. Menggunakan lebih banyak indikator yang dapat menggambarkan kondisi pasar, seperti RSI (Relative Strength Index) dan Brinks, meningkatkan keandalan sinyal.
  2. Optimalkan posisi stop loss secara dinamis, misalnya dengan menggunakan ATR atau stop loss persentase untuk menghadapi berbagai kondisi pasar yang berfluktuasi.
  3. Dengan data makroekonomi dan analisis sentimen, modul pengendalian risiko dari strategi ini diperkuat.
  4. Menggunakan algoritma pembelajaran mesin untuk mengoptimalkan parameter secara otomatis, meningkatkan fleksibilitas dan stabilitas strategi.

Meringkaskan

VWMA-ADX Bitcoin multihead strategi dapat secara efektif menangkap peluang kenaikan di pasar bitcoin dengan mempertimbangkan berbagai indikator teknis seperti tren harga, momentum, dan volume transaksi. Namun, ada beberapa keterbatasan, seperti kurangnya adaptasi terhadap perubahan lingkungan pasar, dan strategi stop loss yang harus dioptimalkan. Masa depan dapat dimulai dari keandalan sinyal, kontrol risiko, optimasi parameter, dan lain-lain.

Kode Sumber Strategi
/*backtest
start: 2024-03-01 00:00:00
end: 2024-03-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Q_D_Nam_N_96

//@version=5
strategy("Long BTC Strategy", overlay=true, 
     default_qty_type = strategy.percent_of_equity, 
     default_qty_value = 100, initial_capital = 1000, currency = currency.USD)

Volume_Quartile(vol) =>
    qvol1 = ta.percentile_linear_interpolation(vol, 60,15)
    qvol2 = ta.percentile_linear_interpolation(vol, 60,95)
    vol > qvol1 and vol < qvol2

smma(src, length) =>
	smma =  0.0
	smma := na(smma[1]) ? ta.sma(src, length) : (smma[1] * (length - 1) + src) / length
	smma

ma(source, length, type) =>
    switch type
        "SMA" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "RMA" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "VWMA" => ta.vwma(source, length)
        "HMA" => ta.hma(source, length)
        "SMMA" => smma(source, length)

DMI(len, lensig) =>
    up = ta.change(high)
    down = -ta.change(low)
    plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
    minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
    trur = ta.rma(ta.tr, len)
    plus = fixnan(100 * ta.rma(plusDM, len) / trur)+11
    minus = fixnan(100 * ta.rma(minusDM, len) / trur)-11
    sum = plus + minus
    adx = 100 * ta.vwma(math.abs(plus - minus-11) / (sum == 0 ? 1 : sum), lensig)

    [adx, plus, minus]

cond1 = Volume_Quartile(volume*hlcc4)

ma1 = ma(close,9, "VWMA")
// plot(ma1, color = color.blue)
ma2 = ma(close,14, "VWMA")
// plot(ma2, color = color.orange)

n = switch timeframe.period
    "240" => 0.997
    => 0.995

ma3 = (0.1*ma(ta.highest(close,89),89, "VWMA") + 
     0.9*ma(ta.lowest(close,89),89, "VWMA"))*n

plot(ma3, color = color.white)

[adx, plus, minus] = DMI(7, 10)


cond2 = adx > 18 and plus - math.abs(minus) > 15

var int count = 0

if barstate.isconfirmed and strategy.position_size != 0
    count += 1
else
    count := 0

p_roc = 0
if timeframe.period == '240'
    p_roc := 14
else
    p_roc := 10

longCondition = ta.crossover(ma1, ma2) and (close > open ? close > ma3 : open > ma3) and ((ma3 - ma3[1])*100/ma3[1] >= -0.2) and ((close-close[p_roc])*100/close[p_roc] > -2.0)
float alpha = 0.0
float sl_src = high[1]
if (longCondition and cond1 and cond2 and strategy.position_size == 0)
    strategy.entry("buy", strategy.long)
    if timeframe.period == '240'
        alpha := 0.96
        strategy.exit("exit-buy","buy", stop = sl_src*alpha)
        // line.new(bar_index, sl_src*alpha, bar_index+5, sl_src*alpha, width = 2, color = color.white)
    else if timeframe.period == '30'
        alpha := 0.985
        strategy.exit("exit-buy","buy", stop = sl_src*alpha)
        // line.new(bar_index, sl_src*alpha, bar_index+20, sl_src*alpha, width = 2, color = color.white)
    else if timeframe.period == '45'
        alpha := 0.985
        strategy.exit("exit-buy","buy", stop = sl_src*alpha)
        // line.new(bar_index, sl_src*alpha, bar_index+20, sl_src*alpha, width = 2, color = color.white)
    else if timeframe.period == '60'
        alpha := 0.98
        strategy.exit("exit-buy","buy", stop = sl_src*alpha)
        // line.new(bar_index, sl_src*alpha, bar_index+20, sl_src*alpha, width = 2, color = color.white)
    else if timeframe.period == '120'
        alpha := 0.97
        strategy.exit("exit-buy","buy", stop = sl_src*alpha)
        // line.new(bar_index, sl_src*alpha, bar_index+20, sl_src*alpha, width = 2, color = color.white)
    else if timeframe.period == '180'
        alpha := 0.96
        strategy.exit("exit-buy","buy", stop = sl_src*alpha)
        // line.new(bar_index, sl_src*alpha, bar_index+20, sl_src*alpha, width = 2, color = color.white)
    else if timeframe.period == 'D'
        alpha := 0.95
        strategy.exit("exit-buy","buy", stop = sl_src*alpha)
        // line.new(bar_index, sl_src*alpha, bar_index+20, sl_src*alpha, width = 2, color = color.white)
    else 
        alpha := 0.93
        strategy.exit("exit-buy","buy", stop = sl_src*alpha)
        // line.new(bar_index, sl_src*alpha, bar_index+20, sl_src*alpha, width = 2, color = color.white)

period = switch timeframe.period
    "240" => 90
    "180" => 59
    "120" => 35
    "30" => 64
    "45" => 40
    "60" => 66
    "D" => 22
    => 64

if (count > period or close < ma3)
    strategy.close('buy', immediately = true)