Chiến lược theo dõi lượt gọi trung bình di động

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

移动平均回调追踪策略

Thông tin chi tiết

Ý tưởng chính của chiến lược này là sử dụng hai đường trung bình chuyển động trong hai chu kỳ khác nhau để nắm bắt cơ hội phục hồi sau khi thị trường quay trở lại. Chiến lược này mở nhiều vị trí khi giá trên đường trung bình dài hạn và quay trở lại đường trung bình ngắn hạn, và dừng lại khi giá quay trở lại đường trung bình ngắn hạn hoặc chạm mức giá dừng. Chiến lược này tìm kiếm cơ hội mua lại trong xu hướng, cố gắng kiếm lợi nhuận trong tình huống xu hướng.

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

  1. Tính toán đường trung bình di chuyển của hai chu kỳ khác nhau (MA1 và MA2), trong đó MA1 là đường trung bình dài và MA2 là đường trung bình ngắn.
  2. Khi giá đóng cửa ở trên MA1 và dưới MA2, đồng thời không có cổ phiếu hiện tại, và thời gian hiện tại trong phạm vi thời gian giao dịch được thiết lập, chiến lược mở nhiều hơn.
  3. Lưu ý giá mua mở và tính giá dừng lỗ (i_stopPercent phần trăm giảm giá mở).
  4. Khi giá đóng lại trên MA2 và i_lowerClose là false, hoặc giá đóng giảm, stopPrice, chiến lược ngang hàng.
  5. Nếu i_lowerClose là true, giá đóng cửa cao hơn MA2 và giá đóng cửa dưới MA2 của đường K trước đó là ngang hàng.

Lợi thế chiến lược

  1. Theo dõi xu hướng: Xác định xu hướng tổng thể hiện tại bằng cách xác định mối quan hệ giữa giá và vị trí đường trung bình dài hạn và tìm kiếm cơ hội gia nhập trong xu hướng.
  2. Mua lại: Tìm kiếm cơ hội mua lại giá sang đường trung bình ngắn hạn trong xu hướng tăng, làm tăng tỷ lệ giá điểm mua.
  3. Bảo vệ dừng lỗ: đặt mức giá dừng lỗ, tự động cân bằng khi biến động ngược giá đạt đến một mức độ nhất định, kiểm soát hiệu quả rủi ro giảm.
  4. Các tham số linh hoạt: Người dùng có thể tùy thuộc vào sở thích của mình, linh hoạt thiết lập chu kỳ đường trung bình, tỷ lệ stoploss, liệu giá đóng cửa K trước đó có được ổn định dưới đường trung bình ngắn hạn hay không.

Rủi ro chiến lược

  1. Tối ưu hóa tham số: Các thiết lập tham số khác nhau có ảnh hưởng lớn đến hiệu suất chiến lược, cần tối ưu hóa và kiểm tra lại các tham số trong các môi trường thị trường khác nhau để tìm kiếm sự kết hợp tốt nhất.
  2. Thị trường biến động: Trong thị trường biến động, giá thường xuyên biến động giữa đường trung bình dài và ngắn hạn, có thể dẫn đến chiến lược thường xuyên mở ngang, mất nhiều chi phí giao dịch.
  3. Sự thay đổi xu hướng: Khi xu hướng thị trường thay đổi, chiến lược có thể gây ra tổn thất liên tục.
  4. Black Swan: Khi thị trường xảy ra một sự kiện bất ngờ lớn, không thể dự đoán trước, có thể dẫn đến biến động giá mạnh mẽ, và chiến lược sau khi kích hoạt dừng lỗ sẽ phải đối mặt với tổn thất lớn hơn.

Chiến lược tối ưu hóa hướng

  1. Xác định xu hướng: giới thiệu nhiều chỉ số xác định xu hướng hơn, chẳng hạn như ADX, trước khi mở giao dịch, để xác định cường độ và hướng của xu hướng hiện tại, cải thiện độ chính xác của tín hiệu mở giao dịch.
  2. Đánh giá stop-loss động: Đánh giá stop-loss theo các chỉ số như tỷ lệ biến động giá, ATR và các chỉ số khác.
  3. Quản lý vị trí: Tùy thuộc vào các yếu tố như sức mạnh của xu hướng thị trường, tỷ lệ biến động giá, thay đổi kích thước vị trí theo từng lần mở, tăng vị trí khi xu hướng mạnh và tỷ lệ biến động trung bình, giảm vị trí khi xu hướng yếu hoặc tỷ lệ biến động quá cao.
  4. Đánh giá đa không gian: xem xét đồng thời theo dõi tín hiệu của cả hai bên đa không gian, và đầu tư vào các thị trường hoặc chu kỳ 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 chuyển động trung bình quay trở lại thông qua mối quan hệ vị trí tương đối của hai đường thẳng hai chu kỳ khác nhau, nắm bắt nhiều cơ hội để quay trở lại giá trong xu hướng tăng. Chiến lược này phù hợp với thị trường xu hướng, có thể thu được lợi nhuận ổn định trong thị trường xu hướng bằng cách đặt các thông số và dừng lỗ thích hợp. Nhưng chiến lược này có một số rủi ro trong thị trường biến động và khi xu hướng đảo ngược.


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


Nhiều hơn nữa