이 전략은 트리플 EMA 주위의 가격 움직임을 관찰하여 추락 후 트렌드 및 거래 브레이크오웃을 결정합니다.
전략 논리:
빠른, 중간 및 느린 EMA를 설정합니다. 일반적으로 25, 100, 200 기간입니다.
상승/하락 추세에서 가장 빠른 EMA를 타는 가격은 중간 황소/곰을 나타냅니다.
가격이 가장 빠른 EMA를 넘을 때 상향 pullback에 대한 긴 지점을 입력합니다. 가격이 가장 빠른 EMA를 넘을 때 하향 pullback에 대한 짧은 지점을 입력합니다.
시각적 직관을 위한 색상 코드 구매/판매 구역
고정 스톱 로즈와 리스크/어워드 비율을 리스크 관리에 사용한다.
장점:
풀백 거래는 높은 승률을 누립니다.
트리플 EMA는 트렌드를 파악하고, 현상을 피합니다.
위험/이익 비율은 성과 지속성을 향상시킵니다.
위험성:
긴 철수는 가장 좋은 출입 시기를 놓칠 수 있습니다.
EMA 조정은 다른 기간에 맞춰야 했습니다.
고정 스톱은 너무 기계적일 수 있고 캘리브레이션이 필요합니다
요약하자면, 이 전략은 트리플 EMA를 사용하여 더 넓은 트렌드를 추적하여 풀백 브레이크오웃을 거래합니다. 위험 통제는 안정적인 장기 수익을 창출하는 데 도움이됩니다. 그러나 매개 변수 최적화 및 풀백 판단은 여전히 필수적입니다.
/*backtest start: 2023-09-04 00:00:00 end: 2023-09-11 00:00:00 period: 5m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title="Pullback", overlay=true, initial_capital=1000, slippage=25) averageData = input.source(close, title="Source") target_stop_ratio = input.float(title="Ratio Risk/Reward", defval=2, group="Money Management") security = input.float(50, title='min of pips (00001.00) for each position', group="Money Management") risk = input.float(2, title="Risk per Trade %", group="Money Management") riskt = risk / 100 + 1 ema1V = input.int(25, title="Rapide", group="Ema Period") ema2V = input.int(100, title="Moyenne", group="Ema Period") ema3V = input.int(200, title="Lente", group="Ema Period") ema1 = ta.ema(averageData, ema1V) ema2 = ta.ema(averageData, ema2V) ema3 = ta.ema(averageData, ema3V) useDateFilter = input.bool(true, title="Filter Date Range of Backtest", group="Backtest Time Period") backtestStartDate = input(timestamp("5 June 2022"), title="Start Date", group="Backtest Time Period", tooltip="This start date is in the time zone of the exchange " + "where the chart's instrument trades. It doesn't use the time " + "zone of the chart or of your computer.") backtestEndDate = input(timestamp("5 July 2022"), title="End Date", group="Backtest Time Period", tooltip="This end date is in the time zone of the exchange " + "where the chart's instrument trades. It doesn't use the time " + "zone of the chart or of your computer.") inTradeWindow = true float pricePullAboveEMA_maxClose = na float pricePullBelowEMA_minClose = na if ta.crossover(close, ema1) pricePullAboveEMA_maxClose := close else pricePullAboveEMA_maxClose := pricePullAboveEMA_maxClose[1] if close > pricePullAboveEMA_maxClose pricePullAboveEMA_maxClose := close if ta.crossunder(close, ema1) pricePullBelowEMA_minClose := close else pricePullBelowEMA_minClose := pricePullBelowEMA_minClose[1] if close < pricePullBelowEMA_minClose pricePullBelowEMA_minClose := close BuyZone = ema1 > ema2 and ema2 > ema3 SellZone = ema1 < ema2 and ema2 < ema3 longcondition = ta.crossover(close, ema1) and pricePullBelowEMA_minClose > ema3 and pricePullBelowEMA_minClose < ema1 shortcondition = ta.crossunder(close , ema1) and pricePullAboveEMA_maxClose < ema3 and pricePullAboveEMA_maxClose > ema1 float risk_long = na float risk_short = na float stopLoss = na float takeProfit = na float entry_price = na risk_long := risk_long[1] risk_short := risk_short[1] lotB = (strategy.equity*riskt-strategy.equity)/(close - ema2) lotS = (strategy.equity*riskt-strategy.equity)/(ema2 - close) if strategy.position_size == 0 and BuyZone and longcondition and inTradeWindow risk_long := (close - ema2) / close minp = close - ema2 if minp > security strategy.entry("long", strategy.long, qty=lotB) if strategy.position_size == 0 and SellZone and shortcondition and inTradeWindow risk_short := (ema2 - close) / close minp = ema2 - close if minp > security strategy.entry("short", strategy.short, qty=lotS) if strategy.position_size > 0 stopLoss := strategy.position_avg_price * (1 - risk_long) takeProfit := strategy.position_avg_price * (1 + target_stop_ratio * risk_long) entry_price := strategy.position_avg_price strategy.exit("long exit", "long", stop = stopLoss, limit = takeProfit) if strategy.position_size < 0 stopLoss := strategy.position_avg_price * (1 + risk_short) takeProfit := strategy.position_avg_price * (1 - target_stop_ratio * risk_short) entry_price := strategy.position_avg_price strategy.exit("short exit", "short", stop = stopLoss, limit = takeProfit) plot(ema1, color=color.blue, linewidth=2, title="Ema Rapide") plot(ema2, color=color.orange, linewidth=2, title="Ema Moyenne") plot(ema3, color=color.white, linewidth=2, title="Ema Lente") p_ep = plot(entry_price, color=color.new(color.white, 0), linewidth=2, style=plot.style_linebr, title='entry price') p_sl = plot(stopLoss, color=color.new(color.red, 0), linewidth=2, style=plot.style_linebr, title='stopLoss') p_tp = plot(takeProfit, color=color.new(color.green, 0), linewidth=2, style=plot.style_linebr, title='takeProfit') fill(p_sl, p_ep, color.new(color.red, transp=85)) fill(p_tp, p_ep, color.new(color.green, transp=85)) bgcolor(BuyZone ? color.new(color.green, 95) : na) bgcolor(SellZone ? color.new(color.red, 95) : na)