Strategi momentum adalah strategi untuk berdagang berdasarkan trend perubahan harga. Strategi ini menghasilkan isyarat perdagangan dengan mengira perubahan harga dalam jangka masa tertentu, menilai trend pergerakan harga, dan kemudian menghasilkan isyarat perdagangan. Apabila harga muncul dalam trend kenaikan, menghasilkan isyarat beli; apabila harga muncul dalam trend penurunan, menghasilkan isyarat jual.
Strategi ini menilai pergerakan harga dengan mengira perubahan harga penutupan dalam satu tempoh tertentu. Secara khusus, ia adalah mengira perubahan harga penutupan berbanding dengan harga penutupan sebelum tempoh N.
Mulakan dengan mengira MOM0 yang pertama, dengan formula:
MOM0 = CLOSE - CLOSE[N]
Di antaranya, CLOSE menunjukkan harga penutupan kitaran semasa, CLOSE[N] menunjukkan harga penutupan sebelum N kitaran. Oleh itu, MOM0>0 menunjukkan kenaikan harga penutupan sebelum N kitaran berbanding kitaran semasa, dan MOM0 menunjukkan penurunan harga penutupan sebelum N kitaran berbanding kitaran semasa.
MOM1 dinamika kedua kemudian dikira dengan formula:
MOM1 = MOM0 - MOM0[1]
Iaitu mengira nilai MOM0 untuk kitaran ini dengan mengurangkan nilai kitaran sebelumnya. MOM1>0 menunjukkan kenaikan MOM0, dan MOM1 menunjukkan penurunan MOM0.
Pada masa yang sama, MOM2 yang ketiga dikira dengan formula:
MOM2 = CLOSE - CLOSE[1]
Iaitu mengira harga penutupan kitaran semasa tolak harga penutupan kitaran sebelumnya. MOM2>0 menunjukkan kenaikan harga penutupan, dan MOM2 menunjukkan penurunan harga penutupan.
Apabila MOM0>0 dan MOM1>0, menunjukkan momentum terus meningkat, menghasilkan isyarat beli; apabila MOM0 dan MOM2, menunjukkan momentum terus menurun, menghasilkan isyarat jual.
Kod ini juga menambah syarat masa time_second, yang hanya akan menghasilkan isyarat perdagangan dalam tempoh masa pengembalian yang ditetapkan. Selain itu, sebelum meletakkan pesanan, periksa sekali lagi sama ada syarat masih berlaku, untuk mengelakkan isyarat yang hilang.
Risiko boleh dikurangkan dengan memendekkan kitaran pergerakan, memperkenalkan penghakiman trend, atau mengkonfigurasi stop loss. Anda juga boleh mempertimbangkan untuk memasukkan indikator jumlah dagangan untuk penyaringan.
Strategi momentum dapat menentukan arah titik panas pasaran dengan cara mengesan trend perubahan harga dan bukan harga itu sendiri, dan menangkap peluang kenaikan dan penurunan harga. Tetapi momentum mempunyai keterbelakangan, pilihan parameter dan pengoptimuman kombinasi sangat penting untuk kesan strategi.
/*backtest
start: 2022-09-25 00:00:00
end: 2023-02-03 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("Momentum Strategy", overlay = false, precision = 2, initial_capital = 10000, default_qty_value = 10000, default_qty_type = strategy.cash, commission_type = strategy.commission.percent, commission_value = 0, calc_on_every_tick = true)
// Calculate start/end date and time condition
startDate = input(timestamp("2021-01-02T00:00:00"), title = "Start Date", type = input.time)
finishDate = input(timestamp("2021-12-31T00:00:00"), title = "End Date",type = input.time)
time_cond = true
i_len = input(defval = 12, title = "Length", minval = 1)
i_src = input(defval = close, title = "Source")
i_percent = input(defval = true, title = "Percent?")
i_mom = input(defval = "MOM2", title = "MOM Choice", options = ["MOM1", "MOM2"])
momentum(seria, length, percent) =>
_mom = percent ? ( (seria / seria[length]) - 1) * 100 : seria - seria[length]
_mom
mom0 = momentum(i_src, i_len, i_percent)
mom1 = momentum(mom0, 1, i_percent)
mom2 = momentum(i_src, 1, i_percent)
momX = mom1
if i_mom == "MOM2"
momX := mom2
if (mom0 > 0 and momX > 0 and time_cond)
strategy.entry("MomLE", strategy.long, stop = high + syminfo.mintick, comment = "MomLE")
else
strategy.cancel("MomLE")
if (mom0 < 0 and momX < 0 and time_cond)
strategy.entry("MomSE", strategy.short, stop = low - syminfo.mintick, comment = "MomSE")
else
strategy.cancel("MomSE")
plot(mom0, color = #00bcd4, title = "MOM")
plot(mom1, color = #00FF00, title = "MOM1", display = display.none)
plot(mom2, color = #00FF00, title = "MOM2")