이 전략은 브레이크아웃 및 주파수 필터링에 기반한 트렌드 다음 전략이며, 단지 긴 포지션을 취하는 것입니다. 전략의 주요 아이디어는 현재 트렌드 방향을 결정하기 위해 EMA 지표를 사용하여 가격이 특정 범위 내에서 가장 높은 가격에서 벗어날 때 긴 신호를 생성하고, 너무 자주 포지션을 열지 않도록 트레이딩 주파수를 제어하기 위해 주파수 필터를 사용하는 것입니다. 전략은 또한 위험을 제어하기 위해 스톱 로스 포인트를 설정하고 트렌드가 끝나면 포지션을 닫습니다.
이 전략은 브레이크아웃과 주파수 필터링을 기반으로하는 트렌드 다음 전략이다. 트렌드 방향을 결정하기 위해 EMA 지표를 사용하여 가격 브레이크아웃을 입점 신호로 사용하고, 트레이딩 주파수를 제어하기 위해 주파수 필터를 도입하고, 위험을 제어하기 위해 스톱 로스 포인트를 설정한다. 전략의 장점은 트렌드 추적, 브레이크아웃 확인, 주파수 제어, 스톱 로스 보호 및 동적 포지션 폐쇄에 속하지만, 또한 매개 변수 민감성, 브레이크 실패, 트렌드 인식, 빈번한 거래 및 스톱 로스 위험과 같은 잠재적 위험도 있다. 전략을 더 최적화하기 위해서는 매개 변수 최적화, 신호 필터링, 트렌드 판단, 동적 스톱 로스 및 포지션 관리와 같은 측면에서 출발하여 전략의 안정성과 수익성을 향상시킬 수 있다.
/*backtest start: 2023-05-22 00:00:00 end: 2024-05-27 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Trend Following with Breakout and Frequency Filter (Long Only)", overlay=true) // 输入参数 emaLength = input.int(50, title="EMA长度") lookbackPeriodMin = input.int(80, title="最短回溯期") lookbackPeriodMax = input.int(120, title="最长回溯期") stopLossPct = input.float(2, title="止损百分比") / 100 // 止损百分比 minHoldBars = input.int(10, title="最小持仓K线数量") // 最小持仓K线数量 // 计算EMA ema = ta.ema(close, emaLength) // 计算最高价和最低价 highestHigh = ta.highest(high, lookbackPeriodMax) lowestLow = ta.lowest(low, lookbackPeriodMax) // 定义趋势方向 isBullish = close > ema // 定义突破信号 breakoutCondition = (ta.crossover(close, highestHigh[lookbackPeriodMin]) or ta.crossover(close, highestHigh[lookbackPeriodMax])) and isBullish // 计算止损点 stopLossLevelLong = close * (1 - stopLossPct) // 绘制EMA plot(ema, title="EMA", color=color.blue) // 记录上次开仓时间 var float lastEntryTime = na // 策略执行并标注信号 if (breakoutCondition and (na(lastEntryTime) or (time - lastEntryTime) > minHoldBars * timeframe.multiplier)) strategy.entry("做多", strategy.long) label.new(bar_index, high, text="买入", style=label.style_label_up, color=color.green, textcolor=color.white) strategy.exit("止损", from_entry="做多", stop=stopLossLevelLong) lastEntryTime := time // 定义趋势结束信号 exitCondition = close < ema if (exitCondition and (strategy.position_size > 0) and (time - lastEntryTime) > minHoldBars * timeframe.multiplier) strategy.close("做多") label.new(bar_index, low, text="卖出", style=label.style_label_down, color=color.red, textcolor=color.white)