
Strategi ini dinamakan “Dynamic Moving Average Line Strategy” dan ide utamanya adalah menggunakan arah dan hubungan antara garis rata-rata bergerak dan harga untuk menilai tren, masuk ke dalam medan dalam arah tren, dan melonggarkan posisi ketika tidak ada tren.
Strategi ini menggunakan harga sumber untuk setiap siklus panjang untuk menghitung rata-rata bergerak, harga sumber dapat memilih OHLC4, HLC3, harga penutupan, dll. Rata-rata bergerak yang dihitung didefinisikan sebagai sma. Kemudian dipetakan garis panjang dan garis pendek berdasarkan proporsi dari nilai rata-rata bergerak, dengan hubungan posisi garis panjang dan garis pendek untuk menilai apakah saat ini sedang dalam tren naik atau tren turun.
Secara khusus, rumus perhitungan untuk garis pendek adalah: shortline = sma * ((100 + shortlevel) / 100), di mana shortlevel adalah sebuah bilangan positif yang dapat diatur oleh pengguna, mewakili rasio jarak garis pendek dari garis 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 naik melalui garis pendek, berarti masuk ke tren naik, saat ini jika needlong memungkinkan untuk melakukan lebih banyak, maka akan melakukan lebih banyak di bawah tingkat harga garis panjang; ketika harga turun melalui garis panjang, berarti masuk ke tren turun, saat ini jika needshort memungkinkan untuk kosong, maka akan melakukan kosong di bawah tingkat harga garis pendek.
Baik melakukan over atau short, ketika harga kembali ke Moving Average, mewakili akhir tren, yang pada saat itu akan meratakan semua posisi sebelumnya.
Dengan cara ini, arah tren dinilai melalui hubungan dinamis antara garis panjang pendek dan garis rata-rata bergerak dan masuk dan keluar berdasarkannya.
Keuntungan terbesar dari strategi ini adalah kemampuan untuk menangkap arah tren utama dengan lebih fleksibel. Strategi ini lebih canggih dan lebih cerdas dibandingkan dengan strategi yang hanya memicu titik jual beli pada tingkat tetap.
Kedua, pergerakan rata-rata juga memiliki beberapa efek filter, untuk beberapa tingkat menghindari terkepung oleh getaran frekuensi tinggi. Pada saat yang sama, berdasarkan tingkat pergerakan rata-rata untuk menilai apakah tren berakhir tepat waktu, ini juga sangat penting.
Risiko terbesar dari strategi ini adalah bahwa rata-rata bergerak berkinerja berbeda pada periode yang berbeda. Biasanya rata-rata bergerak cukup untuk mewakili arah tren, tetapi dalam beberapa situasi ekstrem rata-rata bergerak dapat dipotong dalam waktu singkat, menyebabkan kesalahan masuk, atau terbalik dari puncak.
Aspek lain dari risiko adalah bahwa moving averages sendiri sangat lambat. Untuk beberapa perubahan harga yang singkat dan tajam, moving averages sulit untuk dilacak dan waktu, yang mungkin akan kehilangan titik masuk atau titik keluar. Perlu mengurangi siklus untuk mempercepat kecepatan respons moving averages.
Strategi ini dapat terus dioptimalkan dalam beberapa hal:
Strategi ini melakukan penilaian tren dan perdagangan multirumah yang sesuai dengan cara menetapkan titik jual beli secara dinamis. Metode ini didasarkan pada sinyal perdagangan yang ditetapkan secara dinamis pada garis rata-rata bergerak, yang menangkap tren harga secara lebih fleksibel dan cerdas dibandingkan dengan titik pemicu statis.
/*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()