Chiến lược theo dõi Pullback Moving Average

Tác giả:ChaoZhang, Ngày: 2024-03-28 18:00:05
Tags:

img

Tổng quan

Ý tưởng chính của chiến lược này là sử dụng hai đường trung bình động với các khoảng thời gian khác nhau để nắm bắt cơ hội phục hồi sau khi thị trường giảm. Khi giá vượt quá đường trung bình động dài hạn và rút trở lại đường trung bình động ngắn hạn, chiến lược mở một vị trí dài và đóng vị trí khi giá tăng trở lại trên đường trung bình động ngắn hạn hoặc chạm mức giá dừng lỗ. Bằng cách tìm kiếm các cơ hội mua trong thời gian giảm trong một xu hướng, chiến lược nhằm mục đích kiếm lợi nhuận từ thị trường xu hướng.

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

  1. Tính toán hai đường trung bình động với các khoảng thời gian khác nhau (MA1 và MA2), trong đó MA1 là đường trung bình động dài hạn và MA2 là đường trung bình động ngắn hạn.
  2. Khi giá đóng là trên MA1 và dưới MA2, và không có vị trí hiện tại, và thời gian hiện tại nằm trong phạm vi thời gian giao dịch được chỉ định, chiến lược sẽ mở một vị trí dài.
  3. Ghi lại giá nhập là buyPrice và tính giá stop-loss stopPrice (tức là, i_stopPercent phần trăm dưới giá nhập).
  4. Khi giá đóng lại tăng trở lại trên MA2 và i_lowerClose là sai, hoặc khi giá đóng giảm dưới giá stop-loss stopPrice, chiến lược đóng vị trí.
  5. Nếu i_lowerClose là đúng, chiến lược sẽ đóng vị trí khi giá đóng là trên MA2 và giá đóng của nến trước đó là dưới MA2.

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

  1. Theo dõi xu hướng: Bằng cách xác định xu hướng tổng thể dựa trên vị trí tương đối của giá và đường trung bình động dài hạn, chiến lược tìm kiếm các cơ hội nhập vào xu hướng.
  2. Pullback mua: Bằng cách tìm kiếm các cơ hội mua khi giá kéo trở lại mức trung bình động ngắn hạn trong một xu hướng tăng, chiến lược cải thiện hiệu quả chi phí của các điểm nhập cảnh.
  3. Bảo vệ dừng lỗ: Thiết lập giá dừng lỗ giúp kiểm soát hiệu quả rủi ro giảm khi giá di chuyển bất lợi với một cường độ nhất định.
  4. Các tham số linh hoạt: Người dùng có thể linh hoạt thiết lập các tham số như thời gian trung bình động, tỷ lệ dừng lỗ và liệu có nên đóng vị trí khi giá đóng của nến trước đó thấp hơn trung bình động ngắn hạn, theo sở thích của họ.

Rủi ro chiến lược

  1. Tối ưu hóa tham số: Các cài đặt tham số khác nhau có tác động đáng kể đến hiệu suất của chiến lược, đòi hỏi tối ưu hóa tham số và kiểm tra ngược trong các môi trường thị trường khác nhau để tìm ra sự kết hợp các tham số tối ưu.
  2. Thị trường hỗn loạn: Trong các thị trường hỗn loạn, giá thường dao động giữa trung bình động dài hạn và ngắn hạn, có khả năng dẫn đến việc mở và đóng các vị trí thường xuyên và làm xói mòn chi phí giao dịch.
  3. Sự đảo ngược xu hướng: Khi xu hướng thị trường đảo ngược, chiến lược có thể gặp phải những tổn thất liên tiếp. Tại thời điểm này, cần phải kết hợp các chỉ số hoặc tín hiệu khác để đánh giá sự đảo ngược xu hướng và điều chỉnh chiến lược kịp thời.
  4. Các sự kiện thiên nga đen: Khi thị trường trải qua các sự kiện đột ngột lớn, không thể đoán trước, giá có thể biến động mạnh mẽ, kích hoạt dừng lỗ và tiếp xúc với chiến lược với tổn thất đáng kể.

Hướng dẫn tối ưu hóa chiến lược

  1. Phán quyết xu hướng: giới thiệu nhiều chỉ số đánh giá xu hướng hơn, chẳng hạn như ADX, trước khi mở một vị trí để xác nhận sức mạnh và hướng của xu hướng hiện tại và cải thiện độ chính xác của tín hiệu nhập cảnh.
  2. Stop-loss động: Điều chỉnh động mức stop-loss dựa trên các chỉ số như biến động giá và ATR, mở rộng stop-loss khi biến động giá cao và thắt chặt khi biến động giá thấp.
  3. Kích thước vị trí: Điều chỉnh động kích thước vị trí của mỗi mục dựa trên các yếu tố như sức mạnh xu hướng thị trường và biến động giá, tăng kích thước vị trí khi xu hướng mạnh và biến động vừa phải và giảm kích thước vị trí khi xu hướng yếu hoặc biến động quá cao.
  4. Bảo hiểm ngắn dài: Xem xét đồng thời theo dõi các tín hiệu từ cả hai bên dài và ngắn và bảo hiểm các vị trí trên các thị trường hoặc khung thời gian khác nhau để giảm rủi ro tổng thể của chiến lược.

Tóm lại

Chiến lược theo dõi Pullback Moving Average nắm bắt các cơ hội giao dịch dài trong thời gian giảm giá trong xu hướng tăng bằng cách sử dụng vị trí tương đối của hai trung bình động với các giai đoạn khác nhau. Chiến lược này phù hợp với thị trường xu hướng, và với các thiết lập tham số và dừng lỗ thích hợp, nó có thể tạo ra lợi nhuận ổn định trong điều kiện xu hướng. Tuy nhiên, chiến lược này phải đối mặt với một số rủi ro trong thị trường hỗn loạn và trong thời gian đảo ngược xu hướng. Bằng cách giới thiệu nhiều chỉ số hơn, tối ưu hóa kích thước vị trí, thực hiện dừng lỗ động và các phương pháp khác, hiệu suất và sự ổn định của chiến lược này có thể được cải thiện hơn nữa.


/*backtest
start: 2023-03-22 00:00:00
end: 2024-03-27 00:00:00
period: 1d
basePeriod: 1h
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/
// © contapessoal_ivan
// @version=5
strategy("Pullback Strategy", 
     overlay=true, 
     initial_capital=1000,
     default_qty_type=strategy.percent_of_equity, 
     default_qty_value=100, // 100% of balance invested on each trade
     commission_type=strategy.commission.cash_per_contract, 
     commission_value=0.005) // Interactive Brokers rate

// Get user input
i_ma1           = input.int(title="MA 1 Length", defval=200, step=10, group="Strategy Parameters", tooltip="Long-term MA")
i_ma2           = input.int(title="MA 2 Length", defval=10, step=10, group="Strategy Parameters", tooltip="Short-term MA")
i_stopPercent   = input.float(title="Stop Loss Percent", defval=0.10, step=0.1, group="Strategy Parameters", tooltip="Failsafe Stop Loss Percent Decline")
i_lowerClose    = input.bool(title="Exit On Lower Close", defval=false, group="Strategy Parameters", tooltip="Wait for a lower-close before exiting above MA2")
i_startTime     = input(title="Start Filter", defval=timestamp("26 Jan 2023 00:00 +0000"), group="Time Filter", tooltip="Start date & time to begin searching for setups")
i_endTime       = input(title="End Filter", defval=timestamp("26 Mar 2024 23:59 +0000"), group="Time Filter", tooltip="End date & time to stop searching for setups")

// Get indicator values
ma1 = ta.sma(close, i_ma1)
ma2 = ta.sma(close, i_ma2)

// Check filter(s)
f_dateFilter = true

// Check buy/sell conditions
var float buyPrice = 0
buyCondition    = close > ma1 and close < ma2 and strategy.position_size == 0 and f_dateFilter
sellCondition   = close > ma2 and strategy.position_size > 0 and (not i_lowerClose or close < low[1])
stopDistance    = strategy.position_size > 0 ? ((buyPrice - close) / close) : na
stopPrice       = strategy.position_size > 0 ? buyPrice - (buyPrice * i_stopPercent) : na
stopCondition   = strategy.position_size > 0 and stopDistance > i_stopPercent

// Enter positions
if buyCondition
    strategy.entry(id="Long", direction=strategy.long)

if buyCondition[1]
    buyPrice := open

// Exit positions
if sellCondition or stopCondition
    strategy.close(id="Long", comment="Exit" + (stopCondition ? "SL=true" : ""))
    buyPrice := na

// Draw pretty colors
plot(buyPrice, color=color.lime, style=plot.style_linebr)
plot(stopPrice, color=color.red, style=plot.style_linebr, offset=-1)
plot(ma1, color=color.blue)
plot(ma2, color=color.orange)


Thêm nữa