Chiến lược giao dịch ngược dựa trên trung bình động động

Tác giả:ChaoZhang, Ngày: 2024-02-27 14:38:45
Tags:

img

Tổng quan

Chiến lược này sử dụng một hệ thống trung bình động kép để xác định các cơ hội đột phá tiềm năng trong các cổ phiếu hoặc tiền điện tử được chọn. Nguyên tắc cốt lõi là mua khi trung bình động ngắn hạn bật trở lại từ dưới trung bình động dài hạn và bán khi giá kiểm tra lại trung bình động dài hạn.

Chiến lược logic

Chiến lược này sử dụng hai đường trung bình di chuyển đơn giản (SMA) với các khoảng thời gian khác nhau làm tín hiệu giao dịch. SMA đầu tiên có khoảng thời gian dài hơn để đại diện cho hướng xu hướng tổng thể. SMA thứ hai có khoảng thời gian ngắn hơn để nắm bắt biến động giá ngắn hạn.

Khi SMA ngắn hạn vượt qua trên SMA dài hạn từ dưới, nó báo hiệu xu hướng tăng giá tổng thể do đó chiến lược mở một vị trí dài. Khi giá rút lại để kiểm tra lại SMA dài hạn, nó cho thấy sự rút lui ngắn hạn đã kết thúc và chiến lược xem xét dừng lại hoặc kiếm lợi nhuận từ vị trí.

Ngoài ra, chiến lược có các điều kiện "đã bán quá mức" và "đã mua quá mức" để tránh giao dịch trong các tình huống cực đoan.

Ưu điểm

  • Hệ thống trung bình động kép xác định hiệu quả xu hướng trung hạn
  • Kết hợp các ưu điểm của xu hướng theo dõi và pullback giao dịch
  • Các điều kiện bán quá mức và mua quá mức được nhúng vào giảm các giao dịch không cần thiết

Phân tích rủi ro

  • Khó xác định chính xác thời gian cuối rút lui, có thể dừng lại sớm
  • Không thể nhanh chóng cắt giảm tổn thất khi thay đổi xu hướng, có thể bị rút lớn
  • Điều chỉnh tham số kém có thể dẫn đến giao dịch quá mức hoặc giao dịch thận trọng

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

Có thêm không gian để tối ưu hóa chiến lược này:

  1. Sử dụng các chỉ số kỹ thuật tiên tiến hơn như Bollinger Bands và KD để đánh giá sóng giá và xu hướng
  2. Bao gồm nhiều yếu tố như thay đổi khối lượng, biến động để xác định hoàn thành pullback
  3. Động thái kích thước vị trí để tối đa hóa tiềm năng lợi nhuận
  4. Tối ưu hóa logic dừng lỗ với KAMA, đám mây Ichimoku và tín hiệu khung thời gian thấp hơn

Kết luận

Chiến lược này kết hợp các điểm mạnh của giao dịch theo xu hướng và rút lui bằng cách sử dụng hệ thống trung bình động kép để phát hiện cơ hội. Đồng thời, các điều kiện mua quá mức / bán quá mức được nhúng tránh việc mở vị trí không cần thiết. Đây là một chiến lược giao dịch lượng rất thực tế đáng nghiên cứu sâu hơn và tối ưu hóa.


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

// @version=5
strategy("Profitable Pullback Trading Strategy", overlay=true,initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// Inputs
ma_length1 = input.int(280,'MA length 1', step = 10,group = 'Moving Avg. Parameters', inline = 'MA')
ma_length2 = input.int(13,'MA length 2', step = 1,group = 'Moving Avg. Parameters', inline = 'MA')
sl = input.float(title="Stop Loss (%)", defval=0.07, step=0.1, group="Moving Avg. Parameters")
too_deep    = input.float(title="Too Deep (%)", defval=0.27, step=0.01, group="Too Deep and Thin conditions", inline = 'Too')
too_thin    = input.float(title="Too Thin (%)", defval=0.03, step=0.01, group="Too Deep and Thin conditions", inline = 'Too')

// Calculations
ma1 = ta.sma(close,ma_length1)
ma2 = ta.sma(close,ma_length2)
too_deep2   = (ma2/ma1-1) < too_deep
too_thin2   = (ma2/ma1-1) > too_thin

// Entry and close condtions
var float buy_price = 0
buy_condition = (close > ma1) and (close < ma2) and strategy.position_size == 0 and too_deep2 and too_thin2
close_condition1  = (close > ma2) and strategy.position_size > 0 and (close < low[1])
stop_distance = strategy.position_size > 0 ? ((buy_price - close) / close) : na
close_condition2 = strategy.position_size > 0 and stop_distance > sl
stop_price = strategy.position_size > 0 ? buy_price - (buy_price * sl) : na

// Entry and close orders
if buy_condition
    strategy.entry('Long',strategy.long)
if buy_condition[1]
    buy_price := open
if close_condition1 or close_condition2
    strategy.close('Long',comment="Exit" + (close_condition2 ? "SL=true" : ""))
    buy_price := na

plot(ma1,color = color.blue)
plot(ma2,color = color.orange)



Thêm nữa