
이 전략은 파격과 주파수 필터링을 기반으로 한 트렌드 추적 전략으로, 다중 거래만 수행한다. 전략의 주요 아이디어는 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)