本策略是一个基于双均线通道的动态趋势跟踪系统,结合了风险管理机制。该策略使用两条简单移动平均线(SMA)构建交易通道,其中上轨采用最高价计算的移动平均线,下轨采用最低价计算的移动平均线。系统通过连续五根K线收盘价突破上轨作为入场信号,通过连续五根K线收盘价跌破下轨或从最高点回撤25%作为出场信号,实现对趋势的动态跟踪和风险控制。
策略的核心原理是通过双均线通道捕捉价格趋势,并建立严格的入场和出场机制: 1. 入场机制:要求价格连续五天保持在上轨之上,确保趋势的持续性和有效性 2. 出场机制:分为两个层面 - 趋势背离出场:当价格连续五天跌破下轨,表明趋势可能发生逆转 - 止损出场:当价格从最高点回撤25%时触发止损,防止过度损失 3. 仓位管理:采用账户总值的固定比例进行开仓,实现资金的有效配置
该策略通过双均线通道构建了一个完整的趋势跟踪交易系统,结合严格的入场确认和双重出场机制,实现了对趋势的有效跟踪和风险的有效控制。策略的优势在于执行逻辑清晰、风险控制完善,但仍需要针对不同市场环境进行参数优化,并可以通过增加市场环境过滤、多时间周期确认等方式进行进一步改进。整体而言,这是一个结构完整、逻辑严密的量化交易策略,适合在趋势明显的市场环境中应用。
/*backtest
start: 2025-01-02 00:00:00
end: 2025-01-09 00:00:00
period: 10m
basePeriod: 10m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/
//@version=5
strategy("Moving Average Channel (MAC)", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// Parameters for Moving Averages
upperMALength = input.int(10, title="Upper MA Length")
lowerMALength = input.int(8, title="Lower MA Length")
stopLossPercent = input.float(25.0, title="Stop Loss (%)", minval=0.1) / 100
// Calculate Moving Averages
upperMA = ta.sma(high, upperMALength)
lowerMA = ta.sma(low, lowerMALength)
// Plot Moving Averages
plot(upperMA, color=color.red, title="Upper Moving Average")
plot(lowerMA, color=color.green, title="Lower Moving Average")
// Initialize variables
var int upperCounter = 0
var int lowerCounter = 0
var float entryPrice = na
var float highestPrice = na
// Update counters based on conditions
if (low <= upperMA)
upperCounter := 0
else
upperCounter += 1
if (high >= lowerMA)
lowerCounter := 0
else
lowerCounter += 1
// Entry condition: 5 consecutive bars above the Upper MA
if (upperCounter == 5 and strategy.position_size == 0)
strategy.entry("Long", strategy.long)
highestPrice := high // Initialize highest price
// Update the highest price after entry
if (strategy.position_size > 0)
highestPrice := na(highestPrice) ? high : math.max(highestPrice, high)
// Exit condition: 5 consecutive bars below the Lower MA
if (lowerCounter == 5 and strategy.position_size > 0)
strategy.close("Long", comment="Exit: 5 bars below Lower MA")
// Stop-loss condition: Exit if market closes below 25% of the highest price since entry
stopLossCondition = low < highestPrice * (1 - stopLossPercent)
if (stopLossCondition and strategy.position_size > 0)
strategy.close("Long", comment="Exit: Stop Loss")