Chiến lược giao dịch hàng tuần hỗ trợ và kháng cự đa cấp dựa trên sự đảo ngược giá trung bình

Pivot SR MR SMA RSI ATR MA VOL
Ngày tạo: 2025-02-18 18:04:15 sửa đổi lần cuối: 2025-02-18 18:04:15
sao chép: 2 Số nhấp chuột: 441
1
tập trung vào
1617
Người theo dõi

Chiến lược giao dịch hàng tuần hỗ trợ và kháng cự đa cấp dựa trên sự đảo ngược giá trung bình

Tổng quan

Chiến lược này là một hệ thống giao dịch quay trở lại giá trị trung bình dựa trên điểm Pivot Point. Nó xác định điểm vào và thoát của giao dịch bằng cách tính toán các mức hỗ trợ hàng tuần (S1-S4) và mức kháng cự (R1-R4). Chiến lược này sử dụng phương pháp xây dựng vị trí từng bước, mua nhiều lần ở các mức hỗ trợ khác nhau và kiếm lợi nhuận ở mức kháng cự tương ứng.

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

Cốt lõi của chiến lược này là tính toán các điểm trung tâm của tuần này thông qua giá cao nhất, giá thấp nhất và giá đóng cửa của tuần trước, sau đó xác định nhiều mức hỗ trợ và mức kháng cự dựa trên khoảng cách điểm dự kiến. Mua khi giá chạm mức hỗ trợ và đặt mục tiêu lợi nhuận cho mức kháng cự tương ứng. Điểm trung tâm = (giá cao nhất tuần trước + giá thấp nhất tuần trước + giá đóng cửa tuần trước) / 3 Chiến lược cho phép tối đa 4 vị trí được giữ cùng một lúc, mỗi vị trí tương ứng với một mức hỗ trợ và kháng cự khác nhau. Tất cả các vị trí sẽ tính lại mức giao dịch mới vào đầu mỗi tuần. Thiết kế này đảm bảo tính liên tục của giao dịch và thích ứng với sự thay đổi của thị trường.

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

  1. Logic giao dịch rõ ràng, dễ hiểu và dễ thực hiện
  2. Việc xây dựng kho theo từng giai đoạn làm giảm rủi ro giao dịch một lần
  3. Sử dụng các điểm kháng cự hỗ trợ ở cấp độ vòng tròn để giảm ảnh hưởng của tiếng ồn trong ngày
  4. Chiến lược có thể điều chỉnh các tham số một cách linh hoạt theo các đặc điểm thị trường khác nhau
  5. Kiểm soát rủi ro bằng tỷ lệ nắm giữ
  6. Không có thời gian để áp dụng giới hạn thanh toán, cho phép giao dịch có đủ lợi nhuận

Rủi ro chiến lược

  1. Không có thiết lập dừng lỗ, có thể dẫn đến rút lui lớn hơn trong thị trường xu hướng mạnh
  2. Nhiều vị trí có thể chiếm nhiều tiền hơn
  3. Có thể có tín hiệu sai trong thị trường biến động cao
  4. Thiết lập không đúng vị trí hỗ trợ có thể dẫn đến vị trí không hợp lý của nhà kho Để giảm rủi ro, nên thêm bộ lọc xu hướng, chỉ mở vị trí trong xu hướng tăng; đồng thời có thể thiết lập dừng lỗ động dựa trên ATR.

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

  1. Tăng cơ chế xác nhận số lượng giao hàng, tăng độ tin cậy tín hiệu nhập cảnh
  2. Tham gia các chỉ số kỹ thuật như RSI để lọc quá mua quá bán
  3. Phát triển cơ chế xác nhận nhiều chu kỳ thời gian, giảm tín hiệu giả
  4. Tối ưu hóa hệ thống quản lý vị trí, điều chỉnh số lượng nhà kho theo biến động của thị trường
  5. Thêm phân tích liên quan, tránh đặt hàng cùng một lúc ở các thị trường có liên quan cao

Tóm tắt

Đây là một chiến lược quay trở lại giá trị trung bình dựa trên lý thuyết phân tích kỹ thuật cổ điển, nắm bắt cơ hội giao dịch bằng cách phá vỡ trở lại các điểm kháng cự được hỗ trợ bởi đường vòng. Thiết kế chiến lược đơn giản và linh hoạt, phù hợp để sử dụng trong thị trường có nhiều biến động. Với tối ưu hóa tham số hợp lý và quản lý rủi ro, chiến lược này có thể duy trì hiệu suất ổn định trong các môi trường thị trường khác nhau.

Mã nguồn chiến lược
/*backtest
start: 2024-02-19 00:00:00
end: 2025-02-17 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © ViZiV

//@version=5
strategy("Weekly Pivot Strategy, Created by ViZiV", overlay=true, pyramiding=50, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=25, dynamic_requests=true)

// This is my first COMPLETED strategy, go easy on me :) - Feel free to imrprove upon this script by adding more features if you feel up to the task. Im 100% confiedent there are better coders than me :) I'm still learning.

// This is a LONG ONLY SWING STRATEGY (Patience REQUIRED) that being said, you can go short at you're own discretion. I prefer to use on NQ / US100 / USTech 100 but not limited to it. Im sure it can work in most markets. "You'll need to change settings to suit you're market".

// IMPORTANT NOTE: "default_qty_type=strategy.percent_of_equity" Can be changed to "Contacts" within the properties tab which allow you to see backtest of other markets. Reccomend 1 contract but it comes to preference.

// Inputs for support/resistance distances (Defined by Points). // IMPORTANT NOTE: Completely user Defined. Figure out best settings for what you're trading. Each market is different with different characteristics. Up to you to figure out YOU'RE market volatility for better results. 
s1_offset = input.float(155, "S1 Distance", step=1)
s2_offset = input.float(310, "S2 Distance", step=1)
s3_offset = input.float(465, "S3 Distance", step=1)
s4_offset = input.float(775, "S4 Distance", step=1)
r1_offset = input.float(155, "R1 Distance", step=1)
r2_offset = input.float(310, "R2 Distance", step=1)
r3_offset = input.float(465, "R3 Distance", step=1)
r4_offset = input.float(775, "R4 Distance", step=1)

// Weekly pivot calculation
var float pivot = na
var float s1 = na
var float s2 = na
var float s3 = na
var float s4 = na
var float r1 = na
var float r2 = na
var float r3 = na
var float r4 = na

// Get weekly data (Pivot Calculation)
prevWeekHigh = request.security(syminfo.tickerid, "W", high[1], lookahead=barmerge.lookahead_on)
prevWeekLow = request.security(syminfo.tickerid, "W", low[1], lookahead=barmerge.lookahead_on)
prevWeekClose = request.security(syminfo.tickerid, "W", close[1], lookahead=barmerge.lookahead_on)

// Track active trades
var array<string> entry_ids = array.new<string>(0)
var array<float> profit_targets = array.new<float>(0)

// Update weekly levels
isNewWeek = ta.change(time("W")) != 0
if isNewWeek or na(pivot)
    pivot := (prevWeekHigh + prevWeekLow + prevWeekClose) / 3
    s1 := pivot - s1_offset
    s2 := pivot - s2_offset
    s3 := pivot - s3_offset
    s4 := pivot - s4_offset
    r1 := pivot + r1_offset
    r2 := pivot + r2_offset
    r3 := pivot + r3_offset
    r4 := pivot + r4_offset

// Plot current week's levels
plot(pivot, "Pivot", color=color.gray, linewidth=2)
plot(s1, "S1", color=color.blue, linewidth=1)
plot(s2, "S2", color=color.blue, linewidth=1)
plot(s3, "S3", color=color.blue, linewidth=1)
plot(s4, "S4", color=color.blue, linewidth=1)
plot(r1, "R1", color=color.red, linewidth=1)
plot(r2, "R2", color=color.red, linewidth=1)
plot(r3, "R3", color=color.red, linewidth=1)
plot(r4, "R4", color=color.red, linewidth=1)

// Function to create unique trade entries
checkEntry(level, target, entryNumber) =>
    currentWeek = str.tostring(year(time)) + "_" + str.tostring(weekofyear(time))
    entryId = "Entry" + str.tostring(entryNumber) + "_W" + currentWeek
    
    if low <= level and not array.includes(entry_ids, entryId)
        array.push(entry_ids, entryId)
        array.push(profit_targets, target)
        strategy.entry(entryId, strategy.long)
        strategy.exit("Exit" + entryId, entryId, limit=target)

// Check all entry levels
checkEntry(s1, r1, 1)
checkEntry(s2, r2, 2)
checkEntry(s3, r3, 3)
checkEntry(s4, r4, 4)

// Clean up completed trades using while loop
i = array.size(entry_ids) - 1
while i >= 0
    entryId = array.get(entry_ids, i)
    target = array.get(profit_targets, i)
    
    if high >= target
        array.remove(entry_ids, i)
        array.remove(profit_targets, i)
    i := i - 1