Chiến lược lựa chọn phạm vi thời gian kiểm tra ngược thích ứng dựa trên sự chồng chất MA kép


Ngày tạo: 2024-01-05 12:12:10 sửa đổi lần cuối: 2024-01-05 12:12:10
sao chép: 0 Số nhấp chuột: 589
1
tập trung vào
1621
Người theo dõi

Chiến lược lựa chọn phạm vi thời gian kiểm tra ngược thích ứng dựa trên sự chồng chất MA kép

Tổng quan

Ý tưởng cốt lõi của chiến lược này là thực hiện một khung có thể lựa chọn một phạm vi thời gian phản hồi linh hoạt, cho phép người dùng có thể tự động hoặc thủ công đặt thời gian bắt đầu phản hồi theo nhu cầu khác nhau.

Chiến lược cung cấp bốn cách để chọn phạm vi ngày thông qua các tham số nhập: sử dụng toàn bộ dữ liệu lịch sử, ngày gần nhất, tuần gần nhất hoặc thiết lập phạm vi ngày bằng tay. Chiến lược sẽ thiết lập cửa sổ phản hồi động theo phạm vi ngày được chọn, trong khi logic giao dịch không thay đổi, để có thể so sánh sự khác biệt trong hoạt động của chiến lược trong các cửa sổ thời gian khác nhau.

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

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

Khả năng chọn mô-đun

  1. Có bốn lựa chọn về phạm vi ngày: toàn bộ dữ liệu lịch sử ((ALL), ngày gần đây nhất ((DAYS), ngày gần đây nhất ((WEEKS) và phạm vi ngày theo cách thủ công ((MANUAL)).
  2. Tùy thuộc vào phạm vi được chọn, thời gian bắt đầu và thời gian kết thúc được đo bằng cách chuyển đổi các thiết lập động của khung thời gian.
  3. Sử dụng hàm điều kiện thời gian window() để lọc các dòng K, chỉ kiểm tra lại trong phạm vi ngày được chọn.

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

  1. Trong thời gian MA nhanh là fastMA, mặc định 14; trong thời gian MA chậm là slowMA, mặc định 28.
  2. Khi MA nhanh vượt qua MA chậm, hãy làm nhiều hơn; khi MA nhanh vượt qua MA chậm, hãy cân bằng.
  3. Hình vẽ đường cong của MA

Phân tích lợi thế chiến lược

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

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

  1. Chiến lược MA đôi là thô sơ, có vấn đề mua và bán thường xuyên. Bạn có thể xem xét thêm các tối ưu hóa như cơ chế dừng lỗ.
  2. Cần thận trọng khi thiết lập phạm vi ngày bằng tay, tránh sử dụng ngày sai. Bạn có thể hiển thị thông báo.
  3. Thời gian tròn lịch sử quá dài sẽ làm tăng chu kỳ thử nghiệm. Bạn có thể xem xét tăng điểm trượt hoặc giảm phí xử lý cho giao dịch thường xuyên.

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

  1. Tăng khả năng phán đoán logic dừng lỗ và giảm nguy cơ thua lỗ.
  2. Thêm bộ lọc bể chứng khoán, lựa chọn các cổ phiếu có liên quan đến chỉ số, tăng sự ổn định.
  3. Tăng bộ lọc tín hiệu giao dịch, lọc các tín hiệu không ổn định trong một chu kỳ nhất định, giảm giao dịch không cần thiết.
  4. Kiểm tra hiệu suất của các cổ phiếu liên quan đến các chỉ số phân loại khác nhau để tìm ra loại tốt nhất.

Tóm tắt

Chiến lược này được sử dụng như một khuôn khổ phạm vi ngày đánh giá chung, có tính linh hoạt, có thể tùy chỉnh, có thể đáp ứng nhu cầu thử nghiệm khác nhau của người dùng. Với logic giao dịch MA đôi đơn giản và hiệu quả, chiến lược có thể được xác minh và so sánh nhanh chóng.

Mã nguồn chiến lược
/*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