Sumber dimuat naik... memuat...

EMA/SMA Trend Following dengan Swing Trading Strategy Combined Volume Filter dan Peratusan Take-Profit/Stop-Loss System

Penulis:ChaoZhang, Tarikh: 2024-12-11 15:12:35
Tag:EMASMA

img

Ringkasan

Strategi ini adalah sistem perdagangan yang komprehensif yang menggabungkan trend berikut dengan kaedah perdagangan swing, menggunakan persilangan EMA dan SMA, pengenalan swing tinggi / rendah, penapisan jumlah, dan mekanisme mengambil keuntungan berasaskan peratusan dan menghentikan kerugian.

Prinsip Strategi

Strategi ini menggunakan mekanisme penapisan isyarat berlapis-lapis, bermula dengan persilangan EMA ((10) dan SMA ((21) untuk penentuan trend asas, kemudian menggunakan penembusan titik pivot kiri / kanan 6-bar untuk masa kemasukan, sementara memerlukan jumlah di atas purata bergerak 200 tempoh untuk memastikan kecairan yang mencukupi. Sistem ini menggunakan 2% mengambil keuntungan dan 1% penangguhan stop-loss untuk pengurusan risiko. Posisi panjang dimulakan apabila harga memecahkan di atas swing high dengan pengesahan jumlah; kedudukan pendek diambil apabila harga memecahkan di bawah swing low dengan pengesahan jumlah.

Kelebihan Strategi

  1. Pengesahan isyarat berbilang mengurangkan isyarat palsu melalui trend, penembusan harga dan pengesahan pengembangan jumlah
  2. Pengurusan keuntungan/kerugian yang fleksibel menggunakan keuntungan berasaskan peratusan dengan penangguhan stop-loss
  3. Sistem visualisasi komprehensif untuk pemantauan perdagangan dan isyarat
  4. Keupayaan yang tinggi dengan parameter kunci yang boleh diselaraskan
  5. Pengurusan risiko yang sistematik melalui paras stop-loss dan mengambil keuntungan yang ditetapkan terlebih dahulu

Risiko Strategi

  1. Potensi terputus palsu di pasaran yang berbeza
  2. Penapisan jumlah mungkin terlepas beberapa isyarat yang sah
  3. Peratusan tetap mengambil keuntungan mungkin keluar terlalu awal dalam trend yang kuat
  4. Sistem purata bergerak mempunyai kelewatan yang melekat dalam pembalikan cepat
  5. Perlu mempertimbangkan kesan kos dagangan pada pulangan strategi

Arahan pengoptimuman

  1. Memperkenalkan penyesuaian turun naik untuk penyesuaian dinamik mengambil keuntungan / berhenti kerugian
  2. Tambah penapisan kekuatan trend untuk mengelakkan perdagangan dalam trend lemah
  3. Mengoptimumkan algoritma penapisan jumlah dengan mengambil kira perubahan jumlah relatif
  4. Melaksanakan penapis berasaskan masa untuk mengelakkan tempoh dagangan yang tidak menguntungkan
  5. Pertimbangkan klasifikasi rejim pasaran untuk penyesuaian parameter

Ringkasan

Strategi ini membina sistem dagangan lengkap melalui purata bergerak, penembusan harga, dan pengesahan jumlah, sesuai untuk trend jangka menengah hingga panjang. Kekuatannya terletak pada pengesahan isyarat berbilang dan pengurusan risiko yang komprehensif, walaupun prestasi di pasaran yang berbeza memerlukan perhatian. Melalui pengoptimuman yang dicadangkan, terutamanya dalam daya adaptasi, strategi ini mempunyai ruang untuk peningkatan kestabilan dan prestasi.


/*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 combining EMA/SMA Crossover, Swing High/Low, Volume Filtering, and Percentage TP & Trailing Stop
strategy("Swing High/Low Strategy with Volume, EMA/SMA Crossovers, Percentage TP and Trailing Stop", overlay=true)

// --- Inputs ---
source = close
TITLE = input(false, title='Enable Alerts & Background Color for EMA/SMA Crossovers')
turnonAlerts = input(true, title='Turn on Alerts?')
colorbars = input(true, title="Color Bars?")
turnonEMASMA = input(true, title='Turn on EMA1 & SMA2?')
backgroundcolor = input(false, title='Enable Background Color?')

// EMA/SMA Lengths
emaLength = input.int(10, minval=1, title='EMA Length')
smaLength = input.int(21, minval=1, title='SMA Length')
ema1 = ta.ema(source, emaLength)
sma2 = ta.sma(source, smaLength)

// Swing High/Low Lengths
leftBars = input.int(6, title="Left Bars for Swing High/Low", minval=1)
rightBars = input.int(6, title="Right Bars for Swing High/Low", minval=1)

// Volume MA Length
volMaLength = input.int(200, title="Volume Moving Average Length")

// Percentage Take Profit with hundredth place adjustment
takeProfitPercent = input.float(2.00, title="Take Profit Percentage (%)", minval=0.01, step=0.01) / 100

// Trailing Stop Loss Option
useTrailingStop = input.bool(true, title="Enable Trailing Stop Loss?")
trailingStopPercent = input.float(1.00, title="Trailing Stop Loss Percentage (%)", minval=0.01, step=0.01) / 100

// --- Swing High/Low Logic ---
pivotHigh(_leftBars, _rightBars) =>
    ta.pivothigh(_leftBars, _rightBars)

pivotLow(_leftBars, _rightBars) =>
    ta.pivotlow(_leftBars, _rightBars)

ph = fixnan(pivotHigh(leftBars, rightBars))
pl = fixnan(pivotLow(leftBars, rightBars))

// --- Volume Condition ---
volMa = ta.sma(volume, volMaLength)

// Declare exit conditions as 'var' so they are initialized
var bool longExitCondition = na
var bool shortExitCondition = na

// --- Long Entry Condition: Close above Swing High & Volume >= 200 MA ---
longCondition = (close > ph and volume >= volMa)
if (longCondition)
    strategy.entry("Long", strategy.long)

// --- Short Entry Condition: Close below Swing Low & Volume >= 200 MA ---
shortCondition = (close < pl and volume >= volMa)
if (shortCondition)
    strategy.entry("Short", strategy.short)

// --- Take Profit and Trailing Stop Logic ---

// For long position: Set take profit at the entry price + takeProfitPercent
longTakeProfitLevel = strategy.position_avg_price * (1 + takeProfitPercent)
shortTakeProfitLevel = strategy.position_avg_price * (1 - takeProfitPercent)

// --- Long Exit Logic ---
if (useTrailingStop)
    // Trailing Stop for Long
    strategy.exit("Long Exit", "Long", stop=na, trail_offset=strategy.position_avg_price * trailingStopPercent, limit=longTakeProfitLevel)
else
    // Exit Long on Take Profit only
    strategy.exit("Long Exit", "Long", limit=longTakeProfitLevel)

// --- Short Exit Logic ---
if (useTrailingStop)
    // Trailing Stop for Short
    strategy.exit("Short Exit", "Short", stop=na, trail_offset=strategy.position_avg_price * trailingStopPercent, limit=shortTakeProfitLevel)
else
    // Exit Short on Take Profit only
    strategy.exit("Short Exit", "Short", limit=shortTakeProfitLevel)

// --- Plot Swing High/Low ---

plot(ph, style=plot.style_circles, linewidth=1, color=color.blue, offset=-rightBars, title="Swing High")
plot(ph, style=plot.style_line, linewidth=1, color=color.blue, offset=0, title="Swing High")
plot(pl, style=plot.style_circles, linewidth=1, color=color.red, offset=-rightBars, title="Swing High")
plot(pl, style=plot.style_line, linewidth=1, color=color.red, offset=0, title="Swing High")
// --- Plot EMA/SMA ---
plot(turnonEMASMA ? ema1 : na, color=color.green, title="EMA")
plot(turnonEMASMA ? sma2 : na, color=color.orange, title="SMA")

// --- Alerts ---
alertcondition(longCondition, title="Long Entry", message="Price closed above Swing High with Volume >= 200 MA")
alertcondition(shortCondition, title="Short Entry", message="Price closed below Swing Low with Volume >= 200 MA")

// --- Bar Colors for Visualization ---
barcolor(longCondition ? color.green : na, title="Long Entry Color")
barcolor(shortCondition ? color.red : na, title="Short Entry Color")
bgcolor(backgroundcolor ? (ema1 > sma2 ? color.new(color.green, 50) : color.new(color.red, 50)) : na)

Berkaitan

Lebih lanjut