Chiến lược này nhằm mục đích nắm bắt các pullback nhỏ trong một xu hướng và đi dài khi pullback kết thúc để kiếm lợi nhuận. Nó sử dụng sự kết hợp của các chỉ số kỹ thuật như EMA, MACD, RSI để xác định xu hướng và kết thúc của pullbacks. Nó cũng sử dụng ATR để thiết lập giá dừng lỗ và lấy lợi nhuận.
Chiến lược đầu tiên tính toán EMA, MACD và RSI để xác định hướng và sức mạnh xu hướng hiện tại.
Nó sử dụng 3 EMA (21 giai đoạn ngắn, 50 giai đoạn trung bình và 200 giai đoạn dài).
MACD đánh giá sức mạnh xu hướng. Khi đường MACD hoặc biểu đồ băng qua trên đường 0, nó cho thấy xu hướng tăng mạnh.
Chỉ số RSI cho thấy liệu đã mua quá mức / bán quá mức.
Sau đó chỉ số SuperTrend xác định điểm mua cụ thể của pullback.
Cuối cùng, dừng lỗ và lấy lợi nhuận được thiết lập dựa trên ATR.
Quản lý rủi ro:
Chiến lược này kết hợp nhiều chỉ số đáng tin cậy để xác định xu hướng và pullback. Cơ chế dừng lỗ nghiêm ngặt kiểm soát rủi ro và cho phép thanh lý kịp thời. Với các thông số liên tục và điều chỉnh vũ trụ, nó có thể đạt được lợi nhuận tốt.
/*backtest start: 2022-10-06 00:00:00 end: 2023-10-12 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title="pullb", overlay = true, initial_capital = 10000, default_qty_value = 100, default_qty_type = strategy.percent_of_equity) //variables ///emas var ema_src = input.source(close, "EMA Source") ema_1 = input.int(21, 'EMA 1 len') ema_2 = input(50, 'EMA 2 len') ema_3 = input(200, 'EMA 3 len') ///macd var mac_src = input.source(close, "MACD Source") mac_1 = input.int(12, 'MACD Fast') mac_2 = input.int(26, 'MACD Signal') mac_3 = input.int(9, 'MACD Histogram') ///rsi var rsi_src = input.source(close, "RSI Source") rsi_len = input.int(14, 'RSI Len') ///stoch var smoothK = input.int(3, "K", minval=1) smoothD = input.int(3, "D", minval=1) lengthRSI = input.int(14, "RSI Length", minval=1) lengthStoch = input.int(14, "Stochastic Length", minval=1) stoch_src = input(close, title="RSI Source Stoch") //usage variables ema_b = input.bool(true, "Use EMA Filter") rsi_b = input.bool(true, "Use RSI Filter") macd_b = input.bool(true, "Use MACD Filter") //stoch_b = input(title="Use STOCH Filter", type=bool, defval=true) //emaas ema1 = ta.ema(ema_src, ema_1) ema2 = ta.ema(ema_src, ema_2) ema3 = ta.ema(ema_src, ema_3) //macd [macdLine, signalLine, histLine] = ta.macd(mac_src, mac_1, mac_2, mac_3) //rsi rsi = ta.rsi(rsi_src, rsi_len) //stoch rsi1 = ta.rsi(stoch_src, lengthRSI) k = ta.sma(ta.stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK) d = ta.sma(k, smoothD) //supertrend Periods = input.int(14, "ATR Period") src_st = input.source(close, "Supertrend Source") Multiplier = input.float(2.0 , "ATR Multiplier") changeATR= input.bool(true, "Change ATR Calculation Method ?") showsignals = input.bool(true, "Show Buy/Sell Signals ?") highlighting = input.bool(true, "Highlighter On/Off ?") atr2 = ta.sma(ta.tr, Periods) atr3= changeATR ? ta.atr(Periods) : atr2 up=src_st-(Multiplier*atr3) up1 = nz(up[1],up) up := close[1] > up1 ? math.max(up,up1) : up dn=src_st+(Multiplier*atr3) dn1 = nz(dn[1], dn) dn := close[1] < dn1 ? math.min(dn, dn1) : dn trend = 1 trend := nz(trend[1], trend) trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend buySignal = trend == 1 and trend[1] == -1 sellSignal = trend == -1 and trend[1] == 1 //conditions ///buy rsi_cond_b = if rsi_b rsi >= 50 else true macd_cond_b = if macd_b (histLine >= 0 or histLine < histLine[1]) else true ema_cond_b = if ema_b (ema1 > ema2 and ema2 > ema3) else true look_for = input.int(5, "Bars from cross to signal") stoch_signal_sum = 0 for i = 0 to (look_for) if k[i] > d[i] and k[i + 1] < d[i + 1] and (k[i + 1] < 20 and d[i + 1] < 20) stoch_signal_sum := stoch_signal_sum + 1 stoch_cond_b = if stoch_signal_sum > 0 if k > 80 and d > 80 false else true else false sup_cond_b = buySignal buy_sig = (rsi_cond_b and macd_cond_b and ema_cond_b and stoch_cond_b and sup_cond_b) tp_b = close + (ta.atr(14) * 3) sl_b = close - (ta.atr(14) * 1.5) if (buy_sig) strategy.entry("long", strategy.long) strategy.exit("exit", "long", stop = sl_b, limit = tp_b) plot(tp_b) plot(sl_b)