Strategi Supertrend Pullback Mini

Penulis:ChaoZhang, Tarikh: 2023-10-13 15:49:29
Tag:

Ringkasan

Strategi ini bertujuan untuk menangkap pullback kecil dalam trend dan pergi lama apabila pullback selesai untuk keuntungan. Ia menggunakan gabungan penunjuk teknikal seperti EMA, MACD, RSI untuk mengenal pasti trend dan akhir pullback. Ia juga menggunakan ATR untuk menetapkan harga stop loss dan mengambil keuntungan.

Prinsip-prinsip

Strategi ini mula-mula mengira EMA, MACD dan RSI untuk menentukan arah trend semasa dan kekuatan.

Ia menggunakan 3 EMA (21 tempoh pendek, 50 tempoh sederhana dan 200 tempoh panjang).

MACD menilai kekuatan trend. Apabila garis MACD atau histogram melintasi di atas garis 0, ia menunjukkan penguatan trend naik.

RSI menunjukkan sama ada overbought / oversold. RSI melintasi di atas 50 menunjukkan penarikan mungkin berakhir.

Kemudian penunjuk SuperTrend mengenal pasti titik beli tertentu untuk pulback.

Akhirnya, stop loss dan mengambil keuntungan ditetapkan berdasarkan ATR.

Kelebihan

  • Isyarat yang lebih boleh dipercayai menggunakan kombinasi pelbagai penunjuk.
  • Menangkap peluang jangka pendek dalam trend dengan kadar kemenangan yang tinggi.
  • Kawalan risiko yang berkesan dengan stop loss / mengambil keuntungan.

Risiko

  • Peningkatan yang berpanjangan boleh membawa kepada kerugian yang panjang.
  • Pelbagai penunjuk membuat penyesuaian parameter rumit.
  • Stop loss yang terlalu longgar boleh meningkatkan kerugian.

Pengurusan Risiko:

  • Mengoptimumkan parameter untuk penyelarasan penunjuk.
  • Sesuaikan stop loss dengan betul terhadap kerugian besar.
  • Elakkan saham dengan penurunan yang berpanjangan.

Pengoptimuman

  • Uji kombinasi parameter yang berbeza untuk nilai penunjuk terbaik.
  • Sesuaikan stop loss/take profit berdasarkan turun naik harian stok.
  • Tambah penunjuk jumlah untuk mengelakkan kes jumlah yang rendah.

Kesimpulan

Strategi ini menggabungkan pelbagai penunjuk dengan boleh dipercayai untuk pengenalan trend dan pulback. Mekanisme stop loss yang ketat mengawal risiko dan membolehkan pembubaran tepat pada masanya. Dengan parameter yang berterusan dan penyesuaian alam semesta, ia dapat mencapai pulangan yang baik.


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



Lebih lanjut