
Strategi ini dinamakan sebagai strategi garis purata bergerak yang dinamakan, idea utamanya adalah menggunakan arah garis purata bergerak dan hubungan harga untuk menilai trend, masuk ke dalam arah trend, dan melonggarkan kedudukan ketika tidak ada trend.
Strategi ini menggunakan harga sumber untuk jangka masa panjang untuk mengira purata bergerak, harga sumber boleh memilih OHLC4, HLC3, harga penutupan, dan sebagainya. Purata bergerak yang dikira ditakrifkan sebagai sma.
Khususnya, formula pengiraan garis pendek adalah: shortline = sma * ((100 + shortlevel) / 100), di mana shortlevel adalah nombor positif yang boleh ditetapkan oleh pengguna, mewakili perkadaran garis purata bergerak jarak garis pendek. Begitu juga dengan garis panjang, formula pengiraan adalah: longline = sma * ((100 + longlevel) / 100), longlevel adalah nombor negatif yang boleh ditetapkan oleh pengguna, mewakili perkadaran garis purata bergerak jarak garis panjang.
Dengan cara ini, nilai garis pendek sentiasa lebih besar daripada rata-rata bergerak, dan nilai garis panjang sentiasa lebih kecil daripada rata-rata bergerak. Apabila harga naik, garis pendek mewakili masuk ke dalam trend naik, ketika ini jika perlu panjang membolehkan melakukan lebih banyak, ia akan melakukan lebih banyak di tingkat harga garis panjang; apabila harga turun, garis panjang mewakili masuk ke dalam trend menurun, ketika ini jika perlu pendek membenarkan kosong, ia akan kosong di bawah tahap harga garis pendek.
Sama ada melakukan over atau short, apabila harga kembali ke garis purata bergerak, ia mewakili berakhirnya trend, di mana semua kedudukan sebelumnya akan dihapuskan.
Dengan cara ini, arah trend dapat dinilai melalui hubungan dinamik antara garis panjang dan garis pendek dengan garis purata bergerak dan masuk dan keluar mengikutnya.
Kelebihan utama strategi ini adalah bahawa ia dapat menangkap arah trend utama dengan lebih fleksibel. Strategi ini lebih canggih dan lebih pintar daripada strategi yang hanya mencetuskan titik jual beli pada tahap tetap.
Kedua, garisan purata bergerak itu sendiri juga mempunyai kesan gelombang, ke tahap tertentu untuk mengelakkan daripada disumbat oleh getaran frekuensi tinggi. Pada masa yang sama, ia juga sangat penting untuk menilai sama ada trend berakhir pada waktu yang tepat berdasarkan tahap garisan purata bergerak.
Risiko terbesar dalam strategi ini adalah bahawa purata bergerak mempunyai prestasi yang berbeza dalam tempoh yang berbeza. Dalam keadaan normal, purata bergerak cukup untuk mewakili arah trend, tetapi dalam beberapa keadaan yang melampau, purata bergerak mungkin dipotong dalam jangka masa pendek, menyebabkan masuk yang salah, atau terbalik dari puncak.
Bahagian lain dari risiko adalah bahawa garis purata bergerak sendiri sangat lambat. Untuk beberapa pergerakan harga yang kecil dan tajam, garis purata bergerak sukar dan masa untuk dijejaki, yang mungkin terlepas titik masuk atau titik keluar. Perlu mengurangkan kitaran untuk mempercepatkan tindak balas garis purata bergerak.
Strategi ini boleh terus dioptimumkan dalam beberapa aspek:
Strategi ini melakukan penilaian trend dan perdagangan multirumah yang sesuai dengan cara menetapkan titik beli dan jual secara dinamik. Kaedah ini berdasarkan pada pergerakan rata-rata yang menetapkan isyarat perdagangan secara dinamik dapat menangkap trend harga dengan lebih fleksibel dan cerdas berbanding dengan titik pemicu statik.
/*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()