Strategi panjang VWMA-ADX Bitcoin berdasarkan momentum dan arah aliran

VWMA ADX DMI SMA EMA RMA WMA HMA SMMA
Tarikh penciptaan: 2024-04-03 17:47:49 Akhirnya diubah suai: 2024-04-03 17:47:49
Salin: 8 Bilangan klik: 951
1
fokus pada
1617
Pengikut

Strategi panjang VWMA-ADX Bitcoin berdasarkan momentum dan arah aliran

Gambaran keseluruhan

Strategi ini menggunakan beberapa purata bergerak ((VWMA), indeks arah rata-rata ((ADX) dan penunjuk pergerakan ((DMI) untuk menangkap peluang berganda di pasaran bitcoin. Dengan menggabungkan beberapa petunjuk teknikal seperti pergerakan harga, arah trend dan jumlah transaksi, strategi ini bertujuan untuk mencari tempat masuk yang kuat dan cukup bergerak ke atas, sambil mengawal risiko dengan ketat.

Prinsip Strategi

  1. Digunakan pada 9 dan 14 hari VWMA untuk menilai trend berbilang, menghasilkan isyarat berbilang apabila garis purata jangka pendek melintasi garis purata jangka panjang.
  2. Memperkenalkan garis rata-rata menyesuaikan diri yang dibina oleh 89 hari harga tertinggi dan terendah VWMA sebagai penapis trend, hanya mengambil kira kedudukan apabila harga penutupan atau harga pembukaan lebih tinggi daripada garis rata-rata tersebut.
  3. Untuk mengesahkan kekuatan trend melalui ADX dan DMI, trend dianggap cukup kuat hanya apabila ADX lebih besar daripada 18 dan perbezaan + DI dengan -DI lebih besar daripada 15.
  4. Menggunakan fungsi peratusan jumlah urus niaga untuk menyaring jumlah urus niaga antara 60% hingga 95% bar, mengelakkan masa apabila jumlah urus niaga terlalu rendah.
  5. Stop loss yang ditetapkan terletak pada 0.96 hingga 0.99 kali titik tinggi K-baris sebelumnya dan berkurangan dengan peningkatan jangka masa untuk mengawal risiko.
  6. Mencapai masa pegangan yang ditetapkan atau harga jatuh di bawah garis purata penyesuaian.

Analisis kelebihan

  1. Gabungan pelbagai petunjuk teknikal untuk menilai keadaan pasaran dari pelbagai dimensi seperti trend, momentum dan jumlah transaksi, memberi isyarat yang lebih dipercayai.
  2. Mekanisme penapisan rata-rata dan jumlah transaksi yang beradaptasi secara berkesan menapis isyarat palsu dan mengurangkan perdagangan yang tidak sah.
  3. Pengaturan hentian kerugian yang ketat dan had tempoh memegang kedudukan telah mengurangkan risiko strategi.
  4. Kod ini direka bentuk secara modular, lebih mudah dibaca dan boleh dijaga, memudahkan pengoptimuman dan pengembangan lebih lanjut.

Analisis risiko

  1. Strategi ini mungkin menghasilkan lebih banyak isyarat palsu apabila pasaran bergolak atau trend tidak jelas.
  2. Penutupan kerugian adalah agak dekat, dan ia boleh mencetuskan penutupan terlalu awal apabila terdapat turun naik yang besar, yang menyebabkan kerugian meningkat.
  3. Kurangnya pertimbangan terhadap keadaan ekonomi makro dan peristiwa-peristiwa besar, mungkin tidak berkesan dalam menghadapi peristiwa Black Swan.
  4. Tetapan parameter agak tetap, kurang menyesuaikan diri, dan mungkin tidak stabil dalam keadaan pasaran yang berbeza.

Arah pengoptimuman

  1. Pengenalan lebih banyak petunjuk yang dapat menggambarkan keadaan pasaran, seperti indeks kekuatan relatif (RSI) dan Brinks, meningkatkan kebolehpercayaan isyarat.
  2. Mengoptimumkan kedudukan hentian secara dinamik, contohnya dengan menggunakan ATR atau peratusan hentian untuk menghadapi keadaan pasaran yang berbeza.
  3. Menggabungkan data makroekonomi dan analisis sentimen, modul kawalan risiko strategi dipertingkatkan.
  4. Menggunakan algoritma pembelajaran mesin untuk mengoptimumkan parameter secara automatik, meningkatkan kebolehlakuan dan kestabilan strategi.

ringkaskan

Strategi bitcoin multihead VWMA-ADX dapat menangkap peluang kenaikan dalam pasaran bitcoin dengan lebih berkesan dengan mempertimbangkan pelbagai petunjuk teknikal seperti trend harga, momentum, dan jumlah transaksi. Pada masa yang sama, langkah-langkah kawalan risiko yang ketat dan syarat kedudukan yang jelas menjadikan risiko strategi ini dikawal dengan lebih baik. Namun, strategi ini juga mempunyai beberapa batasan, seperti kurangnya adaptasi terhadap perubahan persekitaran pasaran, dan strategi penghentian kerugian yang perlu dioptimumkan.

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