VWMA-ADX Momentum dan Strategi Bitcoin Long Berbasis Tren

Penulis:ChaoZhang, Tanggal: 2024-04-03 17:47:49
Tag:VWMAADXDMISMAEMARMAWMAHMASMMA

img

Gambaran umum

Strategi ini menggunakan beberapa rata-rata bergerak (VWMA), Indeks Arah Rata-rata (ADX), dan Indikator Gerakan Arah (DMI) untuk menangkap peluang panjang di pasar Bitcoin. Dengan menggabungkan momentum harga, arah tren, dan volume perdagangan, strategi ini bertujuan untuk menemukan titik masuk dengan tren naik yang kuat dan momentum yang cukup sambil mengendalikan risiko secara ketat.

Prinsip Strategi

  1. Gunakan VWMA 9 hari dan 14 hari untuk menentukan tren panjang. Sinyal bullish dihasilkan ketika rata-rata bergerak jangka pendek melintasi di atas rata-rata bergerak jangka panjang.
  2. Memperkenalkan rata-rata bergerak adaptif yang dibangun dari harga tertinggi dan terendah VWMA 89 hari sebagai filter tren.
  3. Konfirmasi kekuatan tren menggunakan indikator ADX dan DMI.
  4. Filter keluar bar dengan volume perdagangan antara 60% dan 95% percentil menggunakan fungsi percentil volume untuk menghindari periode dengan volume perdagangan rendah.
  5. Atur level stop-loss pada 0,96 hingga 0,99 kali tinggi lilin sebelumnya, berkurang seiring meningkatnya jangka waktu untuk mengendalikan risiko.
  6. Tutup posisi ketika waktu ditahan yang telah ditentukan tercapai atau harga jatuh di bawah rata-rata bergerak adaptif.

Analisis Keuntungan

  1. Dengan menggabungkan beberapa indikator teknis, strategi ini mengevaluasi kondisi pasar dari berbagai dimensi seperti tren, momentum, dan volume perdagangan, membuat sinyal lebih dapat diandalkan.
  2. Mekanisme penyaringan rata-rata bergerak adaptif dan volume perdagangan secara efektif menyaring sinyal palsu dan mengurangi perdagangan yang tidak valid.
  3. Pengaturan stop-loss yang ketat dan batas waktu menahan sangat mengurangi eksposur risiko strategi.
  4. Desain modular kode meningkatkan keterbacaan dan pemeliharaan, memfasilitasi optimasi dan perluasan lebih lanjut.

Analisis Risiko

  1. Ketika pasar berfluktuasi atau tren tidak jelas, strategi dapat menghasilkan lebih banyak sinyal palsu.
  2. Tingkat stop-loss relatif ketat, yang dapat memicu stop-out prematur dan menyebabkan peningkatan kerugian selama fluktuasi pasar yang besar.
  3. Strategi ini tidak mempertimbangkan kondisi makroekonomi dan peristiwa penting, dan mungkin gagal dalam menghadapi peristiwa "black swan".
  4. Pengaturan parameter relatif tetap dan tidak dapat beradaptasi, yang dapat mengakibatkan kinerja yang tidak stabil di lingkungan pasar yang berbeda.

Arahan Optimasi

  1. Memperkenalkan lebih banyak indikator yang dapat menangkap kondisi pasar, seperti Indeks Kekuatan Relatif (RSI) dan Bollinger Bands, untuk meningkatkan keandalan sinyal.
  2. Optimalkan tingkat stop loss secara dinamis, misalnya dengan menggunakan Average True Range (ATR) atau stop loss berbasis persentase, untuk beradaptasi dengan kondisi volatilitas pasar yang berbeda.
  3. Meningkatkan modul kontrol risiko strategi dengan memasukkan data makroekonomi dan analisis sentimen.
  4. Menggunakan algoritma pembelajaran mesin untuk mengoptimalkan parameter secara otomatis, meningkatkan kemampuan adaptasi dan stabilitas strategi.

Ringkasan

VWMA-ADX Bitcoin Long Strategy secara efektif menangkap peluang naik di pasar Bitcoin dengan secara komprehensif mempertimbangkan tren harga, momentum, volume perdagangan, dan indikator teknis lainnya. Pada saat yang sama, langkah-langkah pengendalian risiko yang ketat dan kondisi keluar yang jelas memastikan bahwa risiko strategi dikendalikan dengan baik. Namun, strategi ini juga memiliki beberapa keterbatasan, seperti ketidakmampuan beradaptasi yang tidak memadai terhadap perubahan lingkungan pasar dan kebutuhan untuk strategi stop-loss yang dioptimalkan.


/*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) 

Berkaitan

Lebih banyak

Qazwsz888Jika Anda tidak memiliki alat yang cukup, Anda tidak akan bisa menggunakan alat ini.