Tren Mengikuti Strategi Berdasarkan Moving Average dan Super Trend

Penulis:ChaoZhang, Tanggal: 2023-11-14 16:23:42
Tag:

img

Gambaran umum

Strategi ini menggabungkan indikator moving average dan super trend untuk mengikuti tren.

Logika Strategi

  1. Menghitung rata-rata bergerak tertimbang MA. Gunakan volume sebagai bobot untuk menghitung harga rata-rata tertimbang selama periode.

  2. Menghitung Hull moving average berdasarkan MA. Hull moving average lebih sensitif terhadap perubahan harga.

  3. Menghitung indikator super trend. Super trend menggabungkan ATR untuk mengidentifikasi perubahan tren. Menghitung band atas dan bawah.

  4. Ketika jarak dekat di atas band atas, pergi panjang. Ketika jarak dekat di bawah band bawah, pergi pendek.

  5. Grafik indikator tambahan seperti terbuka, dekat, tinggi dan rendah untuk secara visual mengamati pergerakan harga.

  6. Membuat keputusan perdagangan berdasarkan crossover indikator.

Analisis Keuntungan

  1. Strategi ini menggabungkan rata-rata bergerak dan super trend, memungkinkan deteksi tren yang lebih akurat.

  2. Hull moving average lebih sensitif terhadap perubahan harga, membantu pembalikan tren spot yang tepat waktu.

  3. Super trend secara dinamis menyesuaikan band atas dan bawah untuk menyesuaikan dengan volatilitas pasar.

  4. Indikator tambahan secara visual menampilkan pergerakan harga untuk membantu pengambilan keputusan dengan sinyal indikator.

  5. Strategi ini memungkinkan optimasi parameter pada periode rata-rata bergerak, super trend multiplier dll.

Analisis Risiko

  1. Whipsaws dapat menghasilkan sinyal palsu selama pasar yang terikat rentang, menyebabkan perdagangan yang tidak perlu.

  2. Pemantauan beberapa indikator dapat membuat strategi relatif rumit untuk diterapkan.

  3. Parameter perlu disesuaikan dengan baik agar sesuai dengan karakteristik produk yang berbeda.

  4. Stop loss yang ketat diperlukan untuk membatasi kerugian pada posisi tunggal.

  5. Frekuensi perdagangan yang tinggi membutuhkan kontrol dampak dari komisi.

Arahan Optimasi

  1. Uji rata-rata bergerak yang berbeda untuk menemukan yang lebih sensitif terhadap pasar.

  2. Uji berbagai pengganda tren super untuk menangkap perubahan tren dalam waktu.

  3. Menggabungkan indeks volatilitas untuk mengurangi ukuran posisi ketika volatilitas meningkat.

  4. Tambahkan kondisi breakout untuk menghindari sinyal palsu selama periode jangkauan terbatas.

  5. Mengoptimalkan strategi stop loss untuk membuatnya lebih beradaptasi dengan kondisi pasar.

Ringkasan

Strategi ini menilai arah tren menggunakan rata-rata bergerak dan super trend untuk mengikuti tren. Keuntungannya adalah verifikasi saling antara indikator untuk deteksi tren yang lebih akurat. Tetapi sinyal palsu harus diperhatikan. Strategi dapat ditingkatkan lebih lanjut melalui optimasi parameter dan pengendalian risiko.


/*backtest
start: 2022-11-07 00:00:00
end: 2023-11-13 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © rajukpatel

//@version=5
strategy('My RK Strategy with Alert', shorttitle='My RK Strategy with Alert', overlay=true )
src5 = input(close)

tf = input(1440)
len5 = timeframe.isintraday and timeframe.multiplier >= 1 ? tf / timeframe.multiplier * 7 : timeframe.isintraday and timeframe.multiplier < 60 ? 60 / timeframe.multiplier * 24 * 7 : 7

ma = ta.ema(src5 * volume, len5) / ta.ema(volume, len5)


//script taken from https://www.tradingview.com/script/kChCRRZI-Hull-Moving-Average/

src1 = ma

p(src1, len5) =>
    n = 0.0
    s = 0.0
    for i = 0 to len5 - 1 by 1
        w = (len5 - i) * len5
        n += w
        s += src5[i] * w
        s
    s / n

hm = 2.0 * p(src1, math.floor(len5 / 3)) - p(src1, len5)
vhma = p(hm, math.floor(math.sqrt(len5)))
lineColor = vhma > vhma[1] ? color.lime : color.red
plot(vhma, title='VHMA', color=lineColor, linewidth=3)
hColor = true
vis = true
hu = hColor ? vhma > vhma[2] ? #00ff00 : #ff0000 : #ff9800

vl = vhma[0]
ll = vhma[1]
m1 = plot(vl, color=hu, linewidth=1, transp=60)
m2 = plot(vis ? ll : na, color=hu, linewidth=2, transp=80)

fill(m1, m2, color=hu, transp=70)
//

b = timeframe.isintraday and timeframe.multiplier >= 1 ? 60 / timeframe.multiplier * 7 : timeframe.isintraday and timeframe.multiplier < 60 ? 60 / timeframe.multiplier * 24 * 7 : 7



//
res5 = input.timeframe('D')

o = request.security(syminfo.tickerid, res5, open, barmerge.gaps_off, barmerge.lookahead_on)
c = request.security(syminfo.tickerid, res5, close, barmerge.gaps_off, barmerge.lookahead_on)
hz = request.security(syminfo.tickerid, res5, high, barmerge.gaps_off, barmerge.lookahead_on)
l = request.security(syminfo.tickerid, res5, low, barmerge.gaps_off, barmerge.lookahead_on)



col = c >= o ? color.lime : color.red

ppo = plot(b ? o >= c ? hz : l : o, color=col, title='Open', style=plot.style_stepline, transp=100)
ppc = plot(b ? o <= c ? hz : l : c, color=col, title='Close', style=plot.style_stepline, transp=100)

plot(b and hz > c ? hz : na, color=col, title='High', style=plot.style_circles, linewidth=2, transp=60)
plot(b and l < c ? l : na, color=col, title='Low', style=plot.style_circles, linewidth=2, transp=60)

fill(ppo, ppc, col, transp=90)

//
// INPUTS //
st_mult = input.float(1, title='SuperTrend Multiplier', minval=0, maxval=100, step=0.01)
st_period = input.int(50, title='SuperTrend Period', minval=1)

// CALCULATIONS //
up_lev = l - st_mult * ta.atr(st_period)
dn_lev = hz + st_mult * ta.atr(st_period)

up_trend = 0.0
up_trend := c[1] > up_trend[1] ? math.max(up_lev, up_trend[1]) : up_lev

down_trend = 0.0
down_trend := c[1] < down_trend[1] ? math.min(dn_lev, down_trend[1]) : dn_lev

// Calculate trend var
trend = 0
trend := c > down_trend[1] ? 1 : c < up_trend[1] ? -1 : nz(trend[1], 1)

// Calculate SuperTrend Line
st_line = trend == 1 ? up_trend : down_trend

// Plotting
//plot(st_line[1], color = trend == 1 ? color.green : color.red , style = plot.style_cross, linewidth = 2, title = "SuperTrend")
buy = ta.crossover(c, st_line)
sell = ta.crossunder(c, st_line)
signal = input(false)

/////////////// Plotting /////////////// 
plotshape(signal and buy, style=shape.triangleup, size=size.normal, location=location.belowbar, color=color.new(color.lime, 0))
plotshape(signal and sell, style=shape.triangledown, size=size.normal, location=location.abovebar, color=color.new(color.red, 0))


if buy
    strategy.entry('My Long Entry Id', strategy.long)

if sell
    strategy.entry('My Short Entry Id', strategy.short)



Lebih banyak