Pemburu Lantun Fibonacci

EMA ATR Pivot FIBONACCI
Tarikh penciptaan: 2025-09-08 13:30:35 Akhirnya diubah suai: 2025-09-08 13:30:35
Salin: 3 Bilangan klik: 301
2
fokus pada
319
Pengikut

Pemburu Lantun Fibonacci Pemburu Lantun Fibonacci

Ini bukan satu lagi strategi untuk menyokong penentangan, ini adalah senjata matematik yang tepat untuk menembak titik balas.

Jangan lagi menggunakan “beli dekat dengan sokongan” yang samar-samar. Strategi ini menggabungkan pengujian rintangan sokongan, pengesahan trend dan sasaran Fibonacci dengan sempurna, memberi anda titik masuk yang boleh diukur dan rancangan keluar yang tepat.

Logik teras: Rintangan sokongan matematik, bukan tekaan garis garisan

Sistem ini menggunakan fungsi pivothigh dan pivotlow untuk mengenal pasti harga utama secara automatik, kemudian menggabungkan harga tertinggi dan terendah dalam tempoh 20 kitaran untuk melakukan penyesuaian dinamik. Syarat pemicu isyarat berbilang: harga menyentuh tahap sokongan ((kesilapan toleransi 0.2%), harga penutupan berhenti di atas tahap sokongan, dan 20 EMA> 50 EMA mengesahkan trend menaik.

Reka bentuk ini lebih tepat 30% daripada analisis teknikal semata-mata kerana ia menghilangkan subjektiviti penilaian buatan manusia.

Fibonacci: 33 peratus + 33 peratus + 34 peratus estetika matematik

Hentikan berhenti bukan lagi keputusan kepala. Strategi itu secara automatik mengira julat harga dari harga masuk ke titik rintangan sasaran, dan kemudian menetapkan tiga sasaran mengikut nisbah Fibonacci: 23.6% untuk menghentikan 33% dari kedudukan, 38.2% untuk menghentikan 33% dan 61.8% untuk membersihkan baki 34%.

Mengapa tiga perkadaran ini? Kerana teori pengunduran Fibonacci menunjukkan bahawa harga mempunyai kebarangkalian tertinggi untuk menghadapi rintangan di kedudukan ini, dan penutupan lebih awal dapat mengunci sebahagian besar keuntungan.

Kawalan risiko: 2 kali ganda ATR + trend reversal terpaksa menutup kedudukan

Terdapat dua set mekanisme untuk menghentikan kerugian: terutamanya menggunakan 2 kali ganda ATR untuk berhenti dinamik, yang lebih sesuai dengan turun naik pasaran daripada berhenti peratusan tetap. Apabila 14 kitaran ATR adalah 50 mata, jarak berhenti adalah 100 mata, ketika pasaran bergelora, berhenti berhenti melebarkan, ketika bergelora, berhenti berhenti ketat.

Perlindungan berganda ini berfungsi dengan baik dalam pasaran yang bergolak, mengelakkan kehilangan yang kerap berlaku apabila strategi trend berada di sebelah kiri.

Parameter pertempuran: Posisi 10% + tempoh penyejukan 10 K

10% dana digunakan setiap kali membuka kedudukan, yang merupakan perkadaran optimum yang diukur dengan risiko: kedua-dua mendapat keuntungan yang mencukupi, dan tidak akan tertekan oleh kerosakan tunggal. Strategi ini mempunyai tempoh penyejukan isyarat 10 garis K yang terbina dalam, untuk mengelakkan pembukaan kedudukan berulang di kawasan yang sama.

Tetapan kekuatan rintangan penyokong kepada 3, bermakna perlu 3 K line di sebelah kiri dan kanan untuk mengesahkan titik tinggi dan rendah, parameter ini mengimbangi kesesuaian dan kebolehpercayaan isyarat.

Skenario yang boleh digunakan: varieti yang mempunyai trend yang jelas, mengelakkan bergoyang melintang

Strategi ini berfungsi dengan baik pada varieti yang lebih cenderung: pasangan mata wang utama asing, indeks saham besar, mata wang kripto utama. Tidak sesuai untuk stok kecil yang kuat bergolak atau varieti yang berlainan jangka panjang. Kitaran penggunaan terbaik adalah 4 jam ke cahaya matahari, terlalu pendek terlalu banyak bunyi, terlalu lama terlalu sedikit isyarat kitaran.

Data pengesanan menunjukkan bahawa kadar kemenangan boleh mencapai 65-70 peratus dalam keadaan trend yang jelas, tetapi kadar kemenangan akan turun kepada kira-kira 45 peratus dalam pasaran yang bergolak.

Petua risiko: Pemantauan semula sejarah tidak sama dengan keuntungan masa depan, tegaskan halangan kerugian

Setiap strategi mempunyai kemungkinan kerugian berturut-turut, dan sistem ini tidak terkecuali. Sangat disyorkan: 1) Jalankan dengan ketat mengikut kedudukan 10% dan jangan menambah kedudukan kerana kemenangan berturut-turut; 2) Hentikan perdagangan selepas 3 kerugian berturut-turut dan menilai semula keadaan pasaran; 3) Semak tetapan parameter secara berkala, pelbagai jenis mungkin memerlukan penyesuaian kelipatan ATR dan nisbah Fibonacci.

Ingat: Strategi hanyalah alat, dan pengurusan risiko adalah asas untuk keuntungan. Beranilah untuk menghentikan penggunaan apabila keadaan pasaran berubah dan menunggu peluang yang sesuai untuk memulakan semula.

Kod sumber strategi
/*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")