Strategi purata bergerak dinamik berbilang tempoh

Penulis:ChaoZhang, Tarikh: 2023-10-27 16:07:16
Tag:

img

Strategi ini secara dinamik memilih pelbagai jenis purata bergerak di pelbagai jangka masa untuk menjana isyarat perdagangan.

Logika Strategi

Strategi ini membolehkan memilih dari purata bergerak SMA, EMA, TEMA, WMA dan HMA, dengan panjang tempoh yang boleh disesuaikan.

Secara khusus, strategi pertama menentukan tempoh backtest berdasarkan parameter input. ia kemudian mengira lima jenis purata bergerak:

  • SMA purata bergerak mudah
  • EMA Exponential Moving Average
  • TEMA Triple Exponential Moving Average
  • WMA Purata Bergerak Bertimbang
  • HMA Hull Moving Average

Purata bergerak yang sepadan digambarkan berdasarkan pemilihan. Ia pergi panjang apabila harga penutupan di atas purata bergerak, dan pergi pendek apabila di bawah.

Dengan menggabungkan pelbagai jenis purata bergerak, strategi ini dapat meluruskan data harga dan menapis bunyi bising pasaran untuk menjana isyarat perdagangan yang lebih boleh dipercayai.

Kelebihan

  • Menggabungkan pelbagai purata bergerak untuk kebolehpercayaan yang lebih besar
  • Tempoh yang boleh disesuaikan sesuai dengan jangka masa dagangan yang berbeza
  • Peralihan purata dinamik membolehkan pengoptimuman fleksibel
  • Mudah dan intuitif trend berikut sesuai untuk pemula

Risiko

  • Kelewatan purata bergerak mungkin terlepas titik perubahan trend
  • Penyesuaian berlebihan dengan parameter tetap, prestasi rendah dalam perdagangan langsung mungkin
  • Isyarat panjang/pendek yang agresif memberi kesan kepada kecekapan penggunaan modal

Risiko boleh dikurangkan dengan:

  • Menambah penunjuk lain untuk menentukan entri dengan lebih tepat
  • Pengoptimuman perdagangan sebenar parameter untuk rejimen pasaran yang berbeza
  • Mengoptimumkan saiz kedudukan berdasarkan saiz akaun dan pengurusan risiko

Peluang Peningkatan

Strategi ini boleh ditingkatkan dalam beberapa aspek:

  1. Tambah penapis lain untuk isyarat yang lebih stabil

    contohnya penunjuk jumlah untuk mengelakkan pecah palsu tanpa pengesahan jumlah.

  2. Mengoptimumkan logik masuk dan keluar

    Tetapkan saluran harga dan hentikan kerugian untuk mengurangkan kerugian yang tidak perlu.

  3. Tempoh purata bergerak dinamik

    Gunakan tempoh yang lebih lama dalam trend yang kuat dan tempoh yang lebih pendek semasa penyatuan.

  4. Meningkatkan pengurusan wang

    Sesuaikan saiz kedudukan berdasarkan pengeluaran dan mengambil keuntungan.

Kesimpulan

Strategi ini menggabungkan pelbagai purata bergerak merentasi bingkai masa untuk menjana kesan trend yang agak stabil. Dengan ruang yang cukup untuk pengoptimuman dalam entri, keluar, parameter dan pengurusan wang, ia boleh ditingkatkan untuk prestasi dunia sebenar yang lebih baik.


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

//@version=3
strategy("MA_strategy ", shorttitle="MA_strategy", overlay=true, initial_capital=100000)

qty = input(100000000, "Buy quantity")

testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testStartHour = input(0, "Backtest Start Hour")
testStartMin = input(0, "Backtest Start Minute")

testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,testStartMin)

testStopYear = input(2099, "Backtest Stop Year")
testStopMonth = input(1, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)


testPeriodBackground = input(title="Color Background?", type=bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false


ma1 = input( "SMA",title="Select MA", options=["SMA", "EMA","TEMA", "WMA","HMA"])


len1 = input(7, minval=1, title="Period")

s=sma(close,len1)

e=ema(close,len1)


xEMA1 = ema(close, len1)
xEMA2 = ema(xEMA1, len1)
xEMA3 = ema(xEMA2, len1)
t = 3 * xEMA1 - 3 * xEMA2 + xEMA3


f_hma(_src, _length)=>
    _return = wma((2 * wma(_src, _length / 2)) - wma(_src, _length), round(sqrt(_length)))

h = f_hma(close, len1)

w = wma(close, len1)

ma = ma1 == "SMA"?s:ma1=="EMA"?e:ma1=="WMA"?w:ma1=="HMA"?h:ma1=="TEMA"?t:na

buy= close>ma
sell= close<ma

alertcondition(buy, title='buy', message='buy')
alertcondition(sell, title='sell', message='sell')

ordersize=floor(strategy.equity/close)

if testPeriod()
    strategy.entry("long",strategy.long,ordersize,when=buy)
    strategy.close("long", when = sell )


    
  









Lebih lanjut