这是一个基于趋势跟踪和动量分析相结合的量化交易策略。该策略利用三重指数移动平均线(TEMA)、多重移动平均线交叉以及MACD变种指标来识别市场趋势和入场时机。策略采用了严格的风险控制机制,包括固定止损、获利目标以及追踪止损,以实现风险收益的最优平衡。
策略主要通过三个核心技术指标系统来确定交易信号: 1. 三重指数移动平均线(TEMA)系统用于确认整体趋势方向。通过计算三层EMA并结合其动态变化来判断趋势强度。 2. 快慢均线交叉系统使用9周期和15周期的EMA,用于捕捉中期趋势的转折点。 3. 价格与5周期EMA的交叉作为最后的确认信号,用于精确把握入场时机。
交易信号的触发需要同时满足以下条件: - MACD指标与其信号线形成黄金交叉且TEMA趋势向上 - 短期EMA上穿长期EMA - 价格上穿5周期EMA
该策略通过融合多个技术指标系统,构建了一个稳健的交易系统。其核心优势在于多重确认机制和完善的风险控制体系。虽然存在一定的滞后性风险,但通过参数优化和功能拓展,策略仍有较大的改进空间。适合追求稳健收益的交易者使用。
/*backtest
start: 2024-10-01 00:00:00
end: 2024-10-31 23:59:59
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("ITG Scalper Strategy", shorttitle="lokesh_ITG_Scalper_Strategy", overlay=true)
// General inputs
len = input(14, title="TEMA period")
FfastLength = input.int(13, title="Filter fast length")
FslowLength = input.int(18, title="Filter slow length")
FsignalLength = input.int(14, title="Filter signal length")
sl_points = 7 // 5 points stop loss
tp_points = 100 // 100 points target profit
trail_points = 15 // Trailing stop loss every 10 points
// Validate input
if FfastLength < 1
FfastLength := 1
if FslowLength < 1
FslowLength := 1
if FsignalLength < 1
FsignalLength := 1
// Get real close price
realC = close
// Triple EMA definition
ema1 = ta.ema(realC, len)
ema2 = ta.ema(ema1, len)
ema3 = ta.ema(ema2, len)
// Triple EMA trend calculation
avg = 3 * (ema1 - ema2) + ema3
// Filter formula
Fsource = close
FfastMA = ta.ema(Fsource, FfastLength)
FslowMA = ta.ema(Fsource, FslowLength)
Fmacd = FfastMA - FslowMA
Fsignal = ta.sma(Fmacd, FsignalLength)
// Plot EMAs for visual reference
shortema = ta.ema(close, 9)
longema = ta.ema(close, 15)
yma = ta.ema(close, 5)
plot(shortema, color=color.green)
plot(longema, color=color.red)
plot(yma, color=#e9f72c)
// Entry conditions
firstCrossover = ta.crossover(Fmacd, Fsignal) and avg > avg[1]
secondCrossover = ta.crossover(shortema, longema) // Assuming you meant to cross shortema with longema
thirdCrossover = ta.crossover(close, yma)
var bool entryConditionMet = false
if (firstCrossover)
entryConditionMet := true
longSignal = entryConditionMet and secondCrossover and thirdCrossover
// Strategy execution
if (longSignal)
strategy.entry("Long", strategy.long)
entryConditionMet := false // Reset the entry condition after taking a trade
// Calculate stop loss and take profit prices
var float long_sl = na
var float long_tp = na
if strategy.position_size > 0 // Long position
long_sl := close - sl_points
long_tp := close + tp_points
// Adjust stop loss with trailing logic
if (close - long_sl > trail_points)
long_sl := close - trail_points
strategy.exit("Exit Long", "Long", stop=long_sl, limit=long_tp)
// Plotting Buy signals
plotshape(series=longSignal, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small, title="Buy Signal")
// Alerts
alertcondition(longSignal, title="Buy Signal", message="Buy Signal")