Chiến lược động lực là một chiến lược giao dịch dựa trên xu hướng thay đổi giá. Chiến lược này tạo ra tín hiệu giao dịch bằng cách tính toán sự thay đổi của giá trong một chu kỳ nhất định, đánh giá xu hướng chuyển động giá và sau đó tạo ra tín hiệu giao dịch.
Chiến lược này đánh giá động lực của giá bằng cách tính toán sự thay đổi của giá đóng cửa trong một chu kỳ nhất định. Cụ thể hơn, tính toán sự thay đổi của giá đóng cửa so với giá đóng cửa trước chu kỳ N.
Đầu tiên tính toán chỉ số động lượng đầu tiên MOM0, công thức là:
MOM0 = CLOSE - CLOSE[N]
Trong đó, CLOSE là giá đóng cửa chu kỳ hiện tại, CLOSE[N] là giá đóng cửa trước chu kỳ N. Như vậy, MOM0>0 là giá đóng cửa trước chu kỳ N tăng so với chu kỳ hiện tại, MOM0 là giá đóng cửa trước chu kỳ N giảm so với chu kỳ hiện tại.
Sau đó tính ra chỉ số động lượng thứ hai MOM1, công thức là:
MOM1 = MOM0 - MOM0[1]
MOM1>0 là MOM0 tăng, MOM1 là MOM0 giảm.
Đồng thời tính toán chỉ số động lực thứ ba MOM2, công thức là:
MOM2 = CLOSE - CLOSE[1]
Nghĩa là tính giá đóng cửa của chu kỳ hiện tại trừ giá đóng cửa của chu kỳ trước. MOM2>0 cho thấy giá đóng cửa tăng, MOM2 cho thấy giá đóng cửa giảm.
Khi MOM0>0 và MOM1>0, biểu thị động lực tiếp tục tăng, tạo ra tín hiệu mua; khi MOM0 và MOM2, biểu thị động lực tiếp tục giảm, tạo ra tín hiệu bán.
Điều kiện thời gian time_cond cũng được thêm vào mã, chỉ có tín hiệu giao dịch trong khoảng thời gian phản hồi được thiết lập. Ngoài ra, trước khi đặt hàng, hãy kiểm tra xem điều kiện vẫn còn tồn tại hay không, để tránh tình huống đặt hàng sau khi tín hiệu biến mất.
Có thể giảm rủi ro bằng cách rút ngắn chu kỳ động lượng, đưa ra phán đoán xu hướng hoặc thiết lập dừng lỗ. Cũng có thể xem xét thêm chỉ số khối lượng giao dịch để lọc.
Chiến lược động lực có thể xác định hiệu quả hướng điểm nóng của thị trường bằng cách theo dõi xu hướng thay đổi giá thay vì chính giá, nắm bắt cơ hội tăng và giảm giá. Tuy nhiên, động lực có tính trì trệ, lựa chọn tham số và tối ưu hóa danh mục rất quan trọng đối với hiệu quả chiến lược. Chiến lược này dựa trên giao chéo chỉ số động lực kép, có thể lọc một phần tiếng ồn.
/*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")