Pelbagai penunjuk menjejaki strategi dagangan jalur aliran secara dinamik

EMA RSI ADX ATR TP SL
Tarikh penciptaan: 2025-02-18 14:02:44 Akhirnya diubah suai: 2025-02-18 14:02:44
Salin: 2 Bilangan klik: 327
1
fokus pada
1617
Pengikut

Pelbagai penunjuk menjejaki strategi dagangan jalur aliran secara dinamik

Ini adalah strategi pengesanan trend berdasarkan pelbagai petunjuk teknikal, yang membolehkan perdagangan jangkauan dengan menyesuaikan kedudukan secara dinamik. Strategi ini menggunakan indeks moving averages (EMA), indikator kekuatan relatif (RSI) dan indeks arah trend (ADX) untuk analisis trend pasaran dan menghasilkan isyarat perdagangan, sambil menggunakan amplitudo pergerakan sebenar (ATR) untuk menetapkan sasaran stop loss dan keuntungan yang dinamik.

Gambaran Keseluruhan Strategi

Strategi ini adalah sistem perdagangan trend-tracking yang menggabungkan pelbagai petunjuk teknikal. Ia terutamanya menentukan arah trend harga melalui EMA, RSI menilai keadaan pasaran overbought dan oversold, ADX mengesahkan kekuatan trend, dan akhirnya menggunakan ATR untuk menyesuaikan saiz kedudukan dan parameter pengurusan risiko secara dinamik.

Prinsip Strategi

  1. Isyarat masuk: apabila harga naik melalui EMA dan RSI> 50, dan ADX lebih besar daripada setinggi, menghasilkan isyarat buat banyak; apabila harga turun melalui EMA dan RSI< 50, dan ADX lebih besar daripada setinggi, menghasilkan isyarat buat kosong.
  2. Pengurusan kedudukan: Mengira jumlah kedudukan berdasarkan kaedah pilihan pengguna, menyokong empat cara berdasarkan nisbah risiko, nisbah modal, jumlah modal tetap dan jumlah kontrak tetap.
  3. Kawalan risiko: Menggunakan ATR untuk mengira sasaran stop loss dan keuntungan secara dinamik, sambil menjejaki perlindungan stop loss dan keuntungan yang diperoleh.

Analisis kelebihan

  1. Pengesahan trend pelbagai dimensi: Pengesahan trend melalui EMA, RSI dan ADX tiga indikator, meningkatkan kebolehpercayaan isyarat perdagangan.
  2. Pengurusan kedudukan yang fleksibel: menyokong pelbagai kaedah pengiraan kedudukan untuk memenuhi keperluan peniaga yang berbeza.
  3. Pengurusan risiko dinamik: Tetapan sasaran berhenti dan keuntungan dinamik berdasarkan ATR, menyesuaikan diri dengan perubahan turun naik pasaran.
  4. Mekanisme trailing stop: melindungi keuntungan yang telah diperoleh dan meningkatkan keuntungan keseluruhan melalui trailing stop.

Analisis risiko

  1. Risiko ketinggalan: Indeks teknikal mempunyai ketinggalan yang boleh menyebabkan kelewatan masa kemasukan.
  2. Risiko pasaran bergoyang: Isyarat palsu boleh berlaku dalam pasaran bergoyang.
  3. Sensitiviti parameter: Pilihan pelbagai parameter penunjuk akan mempengaruhi prestasi strategi secara signifikan.
  4. Risiko Leverage: Sokongan kepada Leverage yang tinggi boleh membawa kepada risiko kewangan yang lebih besar.

Arah pengoptimuman

  1. Kesesuaian persekitaran pasaran: mekanisme pengenalan persekitaran pasaran boleh ditambah, parameter penyesuaian dinamik dalam keadaan pasaran yang berbeza.
  2. Penapisan isyarat: memperkenalkan petunjuk tambahan seperti jumlah lalu lintas untuk meningkatkan kualiti isyarat.
  3. Pengoptimuman penangguhan: mekanisme penangguhan yang lebih fleksibel boleh direka untuk meningkatkan keuntungan.
  4. Peningkatan kawalan risiko: meningkatkan mekanisme pengurusan risiko seperti kawalan pengeluaran maksimum.

ringkaskan

Ini adalah strategi pemantauan trend yang komprehensif menggunakan beberapa petunjuk teknikal, dan mencapai perdagangan yang agak stabil melalui pengesahan trend berbilang dimensi dan mekanisme pengurusan risiko yang baik. Kelebihan strategi adalah mekanisme pengesahan trend sistemik dan pengurusan kedudukan yang fleksibel, tetapi juga perlu memperhatikan masalah seperti keterbelakangan indikator dan kesesuaian dengan persekitaran pasaran. Dengan pengoptimuman dan peningkatan kawalan risiko yang berterusan, strategi ini dijangka dapat mengekalkan prestasi yang stabil dalam pelbagai jenis persekitaran pasaran.

Kod sumber strategi
/*backtest
start: 2025-02-10 00:00:00
end: 2025-02-17 00:00:00
period: 45m
basePeriod: 45m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("EMA Momentum Scalper", shorttitle="EMS", overlay=true, pyramiding=0)

// === ПАРАМЕТРЫ ===
posSizeMethod = input.string("Capital %", title="Метод расчета позиции", options=["% Based", "Capital %", "Fixed Capital Based", "Fixed Contract Size"])
riskPerTrade = input.float(3, title="Риск на сделку (%)", minval=0.1, maxval=100, step=0.5) / 100
capitalPctPerTrade = input.float(10, title="Доля капитала на сделку (%)", minval=0.1, maxval=100, step=0.5) / 100
fixedCapitalAmount = input.float(100, title="Фиксированная сумма капитала", minval=0)
fixedContractSize = input.int(10, title="Фиксированный размер контракта")
atrLength = input.int(14, title="Длина ATR")
atrMultiplierSL = input.float(2.5, title="ATR множитель для SL")
atrMultiplierTP = input.float(1.5, title="ATR множитель для TP")
timeoutBars = input.int(20, title="Выход через X баров, если нет TP/SL")
emaLength = input.int(50, title="Длина EMA")
rsiLength = input.int(14, title="Длина RSI")
rsiOverbought = input.int(70, title="RSI перекупленность")
rsiOversold = input.int(30, title="RSI перепроданность")
adxLength = input.int(14, title="Длина ADX")
adxThreshold = input.float(20, title="Порог ADX для тренда")
leverage = input.int(15, title="Плечо", minval=1, maxval=100)

// === ИНДИКАТОРЫ ===
atr = ta.atr(atrLength)
ema = ta.ema(close, emaLength)
rsi = ta.rsi(close, rsiLength)

// === ADX ===
diPlus = ta.rma(math.max(high - high[1], 0), adxLength)
diMinus = ta.rma(math.max(low[1] - low, 0), adxLength)
dx = 100 * math.abs(diPlus - diMinus) / (diPlus + diMinus)
adx = ta.rma(dx, adxLength)

// === УСЛОВИЯ ВХОДА ===
longEntry = ta.crossover(close, ema) and rsi > 50 and adx > adxThreshold
shortEntry = ta.crossunder(close, ema) and rsi < 50 and adx > adxThreshold

// === РАСЧЕТ РАЗМЕРА ПОЗИЦИИ ===
var float qty = na
riskAmount = strategy.equity * riskPerTrade
stopLossDistance = atr * atrMultiplierSL
positionSize = riskAmount / stopLossDistance

if (posSizeMethod == "% Based")
    qty := strategy.equity * riskPerTrade / (atr * atrMultiplierSL)
else if (posSizeMethod == "Capital %")
    qty := strategy.equity * capitalPctPerTrade / close
else if (posSizeMethod == "Fixed Capital Based")
    qty := fixedCapitalAmount / close
else if (posSizeMethod == "Fixed Contract Size")
    qty := fixedContractSize

qty := qty * leverage  // Умножаем на плечо

// === СТОП-ЛОСС И ТЕЙК-ПРОФИТ ===
entryPrice = close
stopLossLong = entryPrice - atrMultiplierSL * atr
stopLossShort = entryPrice + atrMultiplierSL * atr
takeProfit1 = entryPrice + atrMultiplierTP * atr * (longEntry ? 1 : -1)
takeProfit2 = entryPrice + atrMultiplierTP * atr * (longEntry ? 2 : -2) / 1.5

// === ТРЕЙЛИНГ-СТОП ===
trailStopDistance = atr * atrMultiplierSL

if (longEntry)
    strategy.entry("Long", strategy.long, qty=qty)
    strategy.exit("Exit Long", "Long", stop=stopLossLong, limit=takeProfit1, trail_points=trailStopDistance)
    alertMessage = syminfo.ticker + " LONG\n" +
                   "Leverage: Cross " + str.tostring(leverage) + "x\n" +
                   "➡️ Entry: " + str.tostring(entryPrice) + "\n" +
                   "🟢 Take profit 1: " + str.tostring(takeProfit1) + "\n" +
                   "🛑 Stop loss: " + str.tostring(stopLossLong)
    alert(alertMessage, alert.freq_once_per_bar_close)

if (shortEntry)
    strategy.entry("Short", strategy.short, qty=qty)
    strategy.exit("Exit Short", "Short", stop=stopLossShort, limit=takeProfit1, trail_points=trailStopDistance)
    alertMessage = syminfo.ticker + " SHORT\n" +
                   "Leverage: Cross " + str.tostring(leverage) + "x\n" +
                   "➡️ Entry: " + str.tostring(entryPrice) + "\n" +
                   "🟢 Take profit 1: " + str.tostring(takeProfit1) + "\n" +
                   "🛑 Stop loss: " + str.tostring(stopLossShort)
    alert(alertMessage, alert.freq_once_per_bar_close)

// === ВИЗУАЛИЗАЦИЯ ===
plotshape(longEntry, color=color.green, style=shape.labelup, location=location.belowbar, text="BUY")
plotshape(shortEntry, color=color.red, style=shape.labeldown, location=location.abovebar, text="SELL")
plot(ema, color=color.blue, title="EMA")
bgcolor(rsi > rsiOverbought or rsi < rsiOversold ? color.new(color.gray, 80) : na)