Chiến lược siêu xu hướng rút ngắn

Tác giả:ChaoZhang, Ngày: 2023-10-13 15:49:29
Tags:

Tổng quan

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.

Nguyên tắc

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.

Ưu điểm

  • Các tín hiệu đáng tin cậy hơn bằng cách sử dụng nhiều chỉ số kết hợp.
  • Nhận các cơ hội ngắn hạn trong xu hướng với tỷ lệ thắng cao.
  • Kiểm soát rủi ro hiệu quả bằng cách dừng lỗ / lấy lợi nhuận.

Rủi ro

  • Việc rút tiền kéo dài có thể dẫn đến tổn thất kéo dài.
  • Nhiều chỉ số làm cho điều chỉnh tham số phức tạp.
  • Stop loss quá lỏng lẻo có thể làm tăng lỗ.

Quản lý rủi ro:

  • Tối ưu hóa các tham số cho sự liên kết của chỉ số.
  • Điều chỉnh stop loss đúng cách đối với các lỗ lớn.
  • Tránh các cổ phiếu có giảm kéo dài.

Tối ưu hóa

  • Kiểm tra các kết hợp tham số khác nhau cho các giá trị chỉ số tốt nhất.
  • Điều chỉnh dừng lỗ / lấy lợi nhuận dựa trên biến động hàng ngày của cổ phiếu.
  • Thêm chỉ số âm lượng để tránh các trường hợp âm lượng thấp.

Kết luận

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)



Thêm nữa