该策略是一个结合了多重时间周期趋势分析和量价关系的高频量化交易系统。它主要通过3分钟和1小时两个时间周期的指数移动平均线(EMA)来判断市场趋势,同时结合成交量分析来确认交易信号,并设计了基于全天最高价和固定时间点的双重退出机制。
策略的核心逻辑包含三个主要部分: 1. 短期趋势判断: 使用3分钟周期的50周期EMA作为短期趋势指标,当价格位于均线之上时视为短期上涨趋势。 2. 量能确认: 通过比较当前成交量与20周期成交量均值的关系,当当前成交量超过均值的1.5倍时,认为出现量能放大信号。 3. 长期趋势过滤: 引入1小时周期的50周期EMA作为长期趋势过滤器,只有在价格位于该均线之上时才允许入场。
入场信号需同时满足以上三个条件。退出策略采用了价格触及日内最高点或到达下午3点这两个条件中的任意一个。
该策略通过结合多重时间周期分析和量价关系,构建了一个相对完整的交易系统。其优势在于逻辑清晰、实现简单,但仍需要在风险控制方面进行优化。建议交易者在实盘使用前进行充分的历史数据测试,并根据具体交易品种特点对参数进行优化。
/*backtest
start: 2024-02-19 00:00:00
end: 2025-02-16 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Intraday + 1-Hour Trend Match", overlay=true)
// Inputs
emaLength3Min = input.int(50, title="EMA Length (3-Min)")
emaLength1Hr = input.int(50, title="EMA Length (1-Hour)")
volumeMultiplier = input.float(1.5, title="Volume Spike Multiplier")
// Intraday (3-Minute) EMA and Volume Spike
ema3Min = ta.ema(close, emaLength3Min)
volumeSMA = ta.sma(volume, 20)
isVolumeSpike = volume > (volumeSMA * volumeMultiplier)
// 1-Hour Trend (EMA)
ema1Hr = request.security(syminfo.tickerid, "60", ta.ema(close, emaLength1Hr))
is1HrUptrend = close > ema1Hr
// Intraday Signal
buyCondition3Min = close > ema3Min and isVolumeSpike
// Combined Signal: Match 3-Min Signal with 1-Hour Trend
finalBuyCondition = buyCondition3Min and is1HrUptrend
// All-Day High Tracking
var float allDayHigh = na
if (hour == 9 and minute == 0)
allDayHigh := high // Reset the all-day high at market open
else
allDayHigh := math.max(allDayHigh, high) // Update all-day high
// Debugging Plots
plot(ema3Min, color=color.blue, title="EMA 3-Min")
plot(ema1Hr, color=color.orange, title="EMA 1-Hour")
plotshape(isVolumeSpike, style=shape.circle, color=color.blue, title="Volume Spike (3-Min)")
plotshape(finalBuyCondition, style=shape.triangleup, color=color.green, title="Buy Signal")
plot(allDayHigh, color=color.red, title="All-Day High", linewidth=2)
// Strategy Execution
if (finalBuyCondition)
strategy.entry("Buy Signal", strategy.long)
// Exit Conditions
exitCondition = (close == allDayHigh) or (hour == 15 and minute >= 0)
if (exitCondition)
strategy.close("Buy Signal")