该策略是一个基于突破和频率过滤的趋势跟踪策略,只进行多头交易。策略的主要思路是利用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)