Strategi Perdagangan Purata Pergerakan Dinamik


Tarikh penciptaan: 2023-12-21 11:33:50 Akhirnya diubah suai: 2023-12-21 11:33:50
Salin: 1 Bilangan klik: 736
1
fokus pada
1623
Pengikut

Strategi Perdagangan Purata Pergerakan Dinamik

Gambaran keseluruhan

Strategi ini menggabungkan kelebihan indikator dinamik dan rata-rata bergerak untuk menjejaki trend harga saham dalam jangka masa pertengahan dan mencapai keuntungan yang stabil.

Prinsip

Strategi ini berdasarkan kepada tiga jenis Hull Moving Average, iaitu Hull Moving Average ((HMA), Hull Moving Average ((WHMA), dan Hull Moving Average ((EHMA)). Berdasarkan kod, strategi ini membolehkan pengguna beralih antara tiga jenis Hull MA.

Formula pengiraan HMA ialah:

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

Di antaranya, WMA mewakili purata bergerak bertimbangan dan n mewakili parameter kitaran. HMA bertindak balas lebih cepat terhadap perubahan harga berbanding SMA (rata-rata bergerak mudah).

Rumus pengiraan WHMA dan EHMA serupa dengan HMA.

Selepas mengira HMA, strategi ini menggunakan nilai garis tengah HMA sebagai isyarat perdagangan. Apabila harga melewati garis tengah HMA, masuk lebih banyak; Apabila harga melewati garis tengah HMA, keluarlah. Dengan demikian, ia menggunakan garis tengah HMA untuk mengikuti trend harga jangka menengah dan mencapai keuntungan.

Kelebihan

Strategi ini mempunyai kelebihan berbanding strategi purata bergerak tradisional:

  1. Kecepatan tindak balas yang lebih cepat, keupayaan untuk mengesan trend yang lebih kuat, serta penempatan dan penangguhan kerugian yang tepat pada masanya
  2. Mengurangkan frekuensi transaksi yang tidak perlu dan mengelakkan kebocoran.
  3. Fleksibel dalam konfigurasi parameter Hull MA, dapat menyesuaikan diri dengan persekitaran pasaran yang lebih luas
  4. Dapat beralih antara HMA, WHMA dan EHMA, meluaskan ruang lingkup

Risiko

Strategi ini mempunyai beberapa risiko:

  1. Kemungkinan untuk menghasilkan banyak isyarat tidak berkesan dalam keadaan pemulihan, yang meningkatkan frekuensi perdagangan dan kos slip
  2. Pengaturan parameter Hull MA yang tidak betul boleh terlepas titik perubahan trend, meningkatkan risiko kerugian
  3. Pemilihan saham yang tidak tepat, saham yang kurang cair, mungkin menghadapi penurunan besar

Kaedah pencegahan:

  1. Mengoptimumkan Hull MA parameter untuk mencari nilai optimum
  2. Kaedah ini juga boleh digunakan untuk menentukan titik balik trend.
  3. Pilih saham yang mempunyai kadar kecairan yang baik dan jumlah dagangan harian yang tinggi

Arah pengoptimuman

Strategi ini juga boleh dioptimumkan dengan:

  1. Meningkatkan jumlah transaksi atau penapis petunjuk lain untuk memastikan kebolehpercayaan isyarat perdagangan
  2. Gabungan dengan MACD, KDJ dan lain-lain untuk menentukan masa masuk, meningkatkan peluang menang
  3. Hull MA parameter kitaran disesuaikan dengan data pengesanan semula
  4. Beralih ke WHMA atau EHMA untuk menguji varian Hull yang terbaik untuk saham tertentu
  5. Meningkatkan strategi hentikan kerugian untuk mengawal kerugian tunggal

ringkaskan

Strategi perdagangan rata-rata bergerak ini menggabungkan kelebihan tindak balas cepat Hull MA, dapat mengesan trend harga saham dalam jangka masa pertengahan dengan berkesan, melakukan lebih banyak kedudukan dan berhenti pada waktu yang tepat, dan melakukan pengiraan sejarah dengan baik. Dengan mengoptimumkan lagi parameter, pilihan saham, strategi ini dapat memperoleh keuntungan tambahan yang lebih stabil.

Kod 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)