本策略是一个基于双均线系统的趋势跟踪交易策略,结合了技术分析中的指数移动平均线(EMA)指标,通过在EMA20位置设置限价单进行买入。策略采用保守的资金管理方法,每次仅使用账户权益的10%进行交易,并设置了止盈止损来控制风险。策略使用30天和300天两个周期的指数移动平均线来确定市场趋势,只在市场处于上升趋势时才会寻找入场机会。
策略的核心逻辑基于以下几个关键点: 1. 使用EMA300作为趋势判断指标,只有当价格位于EMA300之上时才会考虑开仓,这确保了交易方向与主趋势保持一致。 2. 在满足趋势条件后,策略会在EMA20位置设置限价买入订单,这种方式可以在价格回调至均线支撑位时以相对较低的价格建仓。 3. 策略采用固定百分比的止盈止损设置,默认止盈为入场价格的10%,止损为入场价格的5%,这种设置保证了每笔交易的风险回报比大于2:1。 4. 资金管理采用账户权益的10%进行仓位控制,这种保守的方式可以有效降低单笔交易的风险敞口。
该策略通过结合技术分析中的均线系统和严格的风险控制规则,构建了一个相对稳健的交易系统。策略的核心优势在于其趋势跟踪特性和完善的风险管理机制,通过限价单的方式优化入场价格,同时采用保守的资金管理方式控制风险。虽然策略在震荡市场中可能表现欠佳,但通过建议的优化方向,可以进一步提升策略的稳定性和盈利能力。对于追求稳健收益的投资者来说,这是一个值得考虑的量化交易策略选择。
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-09 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Limit Buy at EMA20 (Last 30 Days)", overlay=true)
// Inputs for EMAs
ema20Length = input.int(30, title="EMA 20 Length")
ema300Length = input.int(300, title="EMA 300 Length")
tpPercentage = input.float(10.0, title="Take Profit (%)", step=0.1) / 100
slPercentage = input.float(5.0, title="Stop Loss (%)", step=0.1) / 100 // Stop loss at 15%
// Calculate EMAs
ema20 = ta.ema(close, ema20Length)
ema300 = ta.ema(close, ema300Length)
// Plot EMAs
plot(ema20, color=color.blue, title="EMA 20")
plot(ema300, color=color.red, title="EMA 300")
// Limit backtesting to the last 30 days
startTime = timestamp(year(timenow), month(timenow), dayofmonth(timenow) - 30, 0, 0)
if (time < startTime)
strategy.close_all()
strategy.cancel_all()
// Entry Condition: Price above EMA300
longCondition = close > ema300 and time >= startTime
// Calculate position size (10% of equity)
positionSize = strategy.equity * 0.10 / ema20 // Use EMA20 as the limit price
// Place a limit buy order at EMA20
if (longCondition)
strategy.order("Limit Buy", strategy.long, qty=positionSize, limit=ema20)
// Calculate TP and SL levels
tpPrice = ema20 * (1 + tpPercentage)
slPrice = ema20 * (1 - slPercentage)
// Set take profit and stop loss
if (strategy.position_size > 0)
strategy.exit("Take Profit/Stop Loss", "Limit Buy", stop=slPrice, limit=tpPrice)