Tài nguyên đang được tải lên... tải...

Chiến lược giao dịch định lượng dựa trên các mô hình đảo ngược ở mức hỗ trợ và kháng cự

Tác giả:ChaoZhang, Ngày: 2024-06-07 16:45:09
Tags:

img

Tổng quan

Chiến lược này dựa trên các mô hình đảo ngược (cụm, nuốt và doji) và mức hỗ trợ và kháng cự trong phân tích kỹ thuật, giao dịch trên biểu đồ 1 giờ. Chiến lược xác định các điểm đảo ngược thị trường tiềm năng và thực hiện giao dịch với mức lợi nhuận và dừng lỗ được xác định trước.

Ý tưởng chính của chiến lược là vào một vị trí dài khi một mô hình đảo ngược tăng (như búa, ngập tăng hoặc doji) xuất hiện gần mức hỗ trợ, và vào một vị trí ngắn khi một mô hình đảo ngược giảm (như búa, ngập giảm hoặc doji) xuất hiện gần mức kháng cự.

Chiến lược logic

  1. Tính toán mức thấp nhất và cao nhất trong khoảng thời gian xem lại được chỉ định bằng cách sử dụng hàm ta.lowest() và ta.highest() để xác định mức hỗ trợ và kháng cự.
  2. Kiểm tra xem ngọn nến hiện tại có hình thành một cái búa, mô hình nuốt hoặc doji không.
  3. Nếu một mô hình đảo ngược tăng xuất hiện gần mức hỗ trợ, hãy vào một vị trí dài; nếu một mô hình đảo ngược giảm xuất hiện gần mức kháng cự, hãy vào một vị trí ngắn.
  4. Đặt giá lấy lợi nhuận ở mức 3% trên giá nhập và giá dừng lỗ ở mức 1% dưới giá nhập.
  5. Đóng vị trí khi giá đạt đến mức lấy lợi nhuận hoặc dừng lỗ.

Ưu điểm chiến lược

  1. Kết hợp các mô hình đảo ngược và các mức hỗ trợ và kháng cự chính, cải thiện độ tin cậy của tín hiệu giao dịch.
  2. Đặt rõ mức lợi nhuận và dừng lỗ, kiểm soát rủi ro hiệu quả.
  3. Thích hợp cho cả thị trường xu hướng và dao động, nắm bắt các cơ hội đảo ngược tiềm năng.
  4. Mã đơn giản và dễ hiểu, tạo thuận lợi cho việc thực hiện.

Rủi ro chiến lược

  1. Trong các thị trường dao động, các tín hiệu đảo ngược thường xuyên có thể dẫn đến giao dịch quá mức và lỗ hoa hồng.
  2. Việc xác định mức hỗ trợ và kháng cự phụ thuộc vào sự lựa chọn thời gian xem lại, và các giai đoạn xem lại khác nhau có thể dẫn đến kết quả khác nhau.
  3. Độ tin cậy của các mô hình đảo ngược không hoàn toàn và các tín hiệu sai có thể dẫn đến tổn thất.

Giải pháp:

  1. Điều chỉnh các thông số và điều kiện xác nhận của các mô hình đảo ngược để giảm tín hiệu sai.
  2. Bao gồm các chỉ số kỹ thuật hoặc chỉ số tâm lý thị trường khác để cải thiện độ tin cậy của tín hiệu.
  3. Điều chỉnh mức lợi nhuận và dừng lỗ phù hợp để thích nghi với các điều kiện thị trường khác nhau.

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

  1. Đưa ra các chỉ số khối lượng để xác nhận tính hợp lệ của các mô hình đảo ngược.
  2. Xem xét mức hỗ trợ và kháng cự từ nhiều khung thời gian để cải thiện độ chính xác của mức hỗ trợ và kháng cự.
  3. Kết hợp các chỉ số xu hướng, chẳng hạn như trung bình động, để giao dịch theo hướng xu hướng và tránh giao dịch ngược xu hướng.
  4. Tối ưu hóa mức lợi nhuận và dừng lỗ bằng cách điều chỉnh động dựa trên biến động thị trường để đạt được tỷ lệ rủi ro-lợi nhuận tốt hơn.

Tóm lại

Chiến lược này nắm bắt các cơ hội giao dịch tiềm năng bằng cách xác định các mô hình đảo ngược gần mức hỗ trợ và kháng cự. Nó rất đơn giản để sử dụng và áp dụng cho các môi trường thị trường khác nhau. Tuy nhiên, sự thành công của chiến lược phụ thuộc vào việc xác định chính xác các mô hình đảo ngược và mức hỗ trợ và kháng cự. Bằng cách tối ưu hóa các điều kiện xác nhận của tín hiệu giao dịch, kết hợp các chỉ số kỹ thuật khác và điều chỉnh năng động mức lợi nhuận và dừng lỗ, hiệu suất của chiến lược có thể được cải thiện hơn nữa.


/*backtest
start: 2024-05-07 00:00:00
end: 2024-06-06 00:00:00
period: 2h
basePeriod: 15m
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/
// © Kingcoinmilioner

//@version=5
strategy("Reversal Patterns at Support and Resistance", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// Parameters
support_resistance_lookback = input.int(50, title="Support/Resistance Lookback Period")
reversal_tolerance = input.float(0.01, title="Reversal Tolerance (percent)", step=0.01) / 100
take_profit_percent = input.float(3, title="Take Profit (%)") / 100
stop_loss_percent = input.float(1, title="Stop Loss (%)") / 100

// Functions to identify key support and resistance levels
findSupport() =>
    ta.lowest(low, support_resistance_lookback)

findResistance() =>
    ta.highest(high, support_resistance_lookback)

// Identify reversal patterns
isHammer() =>
    body = math.abs(close - open)
    lowerWick = open > close ? (low < close ? close - low : open - low) : (low < open ? open - low : close - low)
    upperWick = high - math.max(open, close)
    lowerWick > body * 2 and upperWick < body

isEngulfing() =>
    (close[1] < open[1] and close > open and close > open[1] and open < close[1]) 
    (close[1] > open[1] and close < open and close < open[1] and open > close[1])

isDoji() =>
    math.abs(open - close) <= (high - low) * 0.1

// Identify support and resistance levels
support = findSupport()
resistance = findResistance()

// Check for reversal patterns at support and resistance
hammerAtSupport = isHammer() and (low <= support * (1 + reversal_tolerance))
engulfingAtSupport = isEngulfing() and (low <= support * (1 + reversal_tolerance))
dojiAtSupport = isDoji() and (low <= support * (1 + reversal_tolerance))

hammerAtResistance = isHammer() and (high >= resistance * (1 - reversal_tolerance))
engulfingAtResistance = isEngulfing() and (high >= resistance * (1 - reversal_tolerance))
dojiAtResistance = isDoji() and (high >= resistance * (1 - reversal_tolerance))

// Trading logic
if (hammerAtSupport or engulfingAtSupport or dojiAtSupport)
    strategy.entry("Long", strategy.long)
    stop_level = low * (1 - stop_loss_percent)
    take_profit_level = close * (1 + take_profit_percent)
    strategy.exit("Take Profit/Stop Loss", from_entry="Long", stop=stop_level, limit=take_profit_level)

if (hammerAtResistance or engulfingAtResistance or dojiAtResistance)
    strategy.entry("Short", strategy.short)
    stop_level = high * (1 + stop_loss_percent)
    take_profit_level = close * (1 - take_profit_percent)
    strategy.exit("Take Profit/Stop Loss", from_entry="Short", stop=stop_level, limit=take_profit_level)

// Plot support and resistance levels for visualization
plot(support, color=color.green, linewidth=1, title="Support Level")
plot(resistance, color=color.red, linewidth=1, title="Resistance Level")

// Plot reversal patterns on the chart for visualization
plotshape(series=hammerAtSupport, location=location.belowbar, color=color.green, style=shape.labelup, text="Hammer at Support")
plotshape(series=engulfingAtSupport, location=location.belowbar, color=color.green, style=shape.labelup, text="Engulfing at Support")
plotshape(series=dojiAtSupport, location=location.belowbar, color=color.green, style=shape.labelup, text="Doji at Support")

plotshape(series=hammerAtResistance, location=location.abovebar, color=color.red, style=shape.labeldown, text="Hammer at Resistance")
plotshape(series=engulfingAtResistance, location=location.abovebar, color=color.red, style=shape.labeldown, text="Engulfing at Resistance")
plotshape(series=dojiAtResistance, location=location.abovebar, color=color.red, style=shape.labeldown, text="Doji at Resistance")


Thêm nữa