Strategi Rata-rata Gerak Dinamis

Penulis:ChaoZhang, Tanggal: 2023-11-23 11:39:24
Tag:

img

Gambaran umum

Strategi ini disebut Dynamic Moving Average Strategy. Ide utamanya adalah menggunakan arah rata-rata bergerak dan hubungannya dengan harga untuk menentukan tren. Masuk ke pasar sesuai dengan arah tren dan tutup posisi ketika tidak ada tren.

Prinsip Strategi

Strategi ini menggunakan harga sumber selama periode panjang untuk menghitung rata-rata bergerak, di mana harga sumber dapat OHLC4, HLC3, harga penutupan dll. Rata-rata bergerak yang dihasilkan didefinisikan sebagai sma. Kemudian garis panjang dan garis pendek digambarkan berdasarkan persentase dari nilai rata-rata bergerak untuk menentukan apakah kita saat ini berada dalam tren naik atau turun.

Secara khusus, garis pendek dihitung sebagai: shortline = sma * ((100 + shortlevel) / 100), di mana shortlevel adalah angka positif yang ditetapkan oleh pengguna, mewakili persentase bahwa garis pendek berada di atas rata-rata bergerak.

Dengan demikian, nilai garis pendek selalu lebih besar dari rata-rata bergerak, dan nilai garis panjang selalu lebih kecil dari rata-rata bergerak. Ketika harga melintasi di atas garis pendek, itu mewakili bahwa tren naik dimulai. Pada saat ini jika needlong memungkinkan panjang, itu akan menempatkan pesanan panjang di tingkat harga garis panjang. Ketika harga melintasi di bawah garis panjang, itu mewakili bahwa tren menurun dimulai. Pada saat ini jika needshort memungkinkan pendek, itu akan menempatkan pesanan pendek di tingkat harga garis pendek.

Terlepas dari panjang atau pendek, ketika harga bergerak kembali ke rata-rata bergerak, itu berarti tren berakhir.

Jadi arah tren dan entri yang sesuai dan ada ditentukan oleh hubungan dinamis antara garis panjang / pendek dan garis rata-rata bergerak.

Keuntungan

Keuntungan terbesar dari strategi ini adalah bahwa dengan mengatur garis panjang dan pendek secara dinamis, ia dapat dengan relatif fleksibel menangkap arah tren utama.

Kedua, rata-rata bergerak itu sendiri memiliki efek penyaringan sampai batas tertentu, yang menghindari terjebak oleh fluktuasi frekuensi tinggi sampai batas tertentu.

Risiko

Risiko terbesar dari strategi ini adalah bahwa kinerja rata-rata bergerak berbeda dalam periode yang berbeda. Biasanya rata-rata bergerak cukup untuk mewakili arah tren, tetapi dalam beberapa kondisi pasar yang ekstrim, rata-rata bergerak dapat ditembus dalam jangka pendek, menyebabkan entri yang salah, atau divergensi atas dll. Dalam hal ini rata-rata bergerak periode yang lebih lama diperlukan untuk memastikan akurasi penilaian tren.

Aspek lain dari risiko adalah bahwa rata-rata bergerak sendiri memiliki inersia yang tinggi. untuk beberapa fluktuasi harga yang pendek dan intens, sulit bagi rata-rata bergerak untuk merespons tepat waktu, sehingga kehilangan titik masuk atau keluar. periode perlu dikurangi untuk mempercepat kecepatan reaksi rata-rata bergerak.

Peningkatan

Strategi ini dapat dioptimalkan lebih lanjut dalam aspek berikut:

  1. Tambahkan logika stop loss. Karena moving average memiliki keterlambatan dalam menilai tren, terjebak tidak dapat dihindari sepenuhnya. Jadi stop trailing yang tepat dapat mengurangi risiko lebih lanjut.

  2. Optimalkan parameter garis panjang/pendek. Saat ini persentase garis panjang/pendek menyimpang dari rata-rata bergerak tetap. Ini dapat diuji pada berbagai set data untuk menemukan nilai optimal.

  3. Selain posisi garis panjang/pendek, algoritma juga dapat menilai kekuatan tren, untuk menghindari kesalahan dari sinyal tren yang lemah.

  4. Cobalah menerapkan moving average pada produk perdagangan lainnya untuk memverifikasi kinerja lintas produk.

Kesimpulan

Strategi ini menentukan tren dan menempatkan perdagangan panjang/pendek yang sesuai dengan secara dinamis mengatur titik masuk dan keluar berdasarkan rata-rata bergerak. Metode ini secara dinamis menghasilkan sinyal perdagangan berdasarkan rata-rata bergerak lebih fleksibel dan cerdas dalam menangkap tren harga dibandingkan dengan tingkat pemicu statis. Ini juga memecahkan masalah kurangnya ketepatan waktu rata-rata bergerak sendiri. Dengan backtesting sistematis dan optimasi parameter, strategi ini dapat menghasilkan keuntungan yang baik.


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

//Noro
//2018

//@version=3
strategy(title = "Noro's ShiftMA Strategy v1.1", shorttitle = "ShiftMA str 1.1", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 100)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(false, defval = false, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
per = input(3, title = "Length")
src = input(ohlc4, title = "Source")
shortlevel = input(10.0, title = "Short line (red)")
longlevel = input(-5.0, title = "Long line (lime)")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//SMAs
sma = sma(src, per) 
//sma = lowest(low, per)
shortline = sma * ((100 + shortlevel) / 100)
longline = sma * ((100 + longlevel) / 100)
plot(shortline, linewidth = 2, color = red, title = "Short line")
plot(sma, linewidth = 2, color = blue, title = "SMA line")
plot(longline, linewidth = 2, color = lime, title = "Long line")

//plot(round(buy * 100000000), linewidth = 2, color = lime)
//plot(round(sell * 100000000), linewidth = 2, color = red)

//Trading
size = strategy.position_size
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]

if (not na(close[per])) and size == 0 and needlong
    strategy.entry("L", strategy.long, lot, limit = longline, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if (not na(close[per])) and size == 0 and needshort
    strategy.entry("S", strategy.short, lot, limit = shortline, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if (not na(close[per])) and size > 0 
    strategy.entry("Close", strategy.short, 0, limit = sma, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if (not na(close[per])) and size < 0 
    strategy.entry("Close", strategy.long, 0, limit = sma, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()

Lebih banyak