Chiến lược Bitcoin Momentum Trailing Stop

Tác giả:ChaoZhang, Ngày: 2024-03-08 16:20:16
Tags:

img

Tổng quan chiến lược

Chiến lược Bitcoin Momentum Trailing Stop là một chiến lược dựa trên đà tăng chỉ dài được thiết kế để nắm bắt xu hướng tăng của Bitcoin trong khi giảm thiểu rủi ro giảm đi thông qua các lỗ dừng điều chỉnh năng động. Chiến lược sử dụng một kỹ thuật dừng dừng theo đà nhanh đơn giản nhưng thông minh, làm chặt đà dừng lỗ trong thời điểm biến động giảm mạnh để bảo vệ lợi nhuận mở và nới lỏng đà dừng lỗ trong thời điểm tăng bền vững để cho lợi nhuận chạy. Chiến lược này vẫn được đầu tư miễn là giá Bitcoin nằm trên đường trung bình động nhân 20 tuần (EMA) và thoát ra khi giá đóng dưới mức đó. Nó chỉ giao dịch một vị trí và không ngắn, nhưng nó có thể dễ dàng được điều chỉnh để làm bất cứ điều gì bạn thích nếu bạn biết bạn đang làm gì.

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

  1. Giá hiện tại của Bitcoin phải giao dịch trên EMA khung thời gian cao hơn (20 tuần EMA).
  2. Bitcoin không được ở trạng thái thận trọng, được định nghĩa là mức dao động cao gần đây trừ mức thấp hiện tại là lớn hơn 1,5 lần ATR, hoặc mức đóng cửa hàng ngày thấp hơn 20 EMA hàng ngày.
  3. Đặt stop-loss ở mức cao nhất gần đây trừ đi 1 ATR, hoặc trừ đi 20% của ATR (tức là 0,2 ATR) nếu ở trạng thái thận trọng.
  4. Exit trên thanh tiếp theo sẽ mở khi giá đóng dưới mức dừng lỗ.

Chiến lược này sử dụng biểu đồ hàng tuần và EMA 20 tuần như một bộ lọc xu hướng, chỉ vào khi giá vượt quá EMA 20 tuần. ATR 5 giai đoạn được sử dụng để điều chỉnh năng động khoảng cách của điểm dừng cuối cùng, thắt chặt trong trạng thái thận trọng. trạng thái thận trọng được xác định bởi hai điều kiện: khoảng cách từ điểm cao dao động gần đây đến mức thấp hiện tại lớn hơn 1,5 lần ATR, hoặc điểm đóng hàng ngày dưới 20 EMA hàng ngày. Cách tiếp cận điều chỉnh dừng lỗ năng động này cho phép có nhiều phòng rút lui hơn khi xu hướng mạnh và nhanh chóng khóa lợi nhuận khi xu hướng suy yếu.

Ưu điểm chiến lược

  1. Tính đơn giản và hiệu quả: Logic chiến lược đơn giản, rõ ràng, dễ hiểu và thực hiện, đồng thời nắm bắt hiệu quả xu hướng tăng trưởng lớn của Bitcoin.

  2. Động thái dừng lỗ: Vị trí dừng lỗ được điều chỉnh năng động dựa trên các điều kiện biến động thị trường, kiểm soát rút tiền trong khi cho phép lợi nhuận chạy, đó là một cách tiếp cận tương đối cân bằng và mạnh mẽ để quản lý dừng lỗ.

  3. Quét xu hướng: Bằng cách lọc với một mức trung bình động cao hơn (20 tuần EMA), chiến lược chỉ đi vào trong thời gian xu hướng tăng rõ ràng, cải thiện đáng kể tỷ lệ chiến thắng và tỷ lệ rủi ro-lợi nhuận của chiến lược.

  4. Kích thước vị trí: mặc định là giao dịch với một vị trí đầy đủ, tối đa hóa việc sử dụng vốn và cải thiện hiệu quả vốn.

  5. Áp dụng rộng: Logic chiến lược có thể dễ dàng chuyển sang các tài sản và thị trường khác, có khả năng tổng quát tốt.

Rủi ro chiến lược

  1. Tính áp dụng các tham số: Các tham số chiến lược được thiết lập dựa trên các đặc điểm của thị trường Bitcoin và tính áp dụng của chúng đối với các thị trường khác cần được xác nhận và có thể yêu cầu tối ưu hóa tham số cho các tài sản khác nhau.

  2. Xác định xu hướng: Chiến lược chủ yếu dựa trên các chỉ số kỹ thuật như EMA cấp cao hơn và ATR để đánh giá xu hướng, không toàn diện như phân tích cơ bản trong việc nắm bắt điều kiện thị trường và dễ mắc lỗi tại các thời điểm chuyển đổi thị trường.

  3. Rủi ro dừng lỗ: Mặc dù dừng lỗ năng động có thể kiểm soát rủi ro ở một mức độ nhất định, nhưng vẫn có thể xảy ra giảm đáng kể trong điều kiện thị trường cực đoan (như giảm mạnh hoặc biến động sâu nhanh chóng).

  4. Tiềm năng lợi nhuận: Chiến lược hoạt động tốt trong xu hướng tăng một chiều nhưng có nhiều khả năng rơi vào tình thế khó khăn của việc dừng lỗ thường xuyên trong các thị trường giới hạn phạm vi, có khả năng hạn chế tiềm năng lợi nhuận tổng thể.

  5. Hiệu suất trực tiếp: Trong khi chiến lược hoạt động tốt trong backtesting, giao dịch trực tiếp bị ảnh hưởng bởi các yếu tố như trượt và hoa hồng, và kết quả thực tế có thể khác với lợi nhuận lý thuyết, đòi hỏi đánh giá cẩn thận.

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

  1. Xác định xu hướng: Xem xét việc giới thiệu các đường trung bình động cấp cao hơn, chỉ số biến động hoặc thậm chí dữ liệu cơ bản để cải thiện độ chính xác và độ tin cậy của việc xác định xu hướng.

  2. Các thông số động: Các vị trí dừng lỗ và các thông số ATR có thể được tối ưu hóa hơn nữa bằng cách giới thiệu các cơ chế điều chỉnh động liên quan đến giá hoặc biến động để thích nghi với các tình trạng thị trường khác nhau.

  3. Kích thước vị trí: Điều chỉnh động kích thước vị trí dựa trên các chỉ số như sức mạnh xu hướng và biến động, tăng kích thước vị trí khi xu hướng mạnh và giảm kích thước vị trí khi biến động cao để cải thiện tỷ lệ rủi ro-lợi nhuận.

  4. Cơ chế bán ngắn / dài: Đưa ra một cơ chế bán ngắn trong thị trường giảm để mở rộng khả năng áp dụng và lợi nhuận tiềm năng của chiến lược.

  5. Kết hợp chiến lược: Kết hợp chiến lược này với các chiến lược khác (như đảo ngược trung bình) để bổ sung điểm mạnh của nhau và cải thiện tính ổn định và lợi nhuận của chiến lược.

Tóm tắt chiến lược

Chiến lược Bitcoin Momentum Trailing Stop là một chiến lược thúc đẩy đơn giản và hiệu quả nắm bắt xu hướng tăng mạnh của Bitcoin bằng cách sử dụng các đường trung bình động cấp cao hơn và các chỉ số ATR trong khi kiểm soát rủi ro giảm thông qua các lỗ dừng điều chỉnh năng động. Chiến lược này có thể phục vụ như một mẫu cơ bản, và các nhà đầu tư có thể tinh chỉnh nó dựa trên nhu cầu và kinh nghiệm của riêng họ trong các lĩnh vực như xác định xu hướng, tối ưu hóa tham số, quản lý vị trí và cơ chế dài / ngắn, hoặc kết hợp nó với các chiến lược khác để đạt được tỷ lệ rủi ro-lợi nhuận cao hơn. Tuy nhiên, cần lưu ý rằng hiệu suất trực tiếp của chiến lược có thể khác với kết quả kiểm tra hậu trường, đòi hỏi đánh giá và kiểm soát rủi ro cẩn thận. Bất kỳ chiến lược nào cũng nên được kiểm tra hậu trường kỹ lưỡng trên dữ liệu lịch sử và thử nghiệm trước khi sử dụng, và điều chỉnh năng động dựa trên những thay đổi trên thị trường.


/*backtest
start: 2023-03-08 00:00:00
end: 2024-03-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © ZenAndTheArtOfTrading
// ------------------------------------------------------------------------------------------------------
// System Concept: Capture as much Bitcoin upside volatility as possible while side-stepping downside volatility.
//  Entry Rule #1: Bitcoin must be trading above higher-timeframe EMA (Weekly 20 EMA)
//  Entry Rule #2: Bitcoin must not be in 'caution' condition
//      -> Caution: True if BTC's recent swing high minus its current low is > 1.5x ATR OR close < Daily EMA
//  Trailing Stop: Stop is trailed 1 ATR from recent swing high, OR 20% of ATR if in caution condition
// ------------------------------------------------------------------------------------------------------
// @version=5
strategy("Bitcoin Momentum Strategy", 
     overlay=true)

// Get user input
var const string    G_STRATEGY  = "Strategy Entry Settings"
var const string    G_EXIT      = "Strategy Exit Settings"
var const string    G_FILTER    = "Strategy Filters"
i_HigherTimeframe   = input.timeframe("W", "Higher Timeframe", group=G_STRATEGY, tooltip="Higher timeframe MA reference")
i_EmaLength         = input.int(20, "EMA Length", group=G_STRATEGY, tooltip="Moving average period length")
i_AtrLength         = input.int(5, "ATR Length", group=G_STRATEGY, tooltip="ATR period length")
i_TrailStopSource   = input.source(low, "Trail Stop Source", group=G_EXIT, tooltip="Lowest price source for trailing stop")
i_TrailStopLookback = input.int(7, "Trail Stop Lookback", group=G_EXIT, tooltip="How many bars to look back for trailing price source")
i_TrailStopMulti    = input.float(0.2, "Trailing Stop Ratchet Multiplier", group=G_EXIT, tooltip="When momentum is yellow (caution), shrink ATR distance for TS by this much")
i_StartTime         = input(timestamp("01 Jan 2000 13:30 +0000"), "Start Filter", group=G_FILTER, tooltip="Start date & time to begin searching for setups")
i_EndTime           = input(timestamp("1 Jan 2099 19:30 +0000"), "End Filter", group=G_FILTER, tooltip="End date & time to stop searching for setups")

// Define custom security function which does not repaint
RequestSecurity_NonRP(_market, _res, _exp) => request.security(_market, _res, _exp[barstate.isrealtime ? 1 : 0])[barstate.isrealtime ? 0 : 1]

// Define date filter check
DateFilter(int start, int end) => time >= start and time <= end

// Get indicator values
float   atrValue    = ta.atr(i_AtrLength)
float   emaValue    = ta.ema(close, i_EmaLength)
float   htfEmaValue = RequestSecurity_NonRP(syminfo.tickerid, i_HigherTimeframe, emaValue)
float   marketPrice = close

// Check for bullishness / bearish volatility caution
bool    isBullish   = marketPrice > htfEmaValue
bool    isCaution   = isBullish and (ta.highest(high, 7) - low > (atrValue * 1.5) or marketPrice < emaValue) 

// Set momentum color
color bgCol = color.red
if isBullish[1]
    bgCol := color.green
if isCaution[1]
    bgCol := color.orange

// Handle strategy entry, and reset trailing stop
var float trailStop = na
if isBullish and strategy.position_size == 0 and not isCaution
    strategy.entry(id="Buy", direction=strategy.long)
    trailStop := na

// Update trailing stop
float temp_trailStop = ta.highest(i_TrailStopSource, i_TrailStopLookback) - (isCaution[1] ? atrValue * i_TrailStopMulti : atrValue)
if strategy.position_size > 0
    if temp_trailStop > trailStop or na(trailStop)
        trailStop := temp_trailStop

// Handle strategy exit
if (close < trailStop or close < htfEmaValue) and barstate.isconfirmed
    strategy.close("Buy", comment="Sell")

// Draw trailing stop, HTF EMA and color-coded momentum indicator
plotshape(true, color=bgCol, style=shape.square, location=location.bottom, size=size.auto, title="Momentum Strength")
plot(htfEmaValue, color=close > htfEmaValue ? color.green : color.red, linewidth=2, title="HTF EMA")
plot(emaValue, color=close > emaValue ? color.green : color.red, linewidth=1, title="CTF EMA")
plot(strategy.position_size[1] > 0 ? trailStop : na, style=plot.style_linebr, color=color.red, title="Stop Loss")

Thêm nữa