Strategi dagangan swing menggabungkan kedudukan panjang dan pendek dinamik dengan sistem isyarat persilangan purata bergerak

EMA SMA RSI ATR TP SL
Tarikh penciptaan: 2024-12-12 11:11:15 Akhirnya diubah suai: 2024-12-12 11:11:15
Salin: 1 Bilangan klik: 360
1
fokus pada
1617
Pengikut

Strategi dagangan swing menggabungkan kedudukan panjang dan pendek dinamik dengan sistem isyarat persilangan purata bergerak

Gambaran keseluruhan

Strategi ini adalah strategi perdagangan berfluktuasi berdasarkan petunjuk teknikal yang menggabungkan pelbagai isyarat seperti persimpangan rata-rata, RSI overbought dan oversold dan ATR stop loss. Inti strategi ini adalah untuk menangkap trend pasaran melalui persimpangan EMA jangka pendek dan SMA jangka panjang, sambil menggunakan isyarat RSI untuk pengesahan isyarat dan menetapkan kedudukan stop loss dan stop loss melalui ATR.

Prinsip Strategi

Strategi ini membina sistem dagangan dengan menggunakan gabungan pelbagai teknik:

  1. Lapisan penghakiman trend: Menggunakan persilangan 20 kitaran EMA dan 50 kitaran SMA untuk menentukan arah trend, EMA atas memakai SMA dianggap sebagai sinyal banyak, dan bawah memakai sebagai sinyal kosong.
  2. Layer pengesahan momentum: menggunakan indikator RSI untuk menilai overbought dan oversold, RSI di bawah 70 dibenarkan untuk melakukan overbought, dan di atas 30 dibenarkan untuk melakukan overbought.
  3. Lapisan pengiraan turun naik: menggunakan ATR 14 kitaran untuk mengira kedudukan hentian hentian, dengan hentian hentian 1.5 kali ATR, dan hentian hentian 3 kali ATR.
  4. Pengurusan Kedudukan: Mengambil kira jumlah kedudukan yang dibuka secara dinamik berdasarkan modal awal dan nisbah risiko setiap perdagangan (default 1%)

Kelebihan Strategik

  1. Pengesahan pelbagai isyarat: Mengurangkan gangguan isyarat palsu dengan cara menyeberang garis rata-rata, RSI dan ATR.
  2. Hentian Hentian Dinamis: Berdasarkan ATR, penyesuaian kedudukan hentian hentian yang dinamik dapat menyesuaikan diri dengan perubahan turun naik pasaran.
  3. Arah perdagangan yang fleksibel: boleh diaktifkan perdagangan berbilang atau kosong mengikut keadaan pasaran.
  4. Kawalan risiko yang ketat: Kawalan risiko yang berkesan untuk setiap perdagangan melalui kawalan risiko peratusan dan pengurusan kedudukan dinamik.
  5. Sokongan visual: Strategi menyediakan sokongan visual grafik yang lengkap, termasuk penandaan isyarat dan paparan penunjuk.

Risiko Strategik

  1. Risiko pasaran bergoyang: Dalam pasaran bergoyang, persilangan garis rata mungkin menghasilkan terlalu banyak isyarat palsu.
  2. Risiko slippage: Dalam tempoh turun naik yang kuat, harga transaksi sebenar mungkin jauh berbeza dengan harga isyarat.
  3. Risiko pengurusan wang: Jika kadar risiko terlalu tinggi, ia boleh menyebabkan kerugian tunggal yang terlalu besar.
  4. Sensitiviti parameter: Kesan strategi lebih sensitif kepada tetapan parameter dan memerlukan penyesuaian yang berhati-hati.

Arah pengoptimuman strategi

  1. Menambah penapis kekuatan trend: Indikator ADX boleh ditambah untuk menapis isyarat perdagangan dalam keadaan trend lemah.
  2. Optimumkan kitaran garis rata: parameter garis rata boleh disesuaikan secara dinamik mengikut ciri kitaran pasaran yang berbeza.
  3. Peningkatan mekanisme henti rugi: fungsi henti rugi yang lebih baik untuk melindungi keuntungan.
  4. Peningkatan pengesahan jumlah transaksi: penambahan penunjuk jumlah transaksi sebagai pengesahan tambahan, meningkatkan kebolehpercayaan isyarat.
  5. Klasifikasi persekitaran pasaran: menambah modul pengenalan persekitaran pasaran, menggunakan kombinasi parameter yang berbeza dalam persekitaran pasaran yang berbeza.

ringkaskan

Strategi ini membina sistem perdagangan yang agak lengkap melalui penggunaan gabungan pelbagai petunjuk teknikal. Keunggulan strategi adalah kebolehpercayaan pengesahan isyarat dan integriti pengurusan risiko, tetapi juga perlu mengambil kira kesan persekitaran pasaran terhadap prestasi strategi. Dengan arah pengoptimuman yang disyorkan, strategi ini mempunyai ruang untuk penambahbaikan yang besar.

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

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © CryptoRonin84

//@version=5
strategy("Swing Trading Strategy with On/Off Long and Short", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// Input for turning Long and Short trades ON/OFF
enable_long = input.bool(true, title="Enable Long Trades")
enable_short = input.bool(true, title="Enable Short Trades")

// Input parameters for strategy
sma_short_length = input.int(20, title="Short EMA Length", minval=1)
sma_long_length = input.int(50, title="Long SMA Length", minval=1)
sl_percentage = input.float(1.5, title="Stop Loss (%)", step=0.1, minval=0.1)
tp_percentage = input.float(3, title="Take Profit (%)", step=0.1, minval=0.1)
risk_per_trade = input.float(1, title="Risk Per Trade (%)", step=0.1, minval=0.1)
capital = input.float(10000, title="Initial Capital", step=100)

// Input for date range for backtesting
start_date = input(timestamp("2020-01-01 00:00"), title="Backtest Start Date")
end_date = input(timestamp("2024-12-31 23:59"), title="Backtest End Date")
inDateRange = true

// Moving averages
sma_short = ta.ema(close, sma_short_length)
sma_long = ta.sma(close, sma_long_length)

// RSI setup
rsi = ta.rsi(close, 14)
rsi_overbought = 70
rsi_oversold = 30

// ATR for volatility-based stop-loss calculation
atr = ta.atr(14)
stop_loss_level_long = strategy.position_avg_price - (1.5 * atr)
stop_loss_level_short = strategy.position_avg_price + (1.5 * atr)
take_profit_level_long = strategy.position_avg_price + (3 * atr)
take_profit_level_short = strategy.position_avg_price - (3 * atr)

// Position sizing based on risk per trade
risk_amount = capital * (risk_per_trade / 100)
position_size = risk_amount / (close * sl_percentage / 100)

// Long and Short conditions
long_condition = ta.crossover(sma_short, sma_long) and rsi < rsi_overbought
short_condition = ta.crossunder(sma_short, sma_long) and rsi > rsi_oversold

// Execute long trades
if (long_condition and inDateRange and enable_long)
    strategy.entry("Long", strategy.long, qty=position_size)
    strategy.exit("Take Profit/Stop Loss", "Long", stop=stop_loss_level_long, limit=take_profit_level_long)

// Execute short trades
if (short_condition and inDateRange and enable_short)
    strategy.entry("Short", strategy.short, qty=position_size)
    strategy.exit("Take Profit/Stop Loss", "Short", stop=stop_loss_level_short, limit=take_profit_level_short)

// Plot moving averages
plot(sma_short, title="Short EMA", color=color.blue)
plot(sma_long, title="Long SMA", color=color.red)

// Plot RSI on separate chart
hline(rsi_overbought, "Overbought", color=color.red)
hline(rsi_oversold, "Oversold", color=color.green)
plot(rsi, title="RSI", color=color.purple)

// Plot signals on chart
plotshape(series=long_condition and enable_long, title="Long Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")
plotshape(series=short_condition and enable_short, title="Short Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")

// Background color for backtest range
bgcolor(inDateRange ? na : color.red, transp=90)