
Đây là một chiến lược theo dõi xu hướng dựa trên hệ thống hai đường cong, kết hợp với dừng động và bộ lọc đường cong. Chiến lược này sử dụng đường trung bình di chuyển của hai chu kỳ khác nhau để nắm bắt xu hướng thị trường, đồng thời hạn chế hướng giao dịch bằng cách lọc đường cong và cung cấp tùy chọn thiết lập dừng lỗ linh hoạt. Phương pháp này được thiết kế để nắm bắt xu hướng trung và dài hạn, đồng thời bảo vệ vốn bằng cách quản lý rủi ro động.
Các nguyên tắc cốt lõi của chiến lược bao gồm:
Hệ thống hai dòng: sử dụng hai đường trung bình di chuyển, một là đường tín hiệu chính ((thời gian ngắn hơn) và một là bộ lọc ((thời gian dài hơn)).
Xác định xu hướng: Chỉ khi giá và đường trung bình chính nằm ở cùng một bên của đường trung bình lọc, bạn sẽ xem xét mở vị trí. Điều này giúp đảm bảo hướng giao dịch phù hợp với xu hướng tổng thể.
Tín hiệu nhập: kích hoạt tín hiệu nhập khi giá vượt qua đường trung bình chính và đáp ứng các điều kiện lọc
Hạn động: cung cấp hai lựa chọn dừng - dừng động dựa trên tỷ lệ phần trăm hoặc dừng cố định dựa trên điểm cao hoặc thấp của sườn trước.
Mức dừng cố định: sử dụng mức dừng cố định dựa trên tỷ lệ phần trăm giá vé.
Hình ảnh: vẽ đường trung bình, giá vào, mức dừng và dừng trên biểu đồ để phân tích giao dịch trực quan.
Theo dõi xu hướng: Bằng cách sử dụng hệ thống hai đường thẳng, chiến lược này có thể nắm bắt hiệu quả xu hướng trung và dài hạn, cải thiện cơ hội kiếm tiền.
Quản lý rủi ro: Tùy chọn dừng lỗ động cho phép chiến lược tự động điều chỉnh lỗ hổng rủi ro theo biến động của thị trường, nâng cao khả năng bảo vệ vốn.
Tính linh hoạt: Chiến lược cho phép người dùng lựa chọn các loại moving average khác nhau (SMA, EMA, WMA) và tùy chỉnh các tham số để phù hợp với phong cách giao dịch và môi trường thị trường khác nhau.
Cơ chế lọc: Sử dụng đường trung bình chu kỳ dài làm bộ lọc, giúp giảm đột phá giả và giao dịch ngược, tăng sự ổn định của chiến lược.
Hiệu ứng trực quan: Bằng cách vẽ các mức giá quan trọng và đường trung bình trên biểu đồ, thương nhân có thể hiểu trực quan logic chiến lược và tình trạng thị trường hiện tại.
Tự động thực hiện: Chiến lược có thể được thực hiện tự động trên nền tảng giao dịch, giảm sự can thiệp của con người và ảnh hưởng cảm xúc.
Sự chậm trễ: Đường trung bình di chuyển là một chỉ số chậm trễ, có thể dẫn đến việc nhập cảnh hoặc xuất cảnh muộn hơn khi xu hướng đảo ngược.
Hành động của thị trường rung động: Trong thị trường ngang hoặc rung động, chiến lược có thể tạo ra các tín hiệu sai thường xuyên, dẫn đến tổn thất liên tục.
Tính nhạy cảm tham số: hiệu suất của chiến lược phụ thuộc rất nhiều vào tham số được chọn, thiết lập tham số không đúng cách có thể dẫn đến giao dịch quá mức hoặc bỏ lỡ cơ hội quan trọng.
Hạn chế dừng cố định: Việc sử dụng dừng ở tỷ lệ cố định có thể kết thúc giao dịch có lợi sớm trong một xu hướng mạnh.
Thay đổi điều kiện thị trường: Chiến lược có thể có sự khác biệt đáng kể trong hiệu suất trong các môi trường thị trường khác nhau, cần được đánh giá và điều chỉnh thường xuyên.
Điểm trượt và chi phí giao dịch: Trong giao dịch thực tế, điểm trượt và chi phí giao dịch có thể ảnh hưởng đáng kể đến lợi nhuận của chiến lược, đặc biệt là trong trường hợp giao dịch tần suất cao.
Điều chỉnh tham số động: thực hiện chu kỳ đường trung bình và tỷ lệ dừng tự điều chỉnh để thích ứng với sự biến động của thị trường và cường độ xu hướng khác nhau.
Phân tích nhiều khung thời gian: tích hợp thông tin xu hướng trong khoảng thời gian dài hơn để tăng độ chính xác của quyết định nhập cảnh và giảm tín hiệu giả.
Bộ lọc biến động: giới thiệu các chỉ số biến động (như ATR), tạm dừng giao dịch trong thời gian biến động thấp, giảm tổn thất trong thị trường xung đột.
Xác định cường độ xu hướng: kết hợp với các chỉ số kỹ thuật khác (như ADX) để đánh giá cường độ của xu hướng, chỉ mở lệnh trong xu hướng mạnh.
Động lực dừng: thực hiện cơ chế dừng động dựa trên biến động thị trường hoặc cường độ xu hướng để tối đa hóa tiềm năng lợi nhuận.
Tối ưu hóa quản lý vốn: Điều chỉnh kích thước vị trí tùy theo quy mô tài khoản và động lực biến động của thị trường để tối ưu hóa tỷ lệ lợi nhuận rủi ro.
Tích hợp học máy: Sử dụng thuật toán học máy để tối ưu hóa lựa chọn tham số và thời gian nhập cảnh, nâng cao khả năng thích ứng và hiệu suất của chiến lược.
Phân tích cảm xúc: tích hợp các chỉ số cảm xúc thị trường, điều chỉnh hành vi chiến lược trong thời gian cảm xúc cực đoan, tránh giao dịch quá tải.
Chiến lược thu thập xu hướng đường hai chiều kết hợp với dừng động và bộ lọc là một hệ thống theo dõi xu hướng toàn diện, được thiết kế để nắm bắt xu hướng thị trường trung bình và dài hạn. Bằng cách kết hợp đường trung bình tín hiệu chính và đường trung bình lọc, chiến lược có thể xác định hiệu quả hướng xu hướng và tạo tín hiệu giao dịch. Tùy chọn dừng động cung cấp quản lý rủi ro linh hoạt, trong khi chức năng hiển thị tăng khả năng giải thích của chiến lược.
Mặc dù chiến lược này có tiềm năng mạnh mẽ, nhưng vẫn có những rủi ro vốn có, chẳng hạn như sự chậm trễ và nhạy cảm với sự thay đổi của điều kiện thị trường. Để tăng cường sự ổn định và thích ứng của chiến lược, khuyến nghị tối ưu hóa hơn nữa, chẳng hạn như thực hiện điều chỉnh tham số động, tích hợp phân tích nhiều khung thời gian và giới thiệu các cơ chế lọc bổ sung.
Nhìn chung, chiến lược này cung cấp cho các nhà giao dịch một nền tảng vững chắc, có thể được tùy chỉnh và cải tiến theo nhu cầu cá nhân và đặc điểm thị trường. Với sự giám sát, phản hồi và tối ưu hóa liên tục, chiến lược này có tiềm năng trở thành một công cụ giao dịch đáng tin cậy, phù hợp với nhiều môi trường thị trường.
/*backtest
start: 2024-06-30 00:00:00
end: 2024-07-30 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Moving Average Breakout with Filter and Dynamic Stop Loss", overlay=true)
// Параметры
maLength = input.int(14, "MA Length")
maType = input.string("SMA", "MA Type", options=["SMA", "EMA", "WMA"])
takeProfitPercent = input.float(1.0, "Take Profit (%)", step=0.1)
filterMaLength = input.int(50, "Filter MA Length")
filterMaType = input.string("SMA", "Filter MA Type", options=["SMA", "EMA", "WMA"])
useDynamicStopLoss = input.bool(false, "Use Dynamic Stop Loss")
dynamicStopLossPercent = input.float(1.0, "Dynamic Stop Loss (%)", step=0.1)
// Выбор типа основной скользящей средней
float ma = na
switch maType
"SMA" => ma := ta.sma(close, maLength)
"EMA" => ma := ta.ema(close, maLength)
"WMA" => ma := ta.wma(close, maLength)
// Выбор типа скользящей средней фильтра
float filterMa = na
switch filterMaType
"SMA" => filterMa := ta.sma(close, filterMaLength)
"EMA" => filterMa := ta.ema(close, filterMaLength)
"WMA" => filterMa := ta.wma(close, filterMaLength)
// Построение скользящих средних
plot(ma, color=color.blue, linewidth=2, title="Moving Average")
plot(filterMa, color=color.orange, linewidth=2, title="Filter Moving Average")
// Логика открытия позиций
longCondition = ta.crossover(close, ma) and close > filterMa
shortCondition = ta.crossunder(close, ma) and close < filterMa
var bool inPosition = false
var float entryPrice = na
var float takeProfitLevel = na
var float stopLossLevel = na
if (longCondition and not inPosition and strategy.position_size == 0)
entryPrice := close
takeProfitLevel := close * (1 + takeProfitPercent / 100)
if (useDynamicStopLoss)
stopLossLevel := close * (1 - dynamicStopLossPercent / 100)
else
stopLossLevel := low[1]
strategy.entry("Long", strategy.long)
strategy.exit("Take Profit/Stop Loss", from_entry="Long", limit=takeProfitLevel, stop=stopLossLevel)
// line.new(bar_index, entryPrice, bar_index + 1, entryPrice, color=color.blue, width=2)
// line.new(bar_index, takeProfitLevel, bar_index + 1, takeProfitLevel, color=color.green, width=2, style=line.style_dashed)
// line.new(bar_index, stopLossLevel, bar_index + 1, stopLossLevel, color=color.red, width=2, style=line.style_dashed)
inPosition := true
if (shortCondition and not inPosition and strategy.position_size == 0)
entryPrice := close
takeProfitLevel := close * (1 - takeProfitPercent / 100)
if (useDynamicStopLoss)
stopLossLevel := close * (1 + dynamicStopLossPercent / 100)
else
stopLossLevel := high[1]
strategy.entry("Short", strategy.short)
strategy.exit("Take Profit/Stop Loss", from_entry="Short", limit=takeProfitLevel, stop=stopLossLevel)
// line.new(bar_index, entryPrice, bar_index + 1, entryPrice, color=color.blue, width=2)
// line.new(bar_index, takeProfitLevel, bar_index + 1, takeProfitLevel, color=color.green, width=2, style=line.style_dashed)
// line.new(bar_index, stopLossLevel, bar_index + 1, stopLossLevel, color=color.red, width=2, style=line.style_dashed)
inPosition := true
// Проверка закрытия позиции по тейк-профиту или стоп-лоссу
if (strategy.position_size == 0)
inPosition := false
// Отображение текущих линий стоп-лосса и тейк-профита
// if (strategy.position_size > 0)
// line.new(bar_index[1], takeProfitLevel, bar_index, takeProfitLevel, color=color.green, width=2, style=line.style_dashed)
// line.new(bar_index[1], stopLossLevel, bar_index, stopLossLevel, color=color.red, width=2, style=line.style_dashed)
// line.new(bar_index[1], entryPrice, bar_index, entryPrice, color=color.blue, width=2)
// if (strategy.position_size < 0)
// line.new(bar_index[1], takeProfitLevel, bar_index, takeProfitLevel, color=color.green, width=2, style=line.style_dashed)
// line.new(bar_index[1], stopLossLevel, bar_index, stopLossLevel, color=color.red, width=2, style=line.style_dashed)
// line.new(bar_index[1], entryPrice, bar_index, entryPrice, color=color.blue, width=2)