Strategi Panjang Lanjutan dengan Pecah Garis Aliran Dinamik

SMA TP SL ATR VOL
Tarikh penciptaan: 2024-12-11 14:54:06 Akhirnya diubah suai: 2024-12-11 14:54:06
Salin: 0 Bilangan klik: 440
1
fokus pada
1617
Pengikut

Strategi Panjang Lanjutan dengan Pecah Garis Aliran Dinamik

Gambaran keseluruhan

Ini adalah strategi perdagangan breakout berbilang arah berdasarkan garis trend yang dinamik dan pengesahan kuantiti transaksi. Strategi ini mengiktiraf titik-titik tinggi yang penting dengan mengesan pergerakan harga dalam masa nyata, dan menggunakan titik-titik ini secara dinamik untuk membina garis trend. Strategi ini memasuki kedudukan berbilang arah apabila harga disertai dengan penarikan besar-besaran yang melampaui garis trend ke atas, sambil menggunakan peratusan stop loss dan trek stop loss untuk menguruskan risiko.

Prinsip Strategi

Logik teras strategi dibina di atas tiga tiang utama: pembinaan garis trend dinamik, pengesahan jumlah dagangan dan sistem pengurusan risiko. Pertama, strategi menggunakan fungsi ta.pivothigh untuk mengenal pasti harga yang berayun secara dinamik, dan membina garis trend ke atas berdasarkan kemiringan dan jarak antara dua puncak berayun yang paling baru. Kedua, strategi memerlukan isyarat masuk mesti disertai dengan dagangan yang lebih tinggi daripada 1.5 kali rata-rata 20 kitaran untuk memastikan keberkesanan penembusan.

Kelebihan Strategik

  1. Dinamis: Garis trend akan dikemas kini secara automatik apabila titik tinggi baru muncul, membolehkan strategi menyesuaikan diri dengan keadaan pasaran yang berbeza.
  2. Mekanisme pengesahan berganda: Gabungan harga terobosan dan pengesahan jumlah transaksi, mengurangkan isyarat palsu secara ketara.
  3. Pengurusan risiko yang baik: Menggunakan gabungan stop loss tetap dan stop loss yang dikesan, mengawal risiko dan tidak ketinggalan trend.
  4. Logik kod yang jelas: Reka bentuk modular menjadikan strategi mudah difahami dan dipelihara.
  5. Kecekapan pengiraan yang tinggi: Menggunakan petunjuk teknologi asas, beban operasi yang rendah.

Risiko Strategik

  1. Risiko turun naik pasaran: boleh mencetuskan hentian yang kerap dalam pasaran yang bergelombang tinggi.
  2. Tergantung kepada trend: Strategi mungkin tidak berfungsi dengan baik di pasaran horizontal.
  3. Risiko slippage: Dalam pasaran yang kurang likuid, harga transaksi sebenar mungkin jauh berbeza dengan harga isyarat.
  4. Sensitiviti parameter: Tetapan parameter garisan trend dan nilai terhad jumlah transaksi mempunyai kesan besar terhadap prestasi strategi.

Arah pengoptimuman strategi

  1. Penapisan keadaan pasaran: Pengenalan penunjuk kadar turun naik (seperti ATR) untuk menyesuaikan parameter atau penapisan isyarat perdagangan.
  2. Pengoptimuman parameter dinamik: penyesuaian kadar hentian dan kerugian berdasarkan keadaan pasaran yang dinamik.
  3. Pengesahan kitaran masa yang berbilang: Tambah pengesahan trend dengan kitaran masa yang lebih lama untuk meningkatkan ketepatan.
  4. Pengurusan kedudukan pintar: Mengubah saiz kedudukan mengikut turun naik pasaran dan dinamik kekuatan isyarat.
  5. Meningkatkan indikator sentimen pasaran: Mengintegrasikan RSI atau MACD untuk meningkatkan kebolehpercayaan isyarat.

ringkaskan

Ini adalah strategi untuk mengikuti trend yang dirancang dengan logik dan logik yang logik. Dengan pengesahan garis trend yang dinamik dan pengesahan jumlah transaksi, serta sistem pengurusan risiko yang baik, strategi ini mempunyai kebolehpasaran dan kebolehpercayaan yang baik. Walaupun terdapat beberapa ketergantungan pasaran, strategi ini masih mempunyai ruang yang besar untuk peningkatan dengan arah pengoptimuman yang disyorkan.

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

//@version=5
strategy("Long Only Strategy with Dynamic Trend Lines, Fixed TP/SL, and Trailing SL+", overlay=true, 
         default_qty_type=strategy.percent_of_equity, default_qty_value=10, 
         pyramiding=0, // Prevent multiple entries
         calc_on_order_fills=true, 
         calc_on_every_tick=true)

// === Parameters ===
swingThreshold = input.int(5, title="Swing Detection Threshold")
tpPercent = input.float(2.0, title="Take Profit (%)")
slPercent = input.float(1.0, title="Stop Loss (%)")
trailPercent = input.float(1.0, title="Trailing Stop (%)")
volumeThresholdMultiplier = input.float(1.5, title="Volume Spike Threshold (x MA)")

// === Volume Indicator ===
avgVolume = ta.sma(volume, 20)
volumeSpike = volume > (avgVolume * volumeThresholdMultiplier)

// === Detect Swing High ===
isSwingHigh = ta.pivothigh(high, swingThreshold, swingThreshold)

// Variables to store swing highs
var float swingHigh1 = na
var float swingHigh2 = na
var int swingHighBar1 = na
var int swingHighBar2 = na

// Update swing highs
if (isSwingHigh)
    swingHigh2 := swingHigh1
    swingHighBar2 := swingHighBar1
    swingHigh1 := high[swingThreshold]
    swingHighBar1 := bar_index - swingThreshold

// === Calculate Upper Trend Line ===
var float upperSlope = na
var float upperIntercept = na

// Calculate slope and intercept for upper trend line if there are two swing highs
if (not na(swingHigh1) and not na(swingHigh2))
    deltaX = swingHighBar1 - swingHighBar2
    if (deltaX != 0)
        upperSlope := (swingHigh1 - swingHigh2) / deltaX
        upperIntercept := swingHigh1 - (upperSlope * swingHighBar1)
    else
        upperSlope := 0
        upperIntercept := swingHigh1

// Calculate trend line price for the current bar
var float upperTrendPrice = na
if (not na(upperSlope) and not na(upperIntercept))
    upperTrendPrice := upperSlope * bar_index + upperIntercept

// Calculate trend line price for the previous bar
var float upperTrendPrice_prev = na
if (not na(upperSlope) and not na(upperIntercept))
    upperTrendPrice_prev := upperSlope * (bar_index - 1) + upperIntercept

// === Buy Condition Based on Trend Line Breakout ===

// Buy Signal: Price breaks above Upper Trend Line with volume spike
breakoutBuyCondition = (not na(upperTrendPrice)) and 
                       (close > upperTrendPrice) and 
                       (not na(upperTrendPrice_prev)) and 
                       (close[1] <= upperTrendPrice_prev) and 
                       volumeSpike

// === Manage Single Position ===

// Calculate Take Profit and Stop Loss levels based on percentage
longTakeProfit = close * (1 + tpPercent / 100)
longStopLoss = close * (1 - slPercent / 100)

// Calculate Trailing Stop as trail_offset (in price)
trail_offset = close * (trailPercent / 100)

// Execute Trade with Single Position Management
if (breakoutBuyCondition)
    // Close existing short position if any
    if (strategy.position_size < 0)
        strategy.close("Sell")
    // Open long position
    strategy.entry("Buy", strategy.long)
    // Set Take Profit, Stop Loss, and Trailing Stop Loss for long position
    strategy.exit("Take Profit Buy", from_entry="Buy", limit=longTakeProfit, stop=longStopLoss, trail_offset=trail_offset)

// Plot Buy Signal
plotshape(breakoutBuyCondition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")