Chiến lược này là một hệ thống giao dịch thời gian năng động dựa trên biến động, kết hợp các tính năng theo dõi xu hướng và quản lý rủi ro.
Logic cốt lõi của chiến lược dựa trên các thành phần chính sau: 1. Tính toán kênh biến động: Sử dụng chỉ số ATR (Mức trung bình thực sự) để đo biến động thị trường và xây dựng một kênh biến động năng động. 2. Cơ chế xác định xu hướng: Định hướng xu hướng thông qua vị trí tương đối của giá đối với kênh biến động. Xu hướng tăng được thiết lập khi giá vượt qua trên kênh và xu hướng giảm khi nó vượt qua bên dưới. 3. Hệ thống quản lý vị trí: Tính năng tính toán kích thước vị trí dựa trên vốn ban đầu và rủi ro được đặt trước cho mỗi giao dịch, kết hợp với khoảng cách dừng lỗ thời gian thực, đảm bảo sự tiếp xúc rủi ro nhất quán cho mỗi giao dịch. Cơ chế kiểm soát rủi ro: Thực hiện lệnh dừng lỗ năng động dựa trên kênh biến động, tự động đóng các vị trí khi giá đạt mức dừng và buộc đóng vị trí trước khi thị trường đóng cửa để tránh rủi ro qua đêm.
Đây là một hệ thống giao dịch hoàn chỉnh kết hợp biến động, theo dõi xu hướng và quản lý rủi ro. Chiến lược nắm bắt những thay đổi xu hướng thông qua các kênh biến động trong khi sử dụng các phương pháp quản lý vốn khoa học để kiểm soát rủi ro. Mặc dù hiệu suất có thể kém tối ưu trong các thị trường khác nhau, thông qua tối ưu hóa tham số thích hợp và các cơ chế lọc bổ sung, nó có thể hoạt động ổn định trong hầu hết các môi trường thị trường.
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-10 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("BNF FUT 5 min Volatility Strategy", overlay=true) // Inputs length = input.int(20, "Length", minval=2) src = input.source(close, "Source") factor = input.float(2.0, "Multiplier", minval=0.25, step=0.25) initial_capital = input.float(100000, "Initial Capital ($)") risk_per_trade = input.float(1.0, "Risk per Trade (%)", minval=0.1, maxval=10.0) // Volatility Stop Function volStop(src, atrlen, atrfactor) => if not na(src) var max = src var min = src var uptrend = true var float stop = na atrM = nz(ta.atr(atrlen) * atrfactor, ta.tr) max := math.max(max, src) min := math.min(min, src) stop := nz(uptrend ? math.max(stop, max - atrM) : math.min(stop, min + atrM), src) uptrend := src - stop >= 0.0 if uptrend != nz(uptrend[1], true) max := src min := src stop := uptrend ? max - atrM : min + atrM [stop, uptrend] // Calculate Volatility Stop [vStop, uptrend] = volStop(src, length, factor) // Plot Volatility Stop plot(vStop, "Volatility Stop", style=plot.style_cross, color=uptrend ? #009688 : #F44336) // Risk Management and Position Sizing atr = ta.atr(length) stop_distance = math.abs(close - vStop) // Distance to stop level position_size = (initial_capital * (risk_per_trade / 100)) / stop_distance // Position size based on risk per trade position_size := math.max(position_size, 1) // Ensure minimum size of 1 // Strategy Logic if not na(vStop) if uptrend and not uptrend[1] // Transition to uptrend strategy.close("Short") strategy.entry("Long", strategy.long, qty=position_size) if not uptrend and uptrend[1] // Transition to downtrend strategy.close("Long") strategy.entry("Short", strategy.short, qty=position_size) // Exit on Stop Hit if strategy.position_size > 0 and low < vStop // Exit long if stop hit strategy.close("Long", comment="Stop Hit") if strategy.position_size < 0 and high > vStop // Exit short if stop hit strategy.close("Short", comment="Stop Hit") if (hour == 15 and minute == 15) strategy.close_all()