트렌드 추적 EMA 브레이크업 전략

저자:차오장, 날짜: 2024-01-12 14:23:11
태그:

img

전반적인 설명

이것은 기하급수적인 이동 평균 (EMA) 에 기반한 트렌드 추적 브레이크아웃 전략입니다. 월간, 주간 및 일일 시간 프레임에서 트렌드 방향을 판단하고 일일 차트에서 특정 입출동 행동을 실행합니다.

전략 논리

트렌드 판단

  1. 월간 차트에서 가격은 8일 EMA 이상이고 8일 EMA는 21일 EMA 이상으로 상승세를 나타냅니다.
  2. 주간 차트에서 가격은 8일 EMA 이상이고 8일 EMA는 21일 EMA 이상이며 상승세를 나타냅니다.
  3. 일일 차트에서 가격은 8일 EMA 이상이고 8일 EMA는 21일 EMA 이상으로 상승 추세를 나타냅니다.

입력 신호

  1. 일일 차트에서 낮점이 어제 8일 EMA에 닿는 것으로 추락이 나타났습니다.
  2. 이 회귀는 낮은 고와 낮은 낮은 고와 함께 링 로우 패턴을 형성합니다.
  3. 종료 가격은 전날의 최고치보다 높고, 트렌드 반전 신호를 형성합니다.

출구 신호

이윤을 취득하고 손실을 멈추는 기준을 설정합니다.

이점 분석

  1. 세 가지 시간 프레임에서 추세를 판단하면 정확도가 향상됩니다.
  2. EMA로 회귀하면 지원이 되고 진출의 확실성이 높아집니다.
  3. 트렌드 러닝을 추적하는 것은 높은 수익 잠재력을 가지고 있습니다.

위험 분석

  1. 시간 프레임에 따라 일관성이 없는 판단은 잘못된 신호를 일으킬 수 있습니다.
  2. 과도한 회수 규모는 전략을 무효화 할 수 있습니다.
  3. 플래시 충돌 때 스톱 로스 스웨어가 발생할 수 있습니다.

최적화 방향

  1. 추가 판단을 위해 MACD, RSI를 추가합니다.
  2. EMA 매개 변수 설정을 최적화합니다.
  3. 유동성에 따라 수익을 취하고 손실을 멈추는 범위를 조정합니다.

요약

이 전략은 트렌드를 올바르게 판단할 때 매우 좋은 수익 잠재력을 가지고 있습니다. 잘못된 트렌드 판단과 잘못된 신호를 유발하는 과도한 인회에 주의해야합니다. 한편, 수익 취득 및 스톱 손실 설정을 최적화하는 것이 가장자리를 개선하는 열쇠입니다.


/*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---------------

더 많은