Chiến lược giao dịch định lượng thích ứng hỗ trợ kháng cự động

ATR Pivot
Ngày tạo: 2025-01-10 15:08:24 sửa đổi lần cuối: 2025-01-10 15:08:24
sao chép: 3 Số nhấp chuột: 416
1
tập trung vào
1617
Người theo dõi

Chiến lược giao dịch định lượng thích ứng hỗ trợ kháng cự động

Tổng quan

Chiến lược này là một hệ thống giao dịch thích ứng có khả năng xác định mức hỗ trợ và kháng cự một cách linh hoạt dựa trên điểm xoay giá. Nó xác định mức giá quan trọng bằng cách tính toán mức cao và mức thấp cục bộ theo thời gian thực và thực hiện giao dịch dựa trên mức đó. Cốt lõi của chiến lược này nằm ở bản chất năng động của nó, có thể điều chỉnh các thông số giao dịch kịp thời theo những thay đổi của điều kiện thị trường và phù hợp với thị trường có xu hướng và biến động.

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

Logic cốt lõi của chiến lược này dựa trên các yếu tố chính sau:

  1. Tính toán điểm trục động: Sử dụng tham số độ dài trục có thể điều chỉnh (mặc định là 2) để xác định mức cao và mức thấp cục bộ
  2. Phạm vi hỗ trợ và kháng cự: Đặt phạm vi phần trăm (mặc định là 0,4%) dựa trên điểm trục để xác định khu vực giao dịch hiệu quả
  3. Tạo tín hiệu giao dịch: Khi giá vượt qua mức hỗ trợ từ bên dưới, tín hiệu mua sẽ được tạo ra và khi giá vượt qua mức kháng cự từ bên trên, tín hiệu bán sẽ được tạo ra.
  4. Kiểm soát rủi ro: Sử dụng các thiết lập dừng lỗ động (10%) và lợi nhuận (27%) và quy mô vị thế được tự động điều chỉnh theo vốn chủ sở hữu của tài khoản

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

  1. Khả năng thích ứng mạnh mẽ: Chiến lược có thể điều chỉnh linh hoạt các vị trí hỗ trợ và kháng cự theo trạng thái thị trường để tránh độ trễ do các mức tĩnh gây ra
  2. Có thể kiểm soát rủi ro: Thông qua tỷ lệ dừng lỗ nghiêm ngặt và quản lý vị thế năng động, rủi ro của mỗi giao dịch được kiểm soát trong phạm vi hợp lý
  3. Khả năng mở rộng: Hỗ trợ nhiều khoảng thời gian và kết hợp tham số để tạo điều kiện tối ưu hóa theo các môi trường thị trường khác nhau
  4. Tính minh bạch cao: Logic giao dịch rõ ràng và tất cả các tín hiệu và mức giá có thể được hiển thị trực quan trên biểu đồ

Rủi ro chiến lược

  1. Rủi ro đột phá sai: Có thể xảy ra tín hiệu đột phá sai thường xuyên trong thị trường biến động, cần phải giảm thiểu bằng cách điều chỉnh các tham số khoảng hỗ trợ và kháng cự.
  2. Tác động trượt giá: Trong môi trường thị trường có tính thanh khoản kém, giá giao dịch thực tế có thể chênh lệch rất nhiều so với giá tín hiệu.
  3. Phụ thuộc vào xu hướng: Chiến lược này hoạt động tốt hơn trong thị trường có xu hướng mạnh, nhưng có thể tạo ra quá nhiều tín hiệu giao dịch trong giai đoạn đi ngang
  4. Độ nhạy của tham số: Hiệu suất chiến lược nhạy cảm với các cài đặt tham số và cần phải kiểm tra ngược để xác định sự kết hợp tham số tối ưu.

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

  1. Đã thêm mô-đun nhận dạng môi trường thị trường để tự động điều chỉnh các thông số theo mức độ biến động
  2. Giới thiệu khối lượng và các chỉ báo kỹ thuật khác như các tín hiệu xác nhận phụ trợ
  3. Tối ưu hóa các thuật toán quản lý vị thế và thực hiện các điều chỉnh động dựa trên sự biến động của thị trường
  4. Thêm bộ lọc thời gian để tránh tạo ra tín hiệu giao dịch trong thời gian bất lợi
  5. Phát triển thuật toán dừng lỗ thích ứng để điều chỉnh động vị trí dừng lỗ theo sự biến động của thị trường

Tóm tắt

Chiến lược này cung cấp một khuôn khổ vững chắc cho việc theo dõi xu hướng và giao dịch đảo chiều bằng cách xác định động các mức giá quan trọng kết hợp với kiểm soát rủi ro chặt chẽ. Mặc dù có mức độ nhạy cảm nhất định với các thông số và phụ thuộc vào môi trường thị trường, nhưng thông qua quá trình tối ưu hóa và cải tiến liên tục, sản phẩm có thể duy trì hiệu suất ổn định trong các môi trường thị trường khác nhau. Để vận hành thành công chiến lược này, các nhà giao dịch phải hiểu sâu sắc các nguyên tắc của nó và điều chỉnh thông số phù hợp dựa trên các điều kiện cụ thể của thị trường.

Mã nguồn chiến lược
/*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)