VWMA-ADX Momentum và Chiến lược dài Bitcoin dựa trên xu hướng

Tác giả:ChaoZhang, Ngày: 2024-04-03 17:47:49
Tags:VWMAADXDMISMAEMARMAWMAHMASMMA

img

Tổng quan

Chiến lược này sử dụng nhiều đường trung bình động (VWMA), chỉ số hướng trung bình (ADX) và chỉ số chuyển động theo hướng (DMI) để nắm bắt các cơ hội dài trên thị trường Bitcoin. Bằng cách kết hợp đà tăng giá, hướng xu hướng và khối lượng giao dịch, chiến lược nhằm mục đích tìm các điểm nhập với xu hướng tăng mạnh và đà tăng đủ trong khi kiểm soát rủi ro nghiêm ngặt.

Nguyên tắc chiến lược

  1. Sử dụng VWMA 9 ngày và 14 ngày để xác định xu hướng dài.
  2. Đưa ra một đường trung bình động thích nghi được xây dựng từ giá cao nhất và thấp nhất VWMA 89 ngày như một bộ lọc xu hướng. Chỉ xem xét mở một vị trí khi giá đóng hoặc giá mở trên đường trung bình động này.
  3. Xác nhận sức mạnh xu hướng bằng cách sử dụng các chỉ số ADX và DMI. Xu hướng được coi là đủ mạnh chỉ khi ADX lớn hơn 18 và sự khác biệt giữa +DI và -DI lớn hơn 15.
  4. Loại bỏ các thanh với khối lượng giao dịch giữa 60% và 95% bằng hàm phần trăm khối lượng để tránh các giai đoạn có khối lượng giao dịch thấp.
  5. Đặt mức dừng lỗ ở mức 0,96 đến 0,99 lần mức cao của nến trước, giảm khi khung thời gian tăng để kiểm soát rủi ro.
  6. Đóng vị trí khi thời gian giữ được xác định trước đạt được hoặc giá giảm xuống dưới đường trung bình động thích nghi.

Phân tích lợi thế

  1. Bằng cách kết hợp nhiều chỉ số kỹ thuật, chiến lược đánh giá các điều kiện thị trường từ các khía cạnh khác nhau như xu hướng, động lực và khối lượng giao dịch, làm cho các tín hiệu đáng tin cậy hơn.
  2. Cơ chế lọc trung bình động thích nghi và khối lượng giao dịch lọc hiệu quả các tín hiệu sai và giảm các giao dịch không hợp lệ.
  3. Các thiết lập dừng lỗ nghiêm ngặt và giới hạn thời gian giữ giảm đáng kể rủi ro của chiến lược.
  4. Thiết kế mô-đun của mã cải thiện khả năng đọc và duy trì, tạo điều kiện tối ưu hóa và mở rộng hơn nữa.

Phân tích rủi ro

  1. Khi thị trường biến động hoặc xu hướng không rõ ràng, chiến lược có thể tạo ra nhiều tín hiệu sai hơn.
  2. Mức dừng lỗ tương đối chặt chẽ, có thể gây ra việc dừng lỗ sớm và dẫn đến tăng lỗ trong các biến động lớn của thị trường.
  3. Chiến lược thiếu tính đến các điều kiện kinh tế vĩ mô và các sự kiện quan trọng, và có thể thất bại khi đối mặt với các sự kiện "đám thiên nga".
  4. Các thiết lập tham số tương đối cố định và thiếu khả năng thích nghi, có thể dẫn đến hiệu suất không ổn định trong các môi trường thị trường khác nhau.

Hướng dẫn tối ưu hóa

  1. Đưa ra nhiều chỉ số có thể nắm bắt các điều kiện thị trường, chẳng hạn như Chỉ số sức mạnh tương đối (RSI) và Bollinger Bands, để cải thiện độ tin cậy tín hiệu.
  2. Tối ưu hóa mức dừng lỗ một cách năng động, ví dụ bằng cách sử dụng phạm vi trung bình thực sự (ATR) hoặc dừng lỗ dựa trên tỷ lệ phần trăm, để thích nghi với các điều kiện biến động thị trường khác nhau.
  3. Cải thiện mô-đun kiểm soát rủi ro của chiến lược bằng cách kết hợp dữ liệu kinh tế vĩ mô và phân tích tâm lý.
  4. Sử dụng thuật toán học máy để tự động tối ưu hóa các thông số, cải thiện khả năng thích nghi và ổn định của chiến lược.

Tóm lại

Chiến lược dài Bitcoin của VWMA-ADX có hiệu quả nắm bắt các cơ hội tăng trên thị trường Bitcoin bằng cách xem xét toàn diện xu hướng giá, động lực, khối lượng giao dịch và các chỉ số kỹ thuật khác. Đồng thời, các biện pháp kiểm soát rủi ro nghiêm ngặt và các điều kiện thoát rõ ràng đảm bảo rằng rủi ro của chiến lược được kiểm soát tốt. Tuy nhiên, chiến lược cũng có một số hạn chế, chẳng hạn như không đủ thích nghi với môi trường thị trường thay đổi và sự cần thiết phải tối ưu hóa các chiến lược dừng lỗ. Trong tương lai, có thể cải thiện về độ tin cậy tín hiệu, kiểm soát rủi ro và tối ưu hóa tham số để tăng cường độ bền và lợi nhuận của chiến lược. Nhìn chung, Chiến lược dài VWMA-ADX cung cấp cho các nhà đầu tư một cách tiếp cận giao dịch có hệ thống dựa trên động lực và xu hướng Bitcoin, đáng để tiếp tục khám phá và tinh chỉnh.


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

Có liên quan

Thêm nữa

qazwsz888Có lẽ bạn nên thêm một cái kẹp di động.