该策略是一个基于33周期指数移动平均线(EMA)的趋势跟踪交易系统。它通过价格与EMA的交叉关系来识别市场趋势变化,并结合波动高低点来设置止盈止损位置,从而实现对趋势的动态跟踪和风险控制。
策略的核心逻辑是通过观察价格与33周期EMA的交叉关系来判断趋势方向。当收盘价向上突破并站稳EMA时,触发做多信号;当收盘价向下突破并跌破EMA时,触发做空信号。策略使用14周期的高低点作为波动参考,将最高点设为多单止盈,最低点设为多单止损;相应地,将最低点设为空单止盈,最高点设为空单止损。这种设计既保证了对趋势的把握,又提供了合理的风险控制。
这是一个结构完整、逻辑清晰的趋势跟踪策略。通过EMA交叉捕捉趋势,用波动高低点管理风险,具有较好的实用性。虽然存在一些固有的局限性,但通过建议的优化方向,可以进一步提升策略的稳定性和盈利能力。策略整体设计理念符合量化交易的核心原则,是一个值得深入研究和实践的交易系统。
/*backtest
start: 2024-02-22 00:00:00
end: 2025-02-19 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"SOL_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © GlenMabasa
//@version=6
strategy("33 EMA Crossover Strategy", overlay=true)
// Input for the EMA length
ema_length = input.int(33, title="EMA Length")
// Calculate the 33-day Exponential Moving Average
ema_33 = ta.ema(close, ema_length)
// Plot the 33 EMA
plot(ema_33, color=color.blue, title="33 EMA", linewidth=2)
// Buy condition: Price crosses and closes above the 33 EMA
buy_condition = ta.crossover(close, ema_33) and close > ema_33
// Sell condition: Price crosses or closes below the 33 EMA
sell_condition = ta.crossunder(close, ema_33) or close < ema_33
// Swing high and swing low calculations
swing_high_length = input.int(14, title="Swing High Lookback")
swing_low_length = input.int(14, title="Swing Low Lookback")
swing_high = ta.highest(high, swing_high_length) // Previous swing high
swing_low = ta.lowest(low, swing_low_length) // Previous swing low
// Profit target and stop loss for buys
buy_profit_target = swing_high
buy_stop_loss = swing_low
// Profit target and stop loss for sells
sell_profit_target = swing_low
sell_stop_loss = swing_high
// Plot buy and sell signals
plotshape(series=buy_condition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")
plotshape(series=sell_condition, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")
// Strategy logic for backtesting
if (buy_condition)
strategy.entry("Buy", strategy.long)
strategy.exit("Take Profit/Stop Loss", "Buy", limit=buy_profit_target, stop=buy_stop_loss)
if (sell_condition)
strategy.entry("Sell", strategy.short)
strategy.exit("Take Profit/Stop Loss", "Sell", limit=sell_profit_target, stop=sell_stop_loss)