이 전략은 선형 회귀 트렌드 라인을 기반으로 하는 브레이크아웃 거래 시스템이다. 가격이 특정 비율로 트렌드 라인을 통과 할 때 거래를 실행하며, 스톱 로스, 영리 및 포지션 역전 메커니즘을 통합합니다. 핵심 개념은 잘못된 신호를 처리하기 위해 포지션 역전을 사용하여 트렌드 라인 브레이크에 따른 지속적인 가격 움직임을 포착하는 것입니다.
이 전략은 일정한 기간에 걸쳐 선형 회귀 트렌드 라인을 계산하기 위해 ta.linreg 함수를 주요 트렌드 지표로 사용합니다. 가격이 설정된 임계보다 더 많은 트렌드 라인을 넘어 갈 때 긴 신호가 생성되며 가격이 아래로 넘어갈 때 짧은 신호가 발생합니다. 이 전략은 단방향 포지션 메커니즘을 사용하여 언제든지 긴 또는 짧은 포지션을 허용합니다. 리스크 관리에는 스톱 로스 및 영리 조건과 함께 스톱이 맞출 때 자동으로 커진 크기의 포지션을 여는 포지션 역전 메커니즘이 포함됩니다.
이 전략은 선형 회귀 트렌드 라인 및 브레이크아웃 거래 개념을 사용하여 완전한 거래 시스템을 구축합니다. 그것은 좋은 트렌드 추적 기능을 보여주는 스톱 로스, 영리 및 포지션 역전 메커니즘을 통해 위험을 관리합니다. 그러나 매개 변수 설정 및 시장 환경 선택에 대한 신중한 고려가 필요합니다. 라이브 거래 전에 철저한 매개 변수 최적화 및 백테스팅이 권장됩니다. 향후 개선은 추가 기술 지표를 통합하고 안정성과 적응력을 향상시키기 위해 거래 규칙을 최적화하는 데 초점을 맞출 수 있습니다.
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-25 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=6 strategy("BTC Trendline Strategy - 1min - One Direction", overlay=true) // 输入设置 stop_loss_pct = input.float(10, title="止损百分比", minval=0.1, step=0.1) / 100 take_profit_pct = input.float(10, title="止盈百分比", minval=0.1, step=0.1) / 100 multiplier = input.int(2, title="止损触发时翻倍倍数", minval=1) length = input.int(20, title="趋势线计算周期", minval=1) breakout_threshold = input.float(1, title="突破幅度百分比", minval=0.1) / 100 // 设置突破的幅度条件 max_qty = 1000000000000.0 // 设置最大允许的交易量 // 计算线性回归趋势线 regression = ta.linreg(close, length, 0) // 使用线性回归计算价格的趋势线 // 绘制趋势线 plot(regression, color=color.blue, linewidth=2, title="线性回归趋势线") // 判断突破条件:增加一个价格偏差条件 long_condition = close > (regression * (1 + breakout_threshold)) // 当前价格高于趋势线且突破幅度超过设定百分比时做多 short_condition = close < (regression * (1 - breakout_threshold)) // 当前价格低于趋势线且突破幅度超过设定百分比时做空 // 确保每次只能有一个方向持仓:避免多空同时持仓 if (strategy.position_size == 0) // 当前没有持仓时 if (long_condition) strategy.entry("Long", strategy.long) if (short_condition) strategy.entry("Short", strategy.short) // 止损和止盈设置 long_stop_loss = strategy.position_avg_price * (1 - stop_loss_pct) long_take_profit = strategy.position_avg_price * (1 + take_profit_pct) short_stop_loss = strategy.position_avg_price * (1 + stop_loss_pct) short_take_profit = strategy.position_avg_price * (1 - take_profit_pct) // 绘制止损和止盈线,便于调试 plot(long_stop_loss, color=color.red, linewidth=1, title="Long Stop Loss") plot(long_take_profit, color=color.green, linewidth=1, title="Long Take Profit") plot(short_stop_loss, color=color.red, linewidth=1, title="Short Stop Loss") plot(short_take_profit, color=color.green, linewidth=1, title="Short Take Profit") // 止损和止盈退出策略 strategy.exit("LongExit", from_entry="Long", stop=long_stop_loss, limit=long_take_profit) strategy.exit("ShortExit", from_entry="Short", stop=short_stop_loss, limit=short_take_profit) // 反手交易逻辑 reverse_qty = math.min(math.abs(strategy.position_size) * multiplier, max_qty) // 限制最大交易量 if (strategy.position_size < 0 and close > short_stop_loss) // 空单止损时,反手做多并翻倍仓位 strategy.entry("Long Reverse", strategy.long, qty=reverse_qty) if (strategy.position_size > 0 and close < long_stop_loss) // 多单止损时,反手做空并翻倍仓位 strategy.entry("Short Reverse", strategy.short, qty=reverse_qty) // 打印日志帮助调试止损 if (strategy.position_size > 0) label.new(bar_index, close, text="Long SL: " + str.tostring(long_stop_loss), color=color.green, style=label.style_label_up) if (strategy.position_size < 0) label.new(bar_index, close, text="Short SL: " + str.tostring(short_stop_loss), color=color.red, style=label.style_label_down)