Đâ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.
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.
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)