Chiến lược này được thiết kế để nắm bắt sự thay đổi nhỏ trong xu hướng, mở nhiều vị trí khi sự thay đổi kết thúc để có lợi nhuận. Nó sử dụng các chỉ số kỹ thuật như đường trung bình EMA, chỉ số MACD, chỉ số RSI để đánh giá xu hướng và thời gian kết thúc sự thay đổi, đồng thời sử dụng chỉ số ATR để thiết lập giá dừng lỗ.
Chiến lược này bắt đầu bằng cách tính toán đường EMA, MACD và RSI để xác định hướng và cường độ của xu hướng hiện tại.
Nó sử dụng 3 đường trung bình EMA ((21 chu kỳ ngắn hạn, 50 chu kỳ trung bình, 200 chu kỳ dài hạn) và được đánh giá là xu hướng tăng khi đường trung bình ngắn hạn đi qua hai đường trung bình dài.
Chỉ số MACD đánh giá sức mạnh của xu hướng, khi đường MACD hoặc cột hist0 đi qua trục 0 , cho rằng xu hướng tăng lên trở nên mạnh mẽ.
Chỉ số RSI đánh giá xem có quá nóng và quá bán hay không, khi RSI vượt 50 thì việc đánh giá có thể kết thúc.
Sau đó, sử dụng chỉ số SuperTrend để xác định điểm mua cụ thể. Khi SuperTrend đảo ngược từ dưới lên, nó tạo ra tín hiệu mua.
Cuối cùng, đặt giá dừng rút lỗ và dừng lợi nhuận theo chỉ số ATR.
Các biện pháp quản lý rủi ro:
Chiến lược này sử dụng nhiều chỉ số kỹ thuật để đánh giá xu hướng và điều chỉnh, có độ tin cậy cao. Kiểm soát rủi ro thông qua cơ chế dừng lỗ nghiêm ngặt, xử lý rút lui kịp thời.
/*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)