Strategi Pengesanan Trend Berdasarkan Garis Pivot Dinamik

Penulis:ChaoZhang, Tarikh: 2023-12-26 11:57:20
Tag:

img

Ringkasan

Strategi ini mengira harga tertinggi dan terendah terkini dalam tempoh tertentu, digabungkan dengan harga semasa, untuk membentuk garis tengah dinamik. Saluran turun merah dan saluran naik hijau kemudiannya dijana berdasarkan turun naik baru-baru ini. Tiga garis saluran membentuk julat yang boleh diperdagangkan. Apabila harga mendekati sempadan saluran, operasi terbalik dilakukan menyasarkan keuntungan kembali ke garis tengah. Sementara itu, terdapat pengiraan trend di dalam strategi untuk menapis perdagangan terhadap trend dan mengelakkan dimusnahkan oleh trend utama.

Logika Strategi

  1. Mengira garis tengah dinamik dengan harga tertinggi terkini, harga terendah dan harga penutupan semasa
  2. Menghasilkan jalur dinamik berdasarkan ATR dan pengganda, perubahan lebar dengan turun naik pasaran
  3. Pergi panjang apabila harga melompat dari band bawah, pergi pendek apabila melompat dari band atas
  4. Mempunyai mengambil keuntungan dan berhenti kehilangan logik menyasarkan garis tengah
  5. Sementara itu mengira indeks trend untuk menapis perdagangan terhadap trend

Analisis Kelebihan

  1. Band dinamik menyesuaikan diri dengan turun naik pasaran masa nyata
  2. Kemungkinan tinggi perdagangan mengikut trend
  3. Pengendalian Stop Loss Single Loss

Analisis Risiko

  1. Pengoptimuman parameter yang tidak betul boleh membawa kepada overtrading
  2. Tidak dapat menghapuskan sepenuhnya perdagangan yang bertentangan dengan trend di bawah trend utama
  3. Penembusan satu sisi mungkin terus berjalan

Arah pengoptimuman

  1. Sesuaikan parameter jalur untuk menyesuaikan produk yang berbeza
  2. Parameter indeks trend yang halus untuk meningkatkan kebarangkalian perdagangan trend
  3. Memperkenalkan elemen pembelajaran mesin untuk pengoptimuman parameter dinamik

Ringkasan

Strategi ini terutamanya bergantung pada goyangan pasaran untuk membuat keuntungan. Dengan menangkap titik pembalikan harga secara dinamik dengan band, digabungkan dengan penapisan trend, ia dapat memperoleh keuntungan secara berkesan dari pembalikan purata sambil mengawal risiko. Kuncinya terletak pada penyesuaian parameter untuk membuat band responsif tetapi tidak terlalu sensitif. Indeks trend juga memerlukan tempoh yang tepat untuk memainkan perannya. Dengan trend dan berhenti yang menguntungkan secara teori, strategi ini dapat mencapai pulangan yang baik melalui pengoptimuman.


/*backtest
start: 2023-11-25 00:00:00
end: 2023-12-25 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="Strategy - Bobo PAPATR", overlay=true, default_qty_type = strategy.fixed, default_qty_value = 1, initial_capital = 10000)

// === STRATEGY RELATED INPUTS AND LOGIC ===
len = input(24, minval=1, title="Pivot Length, defines lookback for highs and lows to make pivots")
length = input(title="ATR lookback (Lower = bands more responsive to recent price action)", type=input.integer, defval=22)
myatr = atr(length)
dailyatr = myatr[1]
atrmult = input(title="ATR multiplier (Lower = wider bands)", type=input.float, defval=3)
pivot0 = (high[1] + low[1]  + close[1]) / 3

// PIVOT CALC
h = highest(len)
h1 = dev(h, len) ? na : h
hpivot = fixnan(h1)
l = lowest(len)
l1 = dev(l, len) ? na : l
lpivot = fixnan(l1)
pivot = (lpivot + hpivot + pivot0) / 3
upperband1 = (dailyatr * atrmult) + pivot
lowerband1 = pivot - (dailyatr * atrmult)
middleband = pivot

// == TREND CALC ===
i1=input(2, "Momentum Period", minval=1) //Keep at 2 usually
i2=input(20, "Slow Period", minval=1)
i3=input(5, "Fast Period", minval=1)
i4=input(3, "Smoothing Period", minval=1)
i5=input(4, "Signal Period", minval=1)
i6=input(50, "Extreme Value", minval=1)
hiDif = high - high[1]
loDif = low[1] - low
uDM = hiDif > loDif and hiDif > 0 ? hiDif : 0
dDM =  loDif > hiDif and loDif > 0 ? loDif : 0
ATR = rma(tr(true), i1)
DIu = 100 * rma(uDM, i1) / ATR
DId = 100 * rma(dDM, i1) / ATR
HLM2 =  DIu - DId
DTI = (100 * ema(ema(ema(HLM2, i2), i3), i4)) /  ema(ema(ema(abs(HLM2), i2), i3), i4)
signal = ema(DTI, i5)


// === RISK MANAGEMENT INPUTS ===
inpTakeProfit   = input(defval = 0, title = "Take Profit (In Market MinTick Value)", minval = 0)
inpStopLoss     = input(defval = 100, title = "Stop Loss (In Market MinTick Value)", minval = 0)

// === RISK MANAGEMENT VALUE PREP ===
// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na

// === STRATEGY - LONG POSITION EXECUTION ===
enterLong = (((low<=lowerband1) and (close >lowerband1)) or ((open <= lowerband1) and (close > lowerband1))) and (strategy.opentrades <1) and (atr(3) > atr(50)) and (signal>signal[3])
exitLong = (high > middleband)
strategy.entry(id = "Long", long = true, when = enterLong) 
strategy.close(id = "Long", when = exitLong)

// === STRATEGY - SHORT POSITION EXECUTION ===
enterShort = (((high>=upperband1) and (close < upperband1)) or ((open >= upperband1) and (close < upperband1))) and (strategy.opentrades <1) and (atr(3) > atr(50)) and (signal<signal[3])
exitShort = (low < middleband)
strategy.entry(id = "Short", long = false, when = enterShort)
strategy.close(id = "Short", when = exitShort)

// === STRATEGY RISK MANAGEMENT EXECUTION ===
strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss)
strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss)

// === CHART OVERLAY ===
plot(upperband1, color=#C10C00, linewidth=3)
plot(lowerband1, color=#23E019, linewidth=3)
plot(middleband, color=#00E2E2, linewidth=3)
//plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)

Lebih lanjut