该策略是一个基于指数移动平均线(EMA)的趋势追踪型突破策略。它在月线、周线和日线时间框架上判断趋势方向,并在日线上执行具体的入场和出场操作。
设置止盈止损标准,达到退出。
该策略整体作为一个趋势追踪策略,在正确判断趋势时,盈利潜力非常好。需要注意防止趋势判断错误和回调过度而产生错误信号。同时,优化止盈止损设置也是进一步提高策略优势的关键。
/*backtest
start: 2023-01-11 00:00:00
end: 2024-01-11 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © the_daily_trader
//@version=5
// --------------------- Start of Code ---------------------
strategy("Swing Trades Validator", overlay=true, margin_long=100, pyramiding = 0)
// Indicator Display Checks
TakeProfitPercent = input.float(title="Profit Target %", defval=10, minval=1, step=0.05)
StopLossPercent = input.float(title="Stop Loss %", defval=10, minval=1, step=0.05)
pullbackchoice = input.bool(false, "Relaxed Entry Rules")
// EMAs
emaH = ta.ema(close, 8)
emaHyest = ta.ema(close[1], 8)
emaHyest1 = ta.ema(close[2], 8)
emaHyest2 = ta.ema(close[3], 8)
emaL = ta.ema(close, 21)
emaLyest = ta.ema(close[1], 21)
emaLyest1 = ta.ema(close[2], 21)
emaLyest2 = ta.ema(close[3], 21)
emaf = ta.ema(close, 50)
emath = ta.ema(close, 200)
emathhigh = ta.ema(high, 200)
emathlow = ta.ema(low, 200)
emaslowmonthly = request.security(syminfo.tickerid, "M", emaL) // Monthly 21ema
emafastmonthly = request.security(syminfo.tickerid, "M", emaH) // Monthly 8ema
emaslowweekly = request.security(syminfo.tickerid, "W", emaL) // Weekly 21ema
emafastweekly = request.security(syminfo.tickerid, "W", emaH) // Weekly 8ema
emaslowdaily = request.security(syminfo.tickerid, "D", emaL) // Daily 21ema
emafastdaily = request.security(syminfo.tickerid, "D", emaH) // Daily 8ema
emafdaily = request.security(syminfo.tickerid, "D", emaf) // Daily 50ema
emathdaily = request.security(syminfo.tickerid, "D", emath) // Daily ema
emathdailyhigh = request.security(syminfo.tickerid, "D", emathhigh) // Daily ema High
emathdailylow = request.security(syminfo.tickerid, "D", emathlow) // Daily ema Low
ema21yest = request.security(syminfo.tickerid, "D", emaLyest) // Daily 21ema 1 day ago
ema21yest1 = request.security(syminfo.tickerid, "D", emaLyest1) // Daily 21ema 2 days ago
ema21yest2 = request.security(syminfo.tickerid, "D", emaLyest2) // Daily 21ema 3 days ago
ema8yest = request.security(syminfo.tickerid, "D", emaHyest) // Daily 8ema 1 day ago
ema8yest1 = request.security(syminfo.tickerid, "D", emaHyest1) // Daily 8ema 2 days ago
ema8yest2 = request.security(syminfo.tickerid, "D", emaHyest2) // Daily 8ema 3 days ago
// Prices
monthopen = request.security(syminfo.tickerid, 'M', open, barmerge.gaps_off, barmerge.lookahead_on)
monthclose = request.security(syminfo.tickerid, 'M', close, barmerge.gaps_off, barmerge.lookahead_on)
weekopen = request.security(syminfo.tickerid, 'W', open, barmerge.gaps_off, barmerge.lookahead_on)
weekclose = request.security(syminfo.tickerid, 'W', close, barmerge.gaps_off, barmerge.lookahead_on)
dayopen = request.security(syminfo.tickerid, 'D', open, barmerge.gaps_off, barmerge.lookahead_on)
dayclose = request.security(syminfo.tickerid, 'D', close, barmerge.gaps_off, barmerge.lookahead_on)
threedayhigh = request.security(syminfo.tickerid, 'D', high[3], barmerge.gaps_off, barmerge.lookahead_on)
twodayhigh = request.security(syminfo.tickerid, 'D', high[2], barmerge.gaps_off, barmerge.lookahead_on)
yesthigh = request.security(syminfo.tickerid, 'D', high[1], barmerge.gaps_off, barmerge.lookahead_on)
yestlow = request.security(syminfo.tickerid, 'D', low[1], barmerge.gaps_off, barmerge.lookahead_on)
// Conditions
monthlybullish = emafastmonthly > emaslowmonthly
monthlybullishprice = close > emafastmonthly
monthlybullishcandle = monthclose > monthopen
weeklybullish = emafastweekly > emaslowweekly
weeklybullishprice = close > emafastweekly
weeklybullishcandle = weekclose > weekopen
dailybullish1 = emafdaily > emathdaily
dailybullish2 = emafastdaily > emaslowdaily
dailybullishprice = close > emafastdaily
dailybullishcandle = dayclose > dayopen
ringlow = yestlow <= ema8yest
aggropullback = twodayhigh < threedayhigh
pullback = (pullbackchoice ? aggropullback : 0)
pullbackfailure = dayclose > yesthigh and yesthigh < twodayhigh or pullback
emasetup = ema8yest > ema21yest and ema8yest1 > ema21yest1 and ema8yest2 > ema21yest2
// Target Profit and Stop Loss Inputs
// Input parameters can be found at the beginning of the code
ProfitTarget = (close * (TakeProfitPercent / 100)) / syminfo.mintick
StopLoss = (close * (StopLossPercent / 100)) / syminfo.mintick
longCondition = monthlybullish and monthlybullishprice and weeklybullish and weeklybullishprice and dailybullish1 and dailybullish2 and dailybullishprice and monthlybullishcandle and weeklybullishcandle and dailybullishcandle and ringlow and pullbackfailure and emasetup
if (longCondition)
strategy.entry("Long", strategy.long)
strategy.exit ("Exit", "Long", profit = ProfitTarget, loss = StopLoss)
// strategy.close("Long", qty_percent = 100)
// -----------xxxxxxxxxxx------------- End of Code -----------xxxxxxxxxxx---------------