Chiến lược này là một hệ thống giao dịch thích nghi dựa trên việc xác định động các mức hỗ trợ và kháng cự bằng cách sử dụng các điểm pivot giá. Nó xác định mức giá chính bằng cách tính toán mức cao và thấp địa phương trong thời gian thực và thực hiện giao dịch phù hợp.
Logic cốt lõi dựa trên một số yếu tố chính: 1. tính toán pivot động: Sử dụng tham số chiều dài pivot có thể điều chỉnh (bên mặc định 2) để xác định mức cao và thấp địa phương 2. Khu vực hỗ trợ / kháng cự: Thiết lập phạm vi dựa trên tỷ lệ phần trăm (bên định sẵn 0,4%) xung quanh các điểm pivot để xác định các khu vực giao dịch hợp lệ 3. Sản xuất tín hiệu: tín hiệu dài khi giá phá vỡ trên ngưỡng hỗ trợ, tín hiệu ngắn khi giá phá vỡ dưới ngưỡng kháng cự Quản lý rủi ro: Thực hiện mức dừng lỗ (10%) và thu lợi nhuận (27%) năng động, với kích thước vị trí dựa trên vốn chủ sở hữu tài khoản
Chiến lược cung cấp một khuôn khổ đáng tin cậy cho việc theo dõi xu hướng và đảo ngược giao dịch thông qua việc xác định năng động các mức giá chính kết hợp với kiểm soát rủi ro nghiêm ngặt. Mặc dù nó thể hiện một số độ nhạy cảm của các tham số và sự phụ thuộc vào môi trường thị trường, việc tối ưu hóa và tinh chỉnh liên tục cho phép hiệu suất nhất quán trong các điều kiện thị trường khác nhau. Việc thực hiện thành công đòi hỏi các nhà giao dịch phải hiểu sâu các nguyên tắc của nó và điều chỉnh các tham số theo tình huống thị trường cụ thể.
/*backtest start: 2019-12-23 08:00:00 end: 2025-01-08 08: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/ // © felipemiransan //@version=6 strategy("Dynamic Support and Resistance Pivot Strategy ", overlay=true) // Strategy parameters pivot_length = input.int(2, title="Pivot Length", tooltip="Pivot size to identify peaks and troughs") support_resistance_distance = input.float(0.4, title="Support/Resistance Distance %", tooltip="Distance to consider a support or resistance level in %") // Stop Loss and Take Profit parameters stop_loss_pct = input.float(10.0, title="Stop Loss %", tooltip="Stop loss percentage", minval=0.1) / 100 take_profit_pct = input.float(26.0, title="Take Profit %", tooltip="Take profit percentage", minval=0.1) / 100 // Functions to identify high and low pivots pivot_high = ta.pivothigh(high, pivot_length, pivot_length) pivot_low = ta.pivotlow(low, pivot_length, pivot_length) // Storing support and resistance levels var float resistance_level = na var float support_level = na var float last_pivot_high = na var float last_pivot_low = na // Updating support and resistance based on pivots if (not na(pivot_high)) resistance_level := high[pivot_length] last_pivot_high := high[pivot_length] if (not na(pivot_low)) support_level := low[pivot_length] last_pivot_low := low[pivot_length] // Function to check if the current price is near a support or resistance level is_near_resistance = (not na(resistance_level)) and (close >= resistance_level * (1 - support_resistance_distance / 100)) and (close <= resistance_level * (1 + support_resistance_distance / 100)) is_near_support = (not na(support_level)) and (close >= support_level * (1 - support_resistance_distance / 100)) and (close <= support_level * (1 + support_resistance_distance / 100)) // Cross conditions variables long_cross = ta.crossover(close, support_level) and not na(support_level) short_cross = ta.crossunder(close, resistance_level) and not na(resistance_level) // Entry conditions long_condition = is_near_support and long_cross // Buy when crossing support from below short_condition = is_near_resistance and short_cross // Sell when crossing resistance from above // Order execution if (long_condition) strategy.entry("Long", strategy.long) if (short_condition) strategy.entry("Short", strategy.short) // Stop Loss and Take Profit if (strategy.opentrades > 0) if (strategy.position_size > 0) // For long position avg_price_long = strategy.position_avg_price long_stop_level = avg_price_long * (1 - stop_loss_pct) long_take_profit_level = avg_price_long * (1 + take_profit_pct) strategy.exit("Exit Long", from_entry="Long", stop=long_stop_level, limit=long_take_profit_level) if (strategy.position_size < 0) // For short position avg_price_short = strategy.position_avg_price short_stop_level = avg_price_short * (1 + stop_loss_pct) short_take_profit_level = avg_price_short * (1 - take_profit_pct) strategy.exit("Exit Short", from_entry="Short", stop=short_stop_level, limit=short_take_profit_level) // Plotting support and resistance levels on the chart plot(support_level, title="Support", color=color.green, linewidth=2, style=plot.style_line) plot(resistance_level, title="Resistance", color=color.red, linewidth=2, style=plot.style_line) // Adding labels to show pivot values if (long_condition and not na(support_level)) label.new(bar_index, low[pivot_length], str.tostring(low[pivot_length]), style=label.style_label_up, color=color.green, textcolor=color.white, size=size.small) if (short_condition and not na(resistance_level)) label.new(bar_index, high[pivot_length], str.tostring(high[pivot_length]), style=label.style_label_down, color=color.red, textcolor=color.white, size=size.small)