Chiến lược lựa chọn phạm vi ngày thử nghiệm ngược thích nghi dựa trên MA hai lần

Tác giả:ChaoZhang, Ngày: 2024-01-05 12:12:10
Tags:

img

Tổng quan

Ý tưởng cốt lõi của chiến lược này là thực hiện một khuôn khổ có thể chọn linh hoạt phạm vi ngày backtest để đáp ứng nhu cầu khác nhau của người dùng, để họ có thể tự động hoặc thủ công thiết lập thời gian bắt đầu và kết thúc cho backtest.

Chiến lược cung cấp bốn tùy chọn để lựa chọn phạm vi ngày thông qua các tham số đầu vào: sử dụng tất cả dữ liệu lịch sử, ngày gần đây được chỉ định, tuần gần đây được chỉ định hoặc chỉ định theo cách thủ công phạm vi ngày. Chiến lược sẽ động lập cửa sổ backtest dựa trên phạm vi ngày đã chọn, trong khi giữ cho logic giao dịch không thay đổi, để có thể so sánh sự khác biệt hiệu suất dưới các cửa sổ thời gian khác nhau.

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

Chiến lược bao gồm hai mô-đun: lựa chọn phạm vi ngày backtest và chiến lược giao dịch MA kép.

Mô-đun lựa chọn phạm vi ngày kiểm tra lại

  1. Cung cấp bốn tùy chọn để lựa chọn phạm vi ngày: tất cả dữ liệu lịch sử (TẤT), ngày chỉ định gần đây (Ngày), tuần chỉ định gần đây (Tuần), phạm vi ngày chỉ định thủ công (HANDY).
  2. Đặt động thời gian bắt đầu và kết thúc backtest dựa trên chuyển đổi dấu thời gian của phạm vi đã chọn.
  3. Sử dụng chức năng cửa sổ điều kiện thời gian để lọc nến và chỉ thực hiện backtest trong phạm vi ngày đã chọn.

Mô-đun chiến lược giao dịch MA đôi

  1. Thời gian MA nhanh là fastMA, mặc định 14; thời gian MA chậm là slowMA, mặc định 28.
  2. Long khi MA nhanh vượt qua MA chậm; vị trí gần khi MA nhanh vượt qua dưới MA chậm.
  3. Hình vẽ các đường cong MA nhanh và chậm.

Phân tích lợi thế

  1. Dễ dàng chọn các phạm vi ngày backtest khác nhau mà không bị giới hạn để đáp ứng các nhu cầu thử nghiệm khác nhau.
  2. Có thể kiểm tra tác động của các thông số thời gian khác nhau trong cùng một khung thời gian với khả năng so sánh kết quả.
  3. Dễ dàng sửa đổi logic giao dịch để phục vụ như một khuôn khổ cho các chiến lược khác.
  4. Đơn giản để hiểu chiến lược MA đôi, dễ dàng cho người mới bắt đầu.

Phân tích rủi ro và giải pháp

  1. Chiến lược MA đôi là thô với các vấn đề mua / bán thường xuyên.
  2. Lưu ý rằng bạn có thể cài đặt ngày theo cách thủ công để tránh lỗi.
  3. Có thể xem xét thêm trượt hoặc phí để giảm giao dịch thường xuyên.

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

  1. Thêm logic dừng lỗ để giảm rủi ro mất mát.
  2. Lọc các cổ phiếu với các cổ phiếu theo mức độ liên quan của chỉ số mạnh để tăng sự ổn định.
  3. Thêm bộ lọc để loại bỏ các tín hiệu không ổn định trong khoảng thời gian nhất định để giảm giao dịch không cần thiết.
  4. Kiểm tra hiệu suất của chỉ số cổ phiếu để tìm các giống tốt nhất.

Kết luận

Là một khuôn khổ linh hoạt và tùy biến cho việc lựa chọn phạm vi ngày, những lợi thế là đáp ứng nhu cầu thử nghiệm khác nhau của người dùng. Kết hợp với logic giao dịch MA đôi đơn giản nhưng hiệu quả, nó có thể nhanh chóng xác minh và so sánh các chiến lược. Tối ưu hóa theo dõi như thêm bộ lọc hoặc logic dừng lỗ có thể làm cho chiến lược thực tế hơn cho giao dịch trực tiếp. Tóm lại, khuôn khổ chiến lược có khả năng mở rộng và giá trị tham chiếu tốt.


/*backtest
start: 2022-12-29 00:00:00
end: 2024-01-04 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy(title = "How To Auto Set Date Range", shorttitle = " ", overlay = true)

// Revision:        1
// Author:          @allanster 

// === INPUT MA ===
fastMA = input(defval = 14, title = "FastMA", type = input.integer, minval = 1, step = 1)
slowMA = input(defval = 28, title = "SlowMA", type = input.integer, minval = 1, step = 1)

// === INPUT BACKTEST RANGE ===
useRange     = input(defval = "WEEKS", title = "Date Range", type = input.string, confirm = false, options = ["ALL", "DAYS", "WEEKS", "MANUAL"])
nDaysOrWeeks = input(defval = 52, title = "# Days or Weeks", type = input.integer, minval = 1)
FromMonth    = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
FromDay      = input(defval = 15, title = "From Day", minval = 1, maxval = 31)
FromYear     = input(defval = 2019, title = "From Year", minval = 2014)
ToMonth      = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
ToDay        = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
ToYear       = input(defval = 9999, title = "To Year", minval = 2014)

// === FUNCTION EXAMPLE ===
window() => true

// === LOGIC ===
buy  = crossover(sma(close, fastMA), sma(close, slowMA))         // buy when fastMA crosses over slowMA
sell = crossunder(sma(close, fastMA), sma(close, slowMA))        // sell when fastMA crosses under slowMA

// === EXECUTION ===
strategy.entry("L", strategy.long, when=window() and buy)        // buy long when "within window of time" AND crossover
strategy.close("L", when=window() and sell)                      // sell long when "within window of time" AND crossunder         

// === PLOTTING ===
plot(sma(close, fastMA), title = 'FastMA', color = color.aqua, linewidth = 2, style = plot.style_line)    // plot FastMA
plot(sma(close, slowMA), title = 'SlowMA', color = color.yellow, linewidth = 2, style = plot.style_line)  // plot SlowMA


Thêm nữa