
Chiến lược này chủ yếu sử dụng giá cao nhất, giá thấp nhất và giá đóng cửa của ngày giao dịch trước đó làm mức hỗ trợ và kháng cự trong ngày, làm nhiều hơn khi phá vỡ mức kháng cự, làm trống khi kiểm tra lại mức hỗ trợ, thuộc về chiến lược phá vỡ điển hình.
Mã đầu tiên định nghĩa một hàm tính toán mức kháng cự hỗ trợ CalculateSupportResistance, hàm này lấy giá cao nhất, giá thấp nhất và giá đóng cửa của ngày giao dịch trước để làm mức kháng cự hỗ trợ trong ngày.
Sau đó, gọi hàm này trong logic chính để lấy ba giá trị và hiển thị trên bản đồ.
Trong logic đếm ngược, nếu giá đóng cửa thấp hơn mức giá thấp nhất của ngày hôm trước và giá hiện tại cao hơn mức giá thấp nhất đó tạo ra một đột phá, thì làm nhiều; nếu giá đóng cửa cao hơn mức giá cao nhất của ngày hôm trước và giá hiện tại thấp hơn mức giá cao nhất đó tạo ra một đột phá, thì làm trần.
Các mô hình đột phá như vậy có thể đánh giá xu hướng và tạo ra tín hiệu giao dịch.
Phản ứng:
Chiến lược này nói chung thuộc về chiến lược phá vỡ điển hình, đơn giản và trực quan, xây dựng kháng cự hỗ trợ trong ngày bằng dữ liệu ngày giao dịch trước đó, đánh giá lại mức phá vỡ này. Ưu điểm là dễ hiểu thực hiện, có thể trực tiếp nhìn thấy kháng cự hỗ trợ; nhược điểm là có nguy cơ phá vỡ giả, không thể xác định tính bền vững của xu hướng. Bước tiếp theo có thể được tối ưu hóa từ việc xác định hiệu quả phá vỡ, kiểm soát rủi ro, tối ưu hóa quản lý vốn.
/*backtest
start: 2024-01-22 00:00:00
end: 2024-02-21 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Support and Resistance with Backtesting", overlay=true)
// Function to calculate support and resistance levels
calculateSupportResistance() =>
highPrevDay = request.security(syminfo.tickerid, "D", high[1], lookahead=barmerge.lookahead_on)
lowPrevDay = request.security(syminfo.tickerid, "D", low[1], lookahead=barmerge.lookahead_on)
closePrevDay = request.security(syminfo.tickerid, "D", close[1], lookahead=barmerge.lookahead_on)
[highPrevDay, lowPrevDay, closePrevDay]
// Call the function to get support and resistance levels
[supResHigh, supResLow, supResClose] = calculateSupportResistance()
// Plotting support and resistance levels
plot(supResHigh, color=color.red, linewidth=2, title="Previous Day High")
plot(supResLow, color=color.green, linewidth=2, title="Previous Day Low")
plot(supResClose, color=color.blue, linewidth=2, title="Previous Day Close")
// Backtesting logic
backtestCondition = close[1] < supResLow and close > supResLow
strategy.entry("Long", strategy.long, when=backtestCondition)
// Plotting buy/sell arrows for backtesting
plotarrow(backtestCondition ? 1 : na, colorup=color.green, offset=-1, transp=0)