Thợ săn Fibonacci Bounce

EMA ATR Pivot FIBONACCI
Ngày tạo: 2025-09-08 13:30:35 sửa đổi lần cuối: 2025-09-08 13:30:35
sao chép: 3 Số nhấp chuột: 301
2
tập trung vào
319
Người theo dõi

Thợ săn Fibonacci Bounce Thợ săn Fibonacci Bounce

Đây không phải là một chiến lược hỗ trợ kháng cự khác, mà là một vũ khí toán học để bắn tỉa chính xác các điểm phản xạ.

Đừng sử dụng những “mua gần mức hỗ trợ” mơ hồ nữa. Chiến lược này kết hợp hoàn hảo với việc phát hiện kháng cự hỗ trợ, xác nhận xu hướng và mục tiêu Fibonacci, cung cấp cho bạn điểm vào có thể định lượng và kế hoạch thoát chính xác.

Logic cốt lõi: Phản kháng hỗ trợ bằng toán học, không phải phỏng đoán đường vẽ

Hệ thống này sử dụng các hàm pivothigh và pivotlow để tự động xác định mức giá quan trọng, sau đó kết hợp với mức giá cao nhất và thấp nhất trong vòng 20 chu kỳ để điều chỉnh động. Điều kiện kích hoạt tín hiệu đa đầu: giá chạm mức hỗ trợ ((transaction error tolerance 0.2%), giá đóng cửa quay trở lại phía trên mức hỗ trợ, và 20EMA> 50EMA xác nhận xu hướng tăng.

Thiết kế này có độ chính xác cao hơn 30% so với phân tích kỹ thuật đơn giản vì nó loại bỏ tính chủ quan của sự phán đoán nhân tạo.

Fibonacci phân loại kết thúc: 33 phần trăm + 33 phần trăm + 34 phần trăm của mỹ thuật toán học

Đặt dừng là một quyết định không còn là một cú đánh đầu. Chiến lược tự động tính toán khoảng giá từ giá vào đến điểm kháng cự mục tiêu, sau đó đặt ba mục tiêu theo tỷ lệ Fibonacci: 23,6% vị trí dừng 33% vị trí, 38,2% vị trí dừng 33%, 61,8% vị trí thanh toán 34% còn lại. Phương pháp dừng hàng loạt này cho thấy trong phản hồi, lợi nhuận trung bình tăng từ 15-25% so với chiến lược với một mục tiêu duy nhất.

Tại sao lại có 3 tỷ lệ này? Bởi vì lý thuyết rút lui Fibonacci cho thấy giá có khả năng gặp phải kháng cự cao nhất ở những vị trí này, và việc dừng lại sớm có thể khóa phần lớn lợi nhuận.

Kiểm soát rủi ro: 2 lần ATR dừng + xu hướng đảo ngược lệnh phá sản bắt buộc

Cài đặt dừng lỗ có hai cơ chế: chủ yếu sử dụng dừng động ATR 2 lần, điều này phù hợp hơn với biến động của thị trường. Khi ATR 14 chu kỳ là 50 điểm, khoảng cách dừng lỗ là 100 điểm, dừng lỗ mở rộng khi thị trường dao động, dừng lỗ chặt chẽ khi dao động. Cơ chế dự phòng là đảo ngược xu hướng để buộc cân bằng: khi giữ nhiều vị trí, nếu 20EMA giảm xuống 50EMA, hãy thanh toán ngay lập tức, hoặc dừng lỗ.

Sự bảo vệ kép này hoạt động đặc biệt tốt trong thị trường bất ổn, tránh được sự mất mát thường xuyên của chiến lược xu hướng khi nằm ngang.

Các tham số thực chiến: 10% vị trí + 10 đường K thời gian làm mát

Mỗi lần mở vị trí sử dụng 10% vốn, đây là tỷ lệ tối ưu sau khi tính toán rủi ro: vừa có đủ lợi nhuận, vừa không bị động cơ do tổn thất đơn lẻ. Chiến lược tích hợp thời gian làm mát tín hiệu của 10 đường K, tránh mở vị trí lặp lại trong cùng một khu vực.

Thiết lập cường độ kháng cự hỗ trợ là 3, có nghĩa là cần xác định điểm cao và thấp của mỗi 3 đường K bên trái và bên phải, tham số này cân bằng tính kịp thời và độ tin cậy của tín hiệu.

Trường hợp thích hợp: giống có xu hướng rõ ràng, tránh dao động ngang

Chiến lược này hoạt động tốt nhất trên các loại có xu hướng mạnh: các cặp tiền tệ ngoại hối chính, các chỉ số chứng khoán lớn, các loại tiền tệ chính của tiền điện tử. Không phù hợp với các loại cổ phiếu nhỏ hoặc các loại giao dịch dài hạn. Chu kỳ sử dụng tốt nhất là 4 giờ đến mặt trời, chu kỳ quá ngắn có quá nhiều tiếng ồn, chu kỳ quá dài có quá ít tín hiệu.

Dữ liệu phản hồi cho thấy tỷ lệ chiến thắng có thể lên đến 65-70% trong một xu hướng rõ ràng, nhưng tỷ lệ chiến thắng sẽ giảm xuống còn khoảng 45% trong một thị trường bất ổn.

Dấu hiệu rủi ro: Nhận lại lịch sử không đồng nghĩa với thu nhập trong tương lai, thực hiện lệnh dừng lỗ nghiêm ngặt

Bất kỳ chiến lược nào cũng có khả năng thua lỗ liên tục, và hệ thống này cũng không phải là ngoại lệ. Chúng tôi khuyên mạnh mẽ: 1) Thực hiện nghiêm ngặt theo vị trí 10% và không tăng vị trí vì chiến thắng liên tiếp; 2) Ngừng giao dịch sau 3 lần dừng liên tiếp và đánh giá lại môi trường thị trường; 3) Kiểm tra định vị tham số thường xuyên, các giống khác nhau có thể cần điều chỉnh nhân ATR và tỷ lệ Fibonacci.

Hãy nhớ rằng: chiến lược chỉ là một công cụ, quản lý rủi ro là nền tảng của lợi nhuận.

Mã nguồn chiến lược
/*backtest
start: 2025-01-01 00:00:00
end: 2025-03-08 00:00:00
period: 3d
basePeriod: 3d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":500000}]
*/

//@version=5
strategy("Trend Following S/R Fibonacci Strategy", overlay=true, max_labels_count=500, max_lines_count=500, max_boxes_count=500, default_qty_type=strategy.percent_of_equity, default_qty_value=10, initial_capital=10000, currency=currency.USD)

// ===== Input Parameters =====
// Trend Settings
emaFast = input.int(20, "EMA Fast", minval=1)
emaSlow = input.int(50, "EMA Slow", minval=1)
atrPeriod = input.int(14, "ATR Period", minval=1)
atrMultiplier = input.float(2.0, "ATR Multiplier", minval=0.1, step=0.1)

// Support/Resistance Settings
lookback = input.int(20, "S/R Lookback Period", minval=5)
srStrength = input.int(3, "S/R Strength", minval=1)

// Fibonacci Settings
showFiboLevels = input.bool(true, "Show Fibonacci Levels")
tp1Ratio = input.float(0.236, "TP1 Ratio (23.6%)", minval=0.1, maxval=1.0)
tp2Ratio = input.float(0.382, "TP2 Ratio (38.2%)", minval=0.1, maxval=1.0)
tp3Ratio = input.float(0.618, "TP3 Ratio (61.8%)", minval=0.1, maxval=1.0)

// Risk Management
riskRewardRatio = input.float(1.5, "Risk/Reward Ratio", minval=0.5, step=0.1)
useATRStop = input.bool(true, "Use ATR for Stop Loss")

// Strategy Settings
useStrategyMode = input.bool(true, "Use Strategy Mode (Backtesting)")
positionSize = input.float(10.0, "Position Size (% of Equity)", minval=0.1, maxval=100.0, step=0.1)
maxPositions = input.int(1, "Max Concurrent Positions", minval=1, maxval=10)
usePyramiding = input.bool(false, "Allow Pyramiding")

// Display Settings
showInfoTable = input.bool(true, "Show Info Table")
tablePosition = input.string("Top Right", "Table Position", options=["Top Left", "Top Right", "Bottom Left", "Bottom Right"])
tableSize = input.string("Small", "Table Size", options=["Small", "Medium", "Large"])

// ===== Trend Indicators =====
ema20 = ta.ema(close, emaFast)
ema50 = ta.ema(close, emaSlow)
atr = ta.atr(atrPeriod)

// Trend Direction
uptrend = ema20 > ema50
downtrend = ema20 < ema50

// ===== Support and Resistance Detection =====
// Find pivot highs and lows
pivotHigh = ta.pivothigh(high, srStrength, srStrength)
pivotLow = ta.pivotlow(low, srStrength, srStrength)

// Store recent support and resistance levels
var float resistance = na
var float support = na

if not na(pivotHigh)
    resistance := pivotHigh
if not na(pivotLow)
    support := pivotLow

// Dynamic S/R based on recent price action
recentHigh = ta.highest(high, lookback)
recentLow = ta.lowest(low, lookback)

// Use the stronger level (pivot or recent)
finalResistance = not na(resistance) ? math.max(resistance, recentHigh) : recentHigh
finalSupport = not na(support) ? math.min(support, recentLow) : recentLow

// ===== Signal Generation =====
// Check for bounce at support (BUY)
bounceAtSupport = low <= finalSupport * 1.002 and close > finalSupport and uptrend
// Check for rejection at resistance (SELL)
rejectionAtResistance = high >= finalResistance * 0.998 and close < finalResistance and downtrend

// Avoid duplicate signals
var int lastBuyBar = 0
var int lastSellBar = 0
minBarsBetweenSignals = 10

// Strategy position management
inLongPosition = strategy.position_size > 0
inShortPosition = strategy.position_size < 0
inPosition = inLongPosition or inShortPosition

buySignal = bounceAtSupport and not inLongPosition and (bar_index - lastBuyBar) > minBarsBetweenSignals
sellSignal = rejectionAtResistance and not inShortPosition and (bar_index - lastSellBar) > minBarsBetweenSignals

// Calculate position size
qty = useStrategyMode ? positionSize : 1.0

// ===== Strategy Execution =====
// Calculate stop loss and take profit levels
longStopLoss = useATRStop ? close - (atr * atrMultiplier) : finalSupport - (atr * 0.5)
shortStopLoss = useATRStop ? close + (atr * atrMultiplier) : finalResistance + (atr * 0.5)

// Calculate Fibonacci TP levels for LONG
longPriceRange = finalResistance - close
longTP1 = close + (longPriceRange * tp1Ratio)
longTP2 = close + (longPriceRange * tp2Ratio)
longTP3 = close + (longPriceRange * tp3Ratio)

// Calculate Fibonacci TP levels for SHORT
shortPriceRange = close - finalSupport
shortTP1 = close - (shortPriceRange * tp1Ratio)
shortTP2 = close - (shortPriceRange * tp2Ratio)
shortTP3 = close - (shortPriceRange * tp3Ratio)

// Execute LONG trades
if buySignal and useStrategyMode
    strategy.entry("LONG", strategy.long, qty=qty, comment="BUY at Support")
    strategy.exit("LONG SL", "LONG", stop=longStopLoss, comment="Stop Loss")
    strategy.exit("LONG TP1", "LONG", limit=longTP1, qty_percent=33, comment="TP1 (23.6%)")
    strategy.exit("LONG TP2", "LONG", limit=longTP2, qty_percent=33, comment="TP2 (38.2%)")
    strategy.exit("LONG TP3", "LONG", limit=longTP3, qty_percent=34, comment="TP3 (61.8%)")
    
    lastBuyBar := bar_index
    
    // Create label for visualization
    label.new(bar_index, low - atr, "BUY\nEntry: " + str.tostring(close, "#.##") + 
              "\nSL: " + str.tostring(longStopLoss, "#.##") +
              "\nTP1: " + str.tostring(longTP1, "#.##") +
              "\nTP2: " + str.tostring(longTP2, "#.##") +
              "\nTP3: " + str.tostring(longTP3, "#.##"),
              color=color.green, style=label.style_label_up, textcolor=color.white, size=size.small)

// Execute SHORT trades
if sellSignal and useStrategyMode
    strategy.entry("SHORT", strategy.short, qty=qty, comment="SELL at Resistance")
    strategy.exit("SHORT SL", "SHORT", stop=shortStopLoss, comment="Stop Loss")
    strategy.exit("SHORT TP1", "SHORT", limit=shortTP1, qty_percent=33, comment="TP1 (23.6%)")
    strategy.exit("SHORT TP2", "SHORT", limit=shortTP2, qty_percent=33, comment="TP2 (38.2%)")
    strategy.exit("SHORT TP3", "SHORT", limit=shortTP3, qty_percent=34, comment="TP3 (61.8%)")
    
    lastSellBar := bar_index
    
    // Create label for visualization
    label.new(bar_index, high + atr, "SELL\nEntry: " + str.tostring(close, "#.##") + 
              "\nSL: " + str.tostring(shortStopLoss, "#.##") +
              "\nTP1: " + str.tostring(shortTP1, "#.##") +
              "\nTP2: " + str.tostring(shortTP2, "#.##") +
              "\nTP3: " + str.tostring(shortTP3, "#.##"),
              color=color.red, style=label.style_label_down, textcolor=color.white, size=size.small)

// Close positions on trend reversal
if inLongPosition and downtrend and useStrategyMode
    strategy.close("LONG", comment="Trend Reversal")
    label.new(bar_index, high + atr, "EXIT - Trend Reversal", color=color.blue, style=label.style_label_down, textcolor=color.white, size=size.tiny)

if inShortPosition and uptrend and useStrategyMode
    strategy.close("SHORT", comment="Trend Reversal")
    label.new(bar_index, low - atr, "EXIT - Trend Reversal", color=color.blue, style=label.style_label_up, textcolor=color.white, size=size.tiny)

// ===== Plotting =====
// Plot EMAs
plot(ema20, "EMA 20", color=color.new(color.blue, 0), linewidth=2)
plot(ema50, "EMA 50", color=color.new(color.orange, 0), linewidth=2)

// Plot Support and Resistance
plot(finalResistance, "Resistance", color=color.new(color.red, 30), linewidth=2, style=plot.style_line)
plot(finalSupport, "Support", color=color.new(color.green, 30), linewidth=2, style=plot.style_line)

// Plot position levels when in trade
plot(inLongPosition ? strategy.position_avg_price : na, "Long Entry", color=color.new(color.yellow, 0), linewidth=2, style=plot.style_cross)
plot(inShortPosition ? strategy.position_avg_price : na, "Short Entry", color=color.new(color.yellow, 0), linewidth=2, style=plot.style_cross)

// Plot TP levels with different colors for LONG positions
plot(inLongPosition and showFiboLevels ? longTP1 : na, "Long TP1 (23.6%)", color=color.new(color.lime, 0), linewidth=1, style=plot.style_circles)
plot(inLongPosition and showFiboLevels ? longTP2 : na, "Long TP2 (38.2%)", color=color.new(color.green, 0), linewidth=1, style=plot.style_circles)
plot(inLongPosition and showFiboLevels ? longTP3 : na, "Long TP3 (61.8%)", color=color.new(color.teal, 0), linewidth=2, style=plot.style_circles)

// Plot TP levels with different colors for SHORT positions
plot(inShortPosition and showFiboLevels ? shortTP1 : na, "Short TP1 (23.6%)", color=color.new(color.lime, 0), linewidth=1, style=plot.style_circles)
plot(inShortPosition and showFiboLevels ? shortTP2 : na, "Short TP2 (38.2%)", color=color.new(color.green, 0), linewidth=1, style=plot.style_circles)
plot(inShortPosition and showFiboLevels ? shortTP3 : na, "Short TP3 (61.8%)", color=color.new(color.teal, 0), linewidth=2, style=plot.style_circles)

// Background color for trend
bgcolor(uptrend ? color.new(color.green, 95) : downtrend ? color.new(color.red, 95) : na)

// ===== Alerts =====
alertcondition(buySignal, "BUY Signal", "BUY Signal at Support - Price: {{close}}")
alertcondition(sellSignal, "SELL Signal", "SELL Signal at Resistance - Price: {{close}}")
alertcondition(inLongPosition and high >= longTP1, "Long TP1 Reached", "Long TP1 Target Reached")
alertcondition(inLongPosition and high >= longTP2, "Long TP2 Reached", "Long TP2 Target Reached")
alertcondition(inLongPosition and high >= longTP3, "Long TP3 Reached", "Long TP3 Target Reached")
alertcondition(inShortPosition and low <= shortTP1, "Short TP1 Reached", "Short TP1 Target Reached")
alertcondition(inShortPosition and low <= shortTP2, "Short TP2 Reached", "Short TP2 Target Reached")
alertcondition(inShortPosition and low <= shortTP3, "Short TP3 Reached", "Short TP3 Target Reached")