Chiến lược đột phá chỉ báo động lượng kép


Ngày tạo: 2023-11-16 17:00:54 sửa đổi lần cuối: 2023-12-01 14:59:44
sao chép: 1 Số nhấp chuột: 648
1
tập trung vào
1617
Người theo dõi

Chiến lược đột phá chỉ báo động lượng kép

Tổng quan

Chiến lược này là một chiến lược phá vỡ chỉ số động lực kép. Nó sử dụng hai chỉ số động lực với các tham số khác nhau để tạo ra tín hiệu giao dịch khi cả hai chỉ số động lực phá vỡ trục 0 . Chiến lược này chỉ thực hiện nhiều đầu vào, đầu trống chỉ được sử dụng cho vị trí bằng phẳng.

Nguyên tắc chiến lược

Mã đầu tiên đặt các thuộc tính chính sách, chẳng hạn như mô hình ủy thác, mô hình phí tổn, v.v.

// Momentum settings

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 code

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

mom0 là chỉ số động lực cơ bản, chiều dài là i_len, nguồn dữ liệu là i_src, tính phần trăm được quyết định bởi i_percent.

mom1 là chỉ số động lực với mom0 là nguồn dữ liệu và chiều dài là 1.

mom2 là một chỉ số động lực có chiều dài 1 có nguồn gốc từ dữ liệu i_src.

Chỉ số động lực cuối cùng được sử dụng là momX mặc định là mom1, cũng có thể chọn mom2 .

Khi mom0 và momX cùng vượt trên 0 axis, làm nhiều; khi mom0 và momX cùng thấp hơn 0 axis, bằng phẳng.

Lợi thế chiến lược

  1. Sử dụng chỉ số số động lượng kép kết hợp với các thiết lập tham số khác nhau có thể làm tăng độ tin cậy của tín hiệu giao dịch, xác nhận kép làm giảm tín hiệu giả.

  2. Chỉ thực hiện nhiều đầu vào, đầu trống chỉ được sử dụng để thanh toán, có thể làm giảm tần suất giao dịch và giảm chi phí giao dịch.

  3. Các tham số chỉ số động lực có thể được điều chỉnh để phù hợp với môi trường thị trường khác nhau.

  4. Cấu trúc mã rõ ràng, dễ hiểu và dễ sửa đổi.

  5. Thêm thiết lập tin nhắn giao dịch, có thể được sử dụng kết hợp với hệ thống giao dịch tự động.

Rủi ro chiến lược

  1. Mặc dù chỉ số động lượng kép có thể làm giảm tín hiệu giả, nhưng nó cũng có thể bỏ lỡ tín hiệu xu hướng yếu hơn.

  2. Bạn có thể bỏ lỡ cơ hội giao dịch không có đầu.

  3. Thiết lập tham số chỉ số động lực không đúng có thể dẫn đến giao dịch quá thường xuyên hoặc quá chậm.

  4. Dữ liệu phản hồi không đầy đủ có thể dẫn đến tham số quá phù hợp.

  5. Mặc dù xác nhận kép làm giảm tín hiệu giả nhưng không thể tránh được hoàn toàn, nhưng bạn vẫn cần chú ý đến tính hiệu quả của đột phá khi giao dịch trực tiếp.

Hướng tối ưu hóa chiến lược

  1. Bạn có thể kiểm tra các tham số khác nhau với độ dài khác nhau và tính toán phần trăm để tìm ra tham số tốt nhất.

  2. Bạn có thể xem xét thêm tín hiệu giao dịch không đầu vào sau khi xác nhận xu hướng để nắm bắt nhiều cơ hội giao dịch hơn.

  3. Có thể thử nghiệm các phương pháp tính toán khác nhau như ROC, RSI, v.v. để tìm ra hiệu quả tốt hơn.

  4. Có thể kết hợp các bộ lọc xu hướng để tránh giao dịch trong tình trạng biến động.

  5. Có thể tối ưu hóa chiến lược dừng lỗ, kiểm soát rủi ro trong khi tối đa hóa lợi nhuận.

Tóm tắt

Chiến lược này là một chiến lược phá vỡ chỉ số động lực kép điển hình. Nó sử dụng xác nhận kép để giảm tín hiệu giả, chỉ thực hiện nhiều đầu vào để giảm tần suất giao dịch. Ưu điểm của chiến lược là đơn giản, dễ thực hiện, có rất nhiều không gian cải tiến khi tối ưu hóa tham số và kiểm soát rủi ro.

Mã nguồn chiến lược
/*backtest
start: 2023-10-16 00:00:00
end: 2023-11-15 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Momentum Long 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)

// There will be no short entries, only exits from long.
strategy.risk.allow_entry_in(strategy.direction.long)

// 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

// Momentum settings

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"])

// Messages for buy and sell
message_buy  = input("{{strategy.order.alert_message}}", title="Buy message")
message_sell = input("{{strategy.order.alert_message}}", title="Sell message")

// Momentum code

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
    
// Strategy Alerts    

if (mom0 > 0 and momX > 0 and time_cond)
    strategy.entry("MomLE", strategy.long, stop = high + syminfo.mintick, comment = "MomLE", alert_message = message_buy)
else
	strategy.cancel("MomLE")
if (mom0 < 0 and momX < 0 and time_cond)
	strategy.entry("MomExit", strategy.short, stop = low - syminfo.mintick, comment = "MomSE", alert_message = message_sell)
else
	strategy.cancel("MomExit")
	
// Plotting

plot(0, color = #5d606b, title = "ZERO")
plot(mom0, color = #00bcd4, title = "MOM")
plot(mom1, color = #00FF00, title = "MOM1", display = display.none)
plot(mom2, color = #00FF00, title = "MOM2")