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

Xác định nhiều mẫu và chiến lược giao dịch cấp SR

Tác giả:ChaoZhang, Ngày: 2024-12-05 16:30:14
Tags:SRhuyết ápTPFIBOATRSMA

img

Tổng quan

Đây là một hệ thống chiến lược giao dịch toàn diện kết hợp nhận dạng mô hình phân tích kỹ thuật đa dạng với mức hỗ trợ và kháng cự. Chiến lược chủ yếu hoạt động bằng cách xác định các mô hình đáy kép (mức đáy Adam và Eve), tích hợp các mức khôi phục Fibonacci và sử dụng các đường hỗ trợ và kháng cự cho các quyết định giao dịch. Sức mạnh cốt lõi nằm trong xác minh chỉ số kỹ thuật đa chiều của nó, giúp tăng độ tin cậy của tín hiệu giao dịch trong khi sử dụng mức hỗ trợ và kháng cự như các tham chiếu quan trọng để kiểm soát rủi ro.

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

Chiến lược này sử dụng một cơ chế xác minh ba lần cho các quyết định giao dịch: Đầu tiên, nó xác định các mẫu đáy kép thông qua các thuật toán cụ thể, bao gồm đáy Adam sắc hơn và đáy Eve tròn hơn; Thứ hai, nó sử dụng mức khôi phục Fibonacci (0,618 và 1,618) để xác định các khu vực mục tiêu; Cuối cùng, nó xác nhận tín hiệu giao dịch thông qua xác minh mức hỗ trợ và kháng cự. Các tín hiệu giao dịch chỉ được tạo ra khi các điều kiện nhận dạng mẫu, mức Fibonacci và mức hỗ trợ / kháng cự được đáp ứng đồng thời. Cụ thể, tín hiệu dài được kích hoạt khi mức hỗ trợ / kháng cự vượt quá mức mở rộng 1,618 Fibonacci, trong khi tín hiệu ngắn được kích hoạt khi mức hỗ trợ / kháng cự dưới mức khôi phục 0,618 Fibonacci.

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

  1. Các cơ chế xác minh đa dạng cải thiện đáng kể độ tin cậy của tín hiệu giao dịch
  2. Các thuật toán nhận dạng mô hình nắm bắt chính xác các bước ngoặt của thị trường
  3. Mức Fibonacci cung cấp các vùng mục tiêu chính xác
  4. Xác minh mức hỗ trợ/kháng cự tăng an toàn giao dịch
  5. Các tham số có thể điều chỉnh cao thích nghi với các điều kiện thị trường khác nhau
  6. Mức độ tự động hóa cao làm giảm sự thiên vị phán đoán chủ quan

Rủi ro chiến lược

  1. Nhận dạng mẫu có thể có độ trễ, ảnh hưởng đến thời gian nhập
  2. Các tín hiệu sai có thể xảy ra trong các thị trường biến động cao
  3. Hiệu quả của mức hỗ trợ/kháng cự bị ảnh hưởng bởi điều kiện thị trường
  4. Cài đặt tham số không chính xác có thể dẫn đến giao dịch quá mức
  5. Cần thời gian quan sát dài hơn, có khả năng bỏ lỡ cơ hội nhanh chóng

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

  1. Đưa ra các chỉ số biến động để lọc các điều kiện thị trường
  2. Thêm bộ lọc xu hướng để cải thiện độ chính xác nhận dạng mẫu
  3. Tối ưu hóa các phương pháp tính toán mức hỗ trợ / kháng cự
  4. Bao gồm các chỉ số khối lượng để xác nhận
  5. Phát triển các cơ chế dừng lỗ và lấy lợi nhuận linh hoạt hơn
  6. Thực hiện các thuật toán học máy để tăng độ chính xác nhận dạng mẫu

Tóm lại

Chiến lược này xây dựng một hệ thống giao dịch tương đối hoàn chỉnh bằng cách sử dụng toàn diện nhiều phương pháp phân tích kỹ thuật bao gồm nhận dạng mẫu, mức Fibonacci và đường hỗ trợ / kháng cự. Sức mạnh của nó nằm trong độ tin cậy cao được cung cấp bởi nhiều cơ chế xác minh, trong khi tính điều chỉnh của nó cho phép thích nghi với các điều kiện thị trường khác nhau. Mặc dù có một số rủi ro vốn có, thông qua tối ưu hóa và cải thiện liên tục, chiến lược cho thấy hứa hẹn cho hiệu suất ổn định trong giao dịch thực tế. Bằng cách kết hợp các chỉ số kỹ thuật bổ sung và các thuật toán tối ưu hóa, có một không gian đáng kể để nâng cao hiệu suất.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-04 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Double Bottom with Support/Resistance Strategy - Aynet", overlay=true)

// Inputs
lookbackPeriod = input(21, "Lookback Period")
swingLowThreshold = input(1.5, "Swing Low Threshold")
fibLevel1 = input(0.618, "Fibonacci Level 1")
fibLevel3 = input(1.618, "Fibonacci Level 2")
srPeriod = input(21, "Support/Resistance Period") 
srThreshold = input(3, "Support/Resistance Touch Points")

// Support/Resistance Function
get_sr_level(idx) =>
    var level = 0.0
    var count = 0
    
    if bar_index % srPeriod == 0
        highCount = 0
        lowCount = 0
        for i = 0 to srPeriod - 1
            if math.abs(high[i] - high) < (high * 0.001)
                highCount += 1
            if math.abs(low[i] - low) < (low * 0.001)
                lowCount += 1
                
        if highCount >= srThreshold
            level := high
            count := highCount
        if lowCount >= srThreshold
            level := low
            count := lowCount
            
    [level, count]

// Pattern Detection Functions
isSwingLow(src, left, right) =>
    isLow = true
    for i = 0 to left + right
        if src[i] < src[right]
            isLow := false
    isLow

getSpikeSharpness(index) =>
    priceRange = high[index] - low[index]
    bodyRange = math.abs(close[index] - open[index])
    sharpness = priceRange / bodyRange
    sharpness

// Pattern Variables
var float firstBottom = na
var float secondBottom = na
var bool isAdam = false
var bool isEve = false
var float level1Value = na
var float level3Value = na

// Pattern Detection
bottom = isSwingLow(low, lookbackPeriod, lookbackPeriod)
if bottom
    sharpness = getSpikeSharpness(0)
    if na(firstBottom)
        firstBottom := low
        isAdam := sharpness > swingLowThreshold
    else if low <= firstBottom * 1.02 and low >= firstBottom * 0.98
        secondBottom := low
        isEve := sharpness <= swingLowThreshold

// Calculate Fibonacci
if not na(secondBottom)
    highPoint = ta.highest(high, lookbackPeriod)
    fibDistance = highPoint - math.min(firstBottom, secondBottom)
    level1Value := math.min(firstBottom, secondBottom) + fibDistance * fibLevel1
    level3Value := math.min(firstBottom, secondBottom) + fibDistance * fibLevel3

// Get S/R Level
[srLevel, srCount] = get_sr_level(0)

// Trading Logic
longCondition = srLevel > level3Value
shortCondition = srLevel < level1Value

if longCondition
    strategy.entry("Long", strategy.long)

if shortCondition
    strategy.entry("Short", strategy.short)

// Reset Pattern
if high > ta.highest(high[1], lookbackPeriod)
    firstBottom := na
    secondBottom := na
    isAdam := false
    isEve := false
var table logo = table.new(position.top_right, 1, 1)
table.cell(logo, 0, 0, 'Double Bottom with Support/Resistance Strategy - Aynet', text_size=size.large, text_color=color.white)
// Plots
plot(level1Value, "0.236", color=color.rgb(245, 0, 0), style=plot.style_line)
plot(level3Value, "0.618", color=color.rgb(82, 166, 255), style=plot.style_line)
plot(srLevel, "S/R Level", color=color.white)

plotshape(bottom and not na(firstBottom) and na(secondBottom), "Adam Bottom", shape.circle, location.belowbar, color.green)
plotshape(bottom and not na(secondBottom), "Eve Bottom", shape.circle, location.belowbar, color.yellow)

Có liên quan

Thêm nữa