Theo dõi xu hướng EMA Breakout Strategy

Tác giả:ChaoZhang, Ngày: 2024-01-12 14:23:11
Tags:

img

Tổng quan

Đây là một chiến lược theo dõi xu hướng dựa trên Mức trung bình chuyển động nhân tố (EMA). Nó đánh giá hướng xu hướng trên các khung thời gian hàng tháng, hàng tuần và hàng ngày, và thực hiện các hành động vào và ra cụ thể trên biểu đồ hàng ngày.

Chiến lược logic

Phán quyết xu hướng

  1. Trên biểu đồ hàng tháng, giá nằm trên đường EMA 8 ngày và đường EMA 8 ngày nằm trên đường EMA 21 ngày, cho thấy xu hướng tăng;
  2. Trên biểu đồ hàng tuần, giá nằm trên đường EMA 8 ngày và đường EMA 8 ngày nằm trên đường EMA 21 ngày, cho thấy xu hướng tăng;
  3. Trên biểu đồ hàng ngày, giá nằm trên đường EMA 8 ngày và đường EMA 8 ngày nằm trên đường EMA 21 ngày, cho thấy xu hướng tăng;

Tín hiệu nhập cảnh

  1. Một sự suy giảm được nhìn thấy trên biểu đồ hàng ngày với điểm thấp chạm vào EMA 8 ngày hôm qua;
  2. Việc rút lại tạo thành một mô hình Ring Low với thấp hơn cao và thấp hơn thấp;
  3. Giá đóng cửa cao hơn mức cao của ngày trước, tạo thành tín hiệu đảo ngược xu hướng.

Tín hiệu ra

Đặt tiêu chuẩn lấy lợi nhuận và dừng lỗ để thoát khỏi.

Phân tích lợi thế

  1. Đánh giá xu hướng trên ba khung thời gian cải thiện độ chính xác;
  2. Pullback đến EMA hình thành hỗ trợ và tăng sự chắc chắn nhập cảnh;
  3. Theo dõi xu hướng chạy có tiềm năng lợi nhuận cao;

Phân tích rủi ro

  1. Các phán đoán không nhất quán trong các khung thời gian có thể gây ra tín hiệu sai;
  2. Độ lớn quá mức có thể làm mất hiệu lực chiến lược;
  3. Stop Loss Sweep có thể xảy ra trong khi flash crash.

Hướng dẫn tối ưu hóa

  1. Thêm MACD, RSI để đánh giá bổ sung;
  2. Tối ưu hóa cài đặt tham số EMA;
  3. Điều chỉnh phạm vi lấy lợi nhuận và dừng lỗ dựa trên biến động.

Tóm lại

Chiến lược có tiềm năng lợi nhuận rất tốt khi xu hướng được đánh giá chính xác. Cần phải cảnh giác với sự đánh giá xu hướng không chính xác và rút lui quá mức gây ra các tín hiệu sai. Trong khi đó, tối ưu hóa các thiết lập lấy lợi nhuận và dừng lỗ là chìa khóa để cải thiện lợi thế hơn nữa.


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

Thêm nữa