Chiến lược này là một chiến lược theo dõi xu hướng được thiết kế dựa trên lý thuyết đột phá kênh. Nó xây dựng một kênh sử dụng giá cao nhất và giá thấp nhất trong một khoảng thời gian nhất định và tạo ra các tín hiệu giao dịch khi giá phá vỡ kênh. Chiến lược này phù hợp với thị trường xu hướng và có thể nắm bắt hướng xu hướng của giá để theo dõi xu hướng.
Chiến lược đầu tiên tính toán giá cao nhất và giá thấp nhất trong một khoảng thời gian dài để xây dựng dải trên và dải dưới của kênh. Khi giá đóng phá vỡ dải trên, một vị trí dài được mở. Khi giá đóng phá vỡ dải dưới, một vị trí ngắn được mở. Vị trí sẽ được đóng khi giá giảm trở lại kênh.
Chiến lược cũng vẽ một chỉ số EMA với chiều dài * 2 để xác định hướng xu hướng. Khi giá vượt qua dải trên, nếu EMA đang có xu hướng tăng, quyết định dài được tăng cường.
Tóm lại, đây là một chiến lược theo dõi xu hướng đơn giản dựa trên việc phá vỡ kênh để nắm bắt xu hướng. Nó có khả năng theo dõi xu hướng mạnh mẽ và có thể đạt được lợi nhuận tốt trong các thị trường xu hướng. Nhưng nó cũng có một số rủi ro và cần tối ưu hóa hơn nữa để cải thiện sự ổn định. Thông qua điều chỉnh tham số, thiết lập dừng lỗ và kết hợp với các chỉ số khác, chiến lược này có thể được áp dụng cho giao dịch trực tiếp.
/*backtest start: 2023-11-15 00:00:00 end: 2023-11-22 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 initial_capital = 1000, default_qty_value = 90, default_qty_type = strategy.percent_of_equity, pyramiding = 0, commission_value = 0.002, commission_type = strategy.commission.percent, calc_on_every_tick = true length_val = 2 max_bars_back = 1440 risk_max_drawdown = 9 strategy("Channel Break",max_bars_back=max_bars_back,initial_capital = initial_capital,default_qty_value = default_qty_value,default_qty_type = default_qty_type,pyramiding = pyramiding,commission_value = commission_value,commission_type = commission_type,calc_on_every_tick = calc_on_every_tick) // strategy.risk.max_drawdown(risk_max_drawdown, strategy.percent_of_equity) length = input(title="Length", minval=1, maxval=1000, defval=length_val) upBound = highest(high, length) downBound = lowest(low, length) //plot (upBound) //plot (downBound) //plot (close, color=red) //plot (ema(close,length * 2), color=green) // if (not na(close[length]) and time>timestamp(2018, 02, 24, 0, 00) ) strategy.entry("Buy", strategy.long, stop=upBound + syminfo.mintick, comment="Buy") strategy.entry("Short", strategy.short, stop=downBound - syminfo.mintick, comment="Short") position = strategy.position_size //plot(position , title="equity", color=red,style=cross,linewidth=4) plot(variance(position,2)>0?1:0,style=circles,linewidth=4) message = "" if (position > 0) message = "BTCUSD L: " + tostring(strategy.position_size) na(position) if (position < 0) message = "BTCUSD S: " + tostring(strategy.position_size) na(position) alertcondition(variance(strategy.position_size,2) > 0, "test", message )