Strategi Perdagangan Rata-rata Pergerakan Dinamis


Tanggal Pembuatan: 2023-12-21 11:33:50 Akhirnya memodifikasi: 2023-12-21 11:33:50
menyalin: 1 Jumlah klik: 736
1
fokus pada
1623
Pengikut

Strategi Perdagangan Rata-rata Pergerakan Dinamis

Ringkasan

Strategi ini menggabungkan keunggulan indikator momentum dan rata-rata bergerak untuk melacak tren jangka menengah harga saham dan menghasilkan keuntungan yang stabil.

Prinsip

Strategi ini didasarkan pada tiga varian Hull Moving Average, yaitu Hull Moving Average ((HMA), Hull Moving Average ((WHMA), dan Hull Moving Average ((EHMA). Menurut kode, strategi ini memungkinkan pengguna untuk beralih antara tiga jenis Hull MA.

Rumus HMA adalah:

HMA = WMA(2*WMA(close,n/2)-WMA(close,n),sqrt(n))

Di antaranya, WMA mewakili rata-rata bergerak bertimbang, n mewakili parameter siklus. HMA lebih cepat bereaksi terhadap perubahan harga dibandingkan SMA (rata-rata bergerak sederhana).

Rumus perhitungan WHMA dan EHMA mirip dengan HMA.

Setelah menghitung HMA, strategi ini menggunakan nilai garis tengah HMA sebagai sinyal perdagangan. Ketika harga melewati garis tengah HMA, masuk lebih banyak; Ketika harga melewati garis tengah HMA, keluarlah. Dengan demikian, ia menggunakan garis tengah HMA untuk melacak tren jangka menengah harga dan menghasilkan keuntungan.

Keunggulan

Strategi ini memiliki beberapa keuntungan dibandingkan dengan strategi moving average tradisional:

  1. Tanggapan lebih cepat, kemampuan untuk melacak tren yang lebih kuat, dan akses dan penghentian kerugian yang tepat waktu
  2. Mengurangi frekuensi transaksi yang tidak perlu dan menghindari kebocoran.
  3. Fleksibel konfigurasi parameter Hull MA, dapat beradaptasi dengan lingkungan pasar yang lebih luas
  4. Dapat beralih antara HMA, WHMA dan EHMA, memperluas ruang lingkup aplikasi

Risiko

Strategi ini juga memiliki beberapa risiko:

  1. Peningkatan frekuensi transaksi dan biaya slippage
  2. Hull MA parameter yang tidak tepat dapat melewatkan titik pembalikan tren, meningkatkan risiko kerugian
  3. Pemilihan saham yang tidak tepat, memilih saham dengan likuiditas rendah, dapat menghadapi slippage besar

Tanggapan:

  1. Optimalkan parameter Hull MA untuk menemukan nilai optimal
  2. Menentukan titik balik tren dalam kombinasi dengan indikator lainnya
  3. Pilih saham yang memiliki likuiditas baik dan volume transaksi harian yang tinggi

Arah optimasi

Strategi ini juga dapat dioptimalkan dengan:

  1. Meningkatkan volume transaksi atau penyaringan indikator lainnya untuk memastikan keandalan sinyal perdagangan
  2. Kombinasi dengan indikator lain seperti MACD, KDJ untuk menentukan waktu masuk, meningkatkan peluang menang
  3. Hull MA periodik parameter disesuaikan dengan data pelacakan solid-state
  4. Beralih ke WHMA atau EHMA untuk menguji varian Hull yang terbaik di saham tertentu
  5. Meningkatkan strategi stop loss untuk mengendalikan kerugian tunggal

Meringkaskan

Strategi perdagangan rata-rata bergerak ini mengintegrasikan keunggulan responsif cepat Hull MA, dapat secara efektif melacak tren harga saham jangka menengah, melakukan posisi lebih banyak dan menghentikan kerugian pada saat yang tepat, dan memiliki kinerja historis yang baik. Dengan lebih mengoptimalkan pengaturan parameter, dan memilih rentang saham, strategi ini dapat menghasilkan keuntungan tambahan yang lebih stabil. Ini adalah strategi kuantitatif yang mudah diterapkan dan dapat dikontrol risiko.

Kode Sumber Strategi
/*backtest
start: 2022-12-14 00:00:00
end: 2023-12-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('Position Investing by SirSeff', overlay=true, pyramiding=1, default_qty_type=strategy.percent_of_equity, default_qty_value=100, calc_on_order_fills=false, slippage=0, commission_type=strategy.commission.percent, commission_value=0)
strat_dir_input = input.string(title='Strategy Direction', defval='long', options=['long', 'short', 'all'])
strat_dir_value = strat_dir_input == 'long' ? strategy.direction.long : strat_dir_input == 'short' ? strategy.direction.short : strategy.direction.all
strategy.risk.allow_entry_in(strat_dir_value)
//////////////////////////////////////////////////////////////////////
// Testing Start dates
testStartYear = input(2000, 'Backtest Start Year')
testStartMonth = input(1, 'Backtest Start Month')
testStartDay = input(1, 'Backtest Start Day')
testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, 0, 0)
//Stop date if you want to use a specific range of dates
testStopYear = input(2030, 'Backtest Stop Year')
testStopMonth = input(12, 'Backtest Stop Month')
testStopDay = input(30, 'Backtest Stop Day')
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0)


testPeriod() => true
// Component Code Stop
//////////////////////////////////////////////////////////////////////
//INPUT
src = input(close, title='Source')
modeSwitch = input.string('Hma', title='Hull Variation', options=['Hma', 'Thma', 'Ehma'])
length = input(55, title='Length(180-200 for floating S/R , 55 for swing entry)')
switchColor = input(true, 'Color Hull according to trend?')
candleCol = input(false, title='Color candles based on Hull\'s Trend?')
visualSwitch = input(true, title='Show as a Band?')
thicknesSwitch = input(1, title='Line Thickness')
transpSwitch = input.int(40, title='Band Transparency', step=5)

//FUNCTIONS
//HMA
HMA(_src, _length) =>
    ta.wma(2 * ta.wma(_src, _length / 2) - ta.wma(_src, _length), math.round(math.sqrt(_length)))
//EHMA    
EHMA(_src, _length) =>
    ta.ema(2 * ta.ema(_src, _length / 2) - ta.ema(_src, _length), math.round(math.sqrt(_length)))
//THMA    
THMA(_src, _length) =>
    ta.wma(ta.wma(_src, _length / 3) * 3 - ta.wma(_src, _length / 2) - ta.wma(_src, _length), _length)

//SWITCH
Mode(modeSwitch, src, len) =>
    modeSwitch == 'Hma' ? HMA(src, len) : modeSwitch == 'Ehma' ? EHMA(src, len) : modeSwitch == 'Thma' ? THMA(src, len / 2) : na

//OUT
HULL = Mode(modeSwitch, src, length)
MHULL = HULL[0]
SHULL = HULL[2]

//COLOR
hullColor = switchColor ? HULL > HULL[2] ? #00ff00 : #ff0000 : #ff9800

//PLOT
///< Frame
Fi1 = plot(MHULL, title='MHULL', color=hullColor, linewidth=thicknesSwitch, transp=50)
Fi2 = plot(visualSwitch ? SHULL : na, title='SHULL', color=hullColor, linewidth=thicknesSwitch, transp=50)
///< Ending Filler
fill(Fi1, Fi2, title='Band Filler', color=hullColor, transp=transpSwitch)
///BARCOLOR
barcolor(color=candleCol ? switchColor ? hullColor : na : na)


if HULL[0] > HULL[2] and testPeriod()
    strategy.entry('Invest', strategy.long)
if HULL[0] < HULL[2] and testPeriod()
    strategy.entry('Pause', strategy.short)