
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.
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.
Đâ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.
/*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