Chiến lược giao dịch thoát kênh trung bình di chuyển

Tác giả:ChaoZhang, Ngày: 2024-01-29 14:31:25
Tags:

img

Tổng quan

Chiến lược này dựa trên các nguyên tắc chéo vàng và chéo chết của các đường trung bình động đơn giản, đưa ra quyết định mua và bán dựa trên sự chéo chéo của đường trung bình động 7 ngày và 14 ngày. Nó tạo ra tín hiệu mua khi MA 7 ngày vượt qua trên MA 14 ngày từ dưới, và tín hiệu bán khi MA 7 ngày vượt qua dưới MA 14 ngày từ trên. Chiến lược cũng có các chức năng dừng lỗ, lấy lợi nhuận và dừng kéo theo để khóa lợi nhuận và kiểm soát rủi ro.

Chiến lược logic

Định hướng giao dịch cơ bản của chiến lược này dựa trên các nguyên tắc chéo của các đường trung bình động 7 ngày và 14 ngày. MA 7 ngày phản ánh xu hướng giá ngắn hạn, trong khi MA 14 ngày phản ánh xu hướng trung hạn. Khi MA ngắn hạn vượt qua trên MA trung hạn từ dưới, nó báo hiệu rằng xu hướng ngắn hạn đang tăng cường, làm cho nó trở thành thời điểm tốt để đi dài. Ngược lại, khi MA ngắn hạn vượt qua dưới MA trung hạn từ trên, nó báo hiệu rằng xu hướng ngắn hạn đang suy yếu, vì vậy người ta nên đóng các vị trí hoặc đi ngắn.

Đặc biệt, chiến lược này tính toán các đường trung bình di chuyển đơn giản 7 ngày và 14 ngày bằng chỉ số SMA. Sau mỗi hình thành nến, nó so sánh các giá trị hiện tại của đường 7 ngày và đường 14 ngày. Nếu đường 7 ngày vượt qua đường 14 ngày, một tín hiệu dài được tạo ra để đi dài. Nếu đường 7 ngày vượt qua dưới đường 14 ngày, một tín hiệu ngắn được tạo ra để đi ngắn.

Ngoài ra, chiến lược cũng đặt các chức năng dừng lỗ, lấy lợi nhuận và dừng lại để khóa lợi nhuận và kiểm soát rủi ro. Các thông số có thể được tối ưu hóa dựa trên kết quả backtest.

Ưu điểm

Chiến lược này có những lợi thế sau:

  1. Quy tắc đơn giản và rõ ràng, dễ hiểu và thực hiện, phù hợp cho người mới bắt đầu học.
  2. Các nguyên tắc chéo trung bình động được thử nghiệm thời gian và hiệu quả, với tỷ lệ thắng tương đối cao.
  3. Được trang bị với dừng lỗ, lấy lợi nhuận và dừng lại để kiểm soát rủi ro hiệu quả.
  4. Một số tham số, thuận tiện để thử nghiệm và tối ưu hóa.

Rủi ro và biện pháp đối phó

Ngoài ra còn có một số rủi ro với chiến lược này:

  1. Mức trung bình động có thể chậm trong việc phản ánh sự thay đổi xu hướng, có khả năng gây ra tổn thất lớn khi xu hướng đảo ngược.
  2. Các tín hiệu chéo thường xuyên trong các thị trường khác nhau tạo ra nhiều tín hiệu sai, làm suy yếu hiệu quả của chiến lược.

Để đối phó với những rủi ro này, các biện pháp đối phó sau đây có thể được xem xét:

  1. Thêm các chỉ số khác như MACD và KDJ để lọc các tín hiệu chéo và tránh các tín hiệu sai ở các điểm chuyển hướng xu hướng.
  2. Mở rộng phạm vi dừng lỗ, rút ngắn thời gian giữ để giảm tác động tổn thất duy nhất.
  3. Tối ưu hóa các thông số trung bình động dựa trên các điều kiện thị trường khác nhau, sử dụng thời gian dài hơn cho các thị trường khác nhau.

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

Chiến lược này có thể được tối ưu hóa trong các khía cạnh sau:

  1. Kiểm tra các kết hợp và tham số MA khác nhau để tìm ra thiết lập tối ưu.
  2. Thêm các chỉ số khác để lọc tín hiệu để cải thiện hiệu quả chiến lược.
  3. Tối ưu hóa dừng lỗ, lấy các tham số lợi nhuận để giảm rút và tăng tỷ lệ lợi nhuận.
  4. Điều chỉnh các thông số dựa trên các sản phẩm và phiên giao dịch khác nhau.

Kết luận

Tóm lại, chiến lược này rất phù hợp cho người mới bắt đầu học. Logic là đơn giản và dễ hiểu và thực hiện. Nó cũng có khả năng thích nghi thị trường tương đối tốt, với không gian rộng rãi để điều chỉnh tham số và tối ưu hóa để đạt được lợi nhuận ổn định.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © bensonsuntw

strategy("Strategy Template[Benson]", pyramiding=1, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

backtest_year = input(2019, type=input.integer, title='backtest_year')
backtest_month = input(01, type=input.integer, title='backtest_month', minval=1, maxval=12)
backtest_day = input(01, type=input.integer, title='backtest_day', minval=1, maxval=31)
start_time = timestamp(backtest_year, backtest_month, backtest_day, 00, 00)
stop_loss_and_tp = input(title="Enable Stop Loss and Take Profit", type=input.bool, defval=true)
trail_stop = input(title="Enable Trail Stop", type=input.bool, defval=true)
buy_stop_loss = input(0.2, type=input.float, title='buy_stop_loss')
sell_stop_loss = input(0.1, type=input.float, title='sell_stop_loss')
buy_tp = input(0.4, type=input.float, title='buy_tp')
sell_tp =input(0.2, type=input.float, title='sell_tp')
trail_stop_long = input(1.1, type=input.float, title='trail_stop_long')
trail_stop_short = input(0.9, type=input.float, title='trail_stop_short')
trail_stop_long_offset = input(0.05, type=input.float, title='trail_stop_long_offset')
trail_stop_short_offset = input(0.05, type=input.float, title='trail_stop_short_offset')


// you can set your own logic here
shortCondition = crossunder(sma(close,7),sma(close,14))
longCondition = crossover(sma(close,7),sma(close,14))

strategy.entry("Buy", strategy.long, when=longCondition  )
strategy.close("Buy", when=shortCondition)
strategy.exit("Close Buy","Buy", limit= stop_loss_and_tp?strategy.position_avg_price * (1+buy_tp):na, stop = stop_loss_and_tp?strategy.position_avg_price * (1-buy_stop_loss):na,trail_price=trail_stop?strategy.position_avg_price *trail_stop_long:na,trail_offset=trail_stop?-strategy.position_avg_price *trail_stop_long_offset:na)

strategy.entry("Sell", strategy.short, when=shortCondition)
strategy.close("Sell", when=longCondition)
strategy.exit("Close Sell","Sell", limit= stop_loss_and_tp?strategy.position_avg_price * (1-sell_tp):na, stop = stop_loss_and_tp?strategy.position_avg_price * (1+sell_stop_loss):na,trail_price=trail_stop?strategy.position_avg_price *trail_stop_short:na,trail_offset=trail_stop?strategy.position_avg_price *trail_stop_short_offset:na)


net_profit = strategy.netprofit + strategy.openprofit

plot(net_profit, title="Net Profit", linewidth=2, style=plot.style_area, transp=50, color=net_profit >= 0 ? #26A69A : color.red)






Thêm nữa