
三重指数移动平均线长线策略(Triple Exponential Moving Average Long Only Strategy)是一个基于三重指数移动平均线作为交易信号的长线策略。该策略通过计算三条不同周期的EMA,并叠加转换为TEMA指标,以滤除短期市场噪音,识别中长线趋势方向。当价格上穿TEMA时做多,下穿TEMA时平仓。该策略适合对中长线趋势交易感兴趣的投资者。
该策略通过TEMA技术指标识别中长线趋势。TEMA指标是对EMA指数移动平均线进行三重平滑之后得到的趋势指标。EMA指标本身对价格起到一定滤波作用。TEMA通过计算三条不同周期的EMA指数移动平均线,并进行叠加转换,可进一步滤除短期噪音,突显更大周期的趋势。
具体来说,该策略首先计算fastEmaPeriod周期的EMA指标ema1,然后再基于ema1计算出同周期ema2,最后基于ema2计算出ema3。最终的TEMA指标按照:TEMA = 3 * (ema1 - ema2) + ema3的公式进行计算。当价格上穿TEMA时,做多;当价格下穿TEMA时,平仓。
通过多重指数平滑,TEMA指标可有效识别曲折反复的中长线趋势方向,滤除短期噪音对交易的干扰,因此非常适合作为空头的长线交易策略。
使用TEMA指标可有效识别中长线趋势,滤除短期噪音干扰,避免被套。
仅做多不做空,可规避空头带来的无限亏损风险。
采用百分比仓位管理,可根据账户资金灵活调整仓位规模,控制风险。
时间窗口设置可实现回测指定历史时间段,优化策略参数。
长线持仓时,遇到重大黑天鹅事件导致快速调头可能造成较大亏损。
TEMA指标在趋势转折点失败时,可能错过及时止损机会。
百分比仓位无法限制单笔亏损大小,需辅以止损来控制风险。
回测存在过拟合风险,参数优化不一定适用于未来市场。
结合波动率指标优化参数,提高参数的稳健性。
增加止损策略,以控制单笔亏损。
优化仓位管理,在回撤时降低仓位。
加入跨时间周期的 Tendency 指标,提升趋势判断的准确性。
测试不同持仓周期参数,寻找最优持仓周期。
综上所述,该三重指数移动平均线长线策略通过计算TEMA指标识别趋势方向,采用长线持仓避免被短期噪音干扰,仅做多不做空规避无限亏损风险,可有效捕捉中长线趋势进行长周期持仓。但该策略也存在一定风险,需要适当优化以提高稳健性。整体来说,该策略适合具有一定风险承受能力并倾向趋势交易的投资者。
/*backtest
start: 2022-11-08 00:00:00
end: 2023-11-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("TEMA_System_long_only", overlay=true)
//Collect inputs parameters
fastEmaPeriod = input(7, minval=1, title="Fast TEMA Period")
// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay = input(defval = 4, title = "From Day", minval = 1, maxval = 31)
FromYear = input(defval = 2010, title = "From Year", minval = 2000)
ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear = input(defval = 9999, title = "To Year", minval = 2000)
// === FUNCTION EXAMPLE ===
start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window
window() => true // create function "within window of time"
fastEma = ema(close, fastEmaPeriod)
//convert EMA into TEMA
ema1 = ema(close, fastEmaPeriod)
ema2 = ema(ema1, fastEmaPeriod)
ema3 = ema(ema2, fastEmaPeriod)
fastTEMA = 3 * (ema1 - ema2) + ema3
buy = close > fastTEMA
sell = close < fastTEMA
plot(fastTEMA, title = 'TEMA', linewidth=3, color=white)
if window()
strategy.entry("long",strategy.long, when = buy)
strategy.close("long", when = sell )