Penjejakan aliran purata bergerak berbilang dan strategi penapisan turun naik dinamik

EMA TR ATR
Tarikh penciptaan: 2025-01-17 15:00:37 Akhirnya diubah suai: 2025-01-17 15:00:37
Salin: 3 Bilangan klik: 303
1
fokus pada
1617
Pengikut

Penjejakan aliran purata bergerak berbilang dan strategi penapisan turun naik dinamik

Gambaran keseluruhan

Strategi ini adalah sistem perdagangan pintar yang menggabungkan mengikut aliran dan penapisan turun naik. Ia mengenal pasti arah aliran pasaran melalui Purata Pergerakan Eksponen (EMA), menggunakan Julat Benar (TR) dan penapis turun naik dinamik untuk menentukan masa kemasukan, dan menguruskan risiko dengan mekanisme henti untung dan henti rugi dinamik berdasarkan turun naik. Strategi ini menyokong dua mod dagangan: Scalp dan Swing, yang boleh ditukar secara fleksibel mengikut persekitaran pasaran dan gaya dagangan yang berbeza.

Prinsip Strategi

Logik teras strategi merangkumi komponen utama berikut:

  1. Pengenalpastian Aliran: Gunakan EMA 50-tempoh sebagai penapis arah aliran dan hanya beli apabila harga di atas EMA dan turun apabila harga di bawah EMA.
  2. Penapisan Kemeruapan: Mengira EMA Julat Benar (TR) dan menggunakan faktor penapis boleh laras (lalai 1.5) untuk menapis bunyi pasaran.
  3. Syarat kemasukan: Digabungkan dengan analisis morfologi tiga garisan K berturut-turut, pergerakan harga mestilah berterusan dan dipercepatkan.
  4. Ambil Untung dan Henti Rugi: Dalam mod jangka pendek, ia ditetapkan berdasarkan TR semasa dalam mod jalur, ia ditetapkan berdasarkan mata tinggi dan rendah sebelumnya untuk mencapai pengurusan risiko dinamik.

Kelebihan Strategik

  1. Kebolehsuaian yang kukuh: Melalui gabungan penapisan turun naik dinamik dan penjejakan arah aliran, ia boleh menyesuaikan diri dengan persekitaran pasaran yang berbeza.
  2. Pengurusan risiko yang sempurna: Menyediakan mekanisme henti untung dan henti rugi dinamik untuk dua mod dagangan, yang boleh dipilih secara fleksibel mengikut ciri pasaran.
  3. Kebolehlarasan parameter yang baik: parameter utama seperti pekali penapis, kitaran arah aliran, dll. boleh dioptimumkan mengikut ciri produk dagangan.
  4. Kesan visualisasi yang baik: Menyediakan tanda isyarat beli dan jual yang jelas dan paparan kedudukan henti untung dan henti rugi untuk memudahkan pemantauan transaksi.

Risiko Strategik

  1. Risiko pembalikan arah aliran: hentian berturut-turut mungkin berlaku pada titik perubahan arah aliran.
  2. Risiko pecahan palsu: Isyarat palsu mungkin dicetuskan apabila turun naik tiba-tiba meningkat.
  3. Kepekaan parameter: Tetapan pekali penapis yang tidak betul boleh mengakibatkan isyarat terlalu banyak atau terlalu sedikit.
  4. Impak gelinciran: Dalam pasaran yang pantas, anda mungkin menghadapi gelinciran yang besar, yang mungkin menjejaskan prestasi strategi anda.

Arah pengoptimuman strategi

  1. Tambahkan penapisan kekuatan aliran: Penunjuk seperti ADX boleh diperkenalkan untuk menilai kekuatan aliran dan meningkatkan kesan penjejakan arah aliran.
  2. Optimumkan ambil untung dan henti rugi: Pertimbangkan untuk memperkenalkan henti rugi bergerak untuk melindungi lebih banyak keuntungan.
  3. Tingkatkan model dagangan ayunan: lebih banyak syarat pertimbangan perdagangan ayunan boleh ditambah untuk meningkatkan keupayaan pegangan jangka sederhana dan panjang.
  4. Tambah analisis volum: Gabungkan perubahan volum untuk mengesahkan kesahihan kejayaan.

ringkaskan

Strategi ini membina sistem perdagangan yang lengkap dengan menggabungkan secara organik penjejakan arah aliran, penapisan turun naik dan pengurusan risiko dinamik. Kelebihan strategi ialah ia sangat mudah disesuaikan dan dikawal risiko, sambil menyediakan ruang yang besar untuk pengoptimuman. Dengan menetapkan parameter secara munasabah dan memilih mod dagangan yang sesuai, strategi boleh mengekalkan prestasi yang stabil dalam persekitaran pasaran yang berbeza. Adalah disyorkan bahawa pedagang menjalankan ujian belakang yang mencukupi dan pengoptimuman parameter sebelum penggunaan sebenar, dan membuat pelarasan yang sepadan berdasarkan ciri-ciri produk dagangan tertentu.

Kod sumber strategi
/*backtest
start: 2024-12-17 00:00:00
end: 2025-01-15 08:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/

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

//@version=5
strategy("Scalp Slayer (I)", overlay=true)

// Input Parameters
filterNumber = input.float(1.5, "Filter Number", minval=1.0, maxval=10.0, tooltip="Higher = More aggressive Filter, Lower = Less aggressive")
emaTrendPeriod = input.int(50, "EMA Trend Period", minval=1, tooltip="Period for the EMA used for trend filtering")
lookbackPeriod = input.int(20, "Lookback Period for Highs/Lows", minval=1, tooltip="Period for determining recent highs/lows")
colorTP = input.color(title='Take Profit Color', defval=color.orange)
colorSL = input.color(title='Stop Loss Color', defval=color.red)

// Inputs for visibility
showBuyLabels = input.bool(true, title="Show Buy Labels")
showSellLabels = input.bool(true, title="Show Sell Labels")

// Alert Options
alertOnCondition = input.bool(true, title="Alert on Condition Met", tooltip="Enable to alert when condition is met")

// Trade Mode Toggle
tradeMode = input.bool(false, title="Trade Mode (ON = Swing, OFF = Scalp)", tooltip="Swing-mode you can use your own TP/SL.")

// Calculations
tr = high - low
ema = filterNumber * ta.ema(tr, 50)
trendEma = ta.ema(close, emaTrendPeriod)  // Calculate the EMA for the trend filter

// Highest and lowest high/low within lookback period for swing logic
swingHigh = ta.highest(high, lookbackPeriod)
swingLow = ta.lowest(low, lookbackPeriod)

// Variables to track the entry prices and SL/TP levels
var float entryPriceLong = na
var float entryPriceShort = na
var float targetPriceLong = na
var float targetPriceShort = na
var float stopLossLong = na
var float stopLossShort = na
var bool tradeActive = false

// Buy and Sell Conditions with Trend Filter
buyCondition = close > trendEma and  // Buy only if above the trend EMA
      close[2] > open[2] and close[1] > open[1] and close > open and 
      (math.abs(close[2] - open[2]) > math.abs(close[1] - open[1])) and 
      (math.abs(close - open) > math.abs(close[1] - open[1])) and 
      close > close[1] and close[1] > close[2] and tr > ema

sellCondition = close < trendEma and  // Sell only if below the trend EMA
       close[2] < open[2] and close[1] < open[1] and close < open and 
       (math.abs(close[2] - open[2]) > math.abs(close[1] - open[1])) and 
       (math.abs(close - open) > math.abs(close[1] - open[1])) and 
       close < close[1] and close[1] < close[2] and tr > ema

// Entry Rules
if (buyCondition and not tradeActive)
    entryPriceLong := close  // Track entry price for long position
    stopLossLong := tradeMode ? ta.lowest(low, lookbackPeriod) : swingLow  // Scalping: recent low, Swing: lowest low of lookback period
    targetPriceLong := tradeMode ? close + tr : swingHigh  // Scalping: close + ATR, Swing: highest high of lookback period
    tradeActive := true

if (sellCondition and not tradeActive)
    entryPriceShort := close  // Track entry price for short position
    stopLossShort := tradeMode ? ta.highest(high, lookbackPeriod) : swingHigh  // Scalping: recent high, Swing: highest high of lookback period
    targetPriceShort := tradeMode ? close - tr : swingLow  // Scalping: close - ATR, Swing: lowest low of lookback period
    tradeActive := true

// Take Profit and Stop Loss Logic
signalBuyTPPrint = (not na(entryPriceLong) and close >= targetPriceLong)
signalSellTPPrint = (not na(entryPriceShort) and close <= targetPriceShort)

signalBuySLPrint = (not na(entryPriceLong) and close <= stopLossLong)
signalSellSLPrint = (not na(entryPriceShort) and close >= stopLossShort)

if (signalBuyTPPrint or signalBuySLPrint)
    entryPriceLong := na  // Reset entry price for long position
    targetPriceLong := na  // Reset target price for long position
    stopLossLong := na  // Reset stop-loss for long position
    tradeActive := false

if (signalSellTPPrint or signalSellSLPrint)
    entryPriceShort := na  // Reset entry price for short position
    targetPriceShort := na  // Reset target price for short position
    stopLossShort := na  // Reset stop-loss for short position
    tradeActive := false

// Plot Buy and Sell Labels with Visibility Conditions
plotshape(showBuyLabels and buyCondition, "Buy", shape.labelup, location=location.belowbar, color=color.green, text="BUY", textcolor=color.white, size=size.tiny)
plotshape(showSellLabels and sellCondition, "Sell", shape.labeldown, location=location.abovebar, color=color.red, text="SELL", textcolor=color.white, size=size.tiny)

// Plot Take Profit Flags
plotshape(showBuyLabels and signalBuyTPPrint, title="Take Profit (buys)", text="TP", style=shape.flag, location=location.abovebar, color=colorTP, textcolor=color.white, size=size.tiny)
plotshape(showSellLabels and signalSellTPPrint, title="Take Profit (sells)", text="TP", style=shape.flag, location=location.belowbar, color=colorTP, textcolor=color.white, size=size.tiny)

// Plot Stop Loss "X" Marker
plotshape(showBuyLabels and signalBuySLPrint, title="Stop Loss (buys)", text="X", style=shape.xcross, location=location.belowbar, color=colorSL, textcolor=color.white, size=size.tiny)
plotshape(showSellLabels and signalSellSLPrint, title="Stop Loss (sells)", text="X", style=shape.xcross, location=location.abovebar, color=colorSL, textcolor=color.white, size=size.tiny)

// Alerts

alertcondition(buyCondition and alertOnCondition, title="Buy Alert", message='{"content": "Buy {{ticker}} at {{close}}"}')
alertcondition(sellCondition and alertOnCondition, title="Sell Alert", message='{"content": "Sell {{ticker}} at {{close}}"}')
alertcondition(signalBuyTPPrint and alertOnCondition, title="Buy TP Alert", message='{"content": "Buy TP {{ticker}} at {{close}}"}')
alertcondition(signalSellTPPrint and alertOnCondition, title="Sell TP Alert", message='{"content": "Sell TP {{ticker}} at {{close}}"}')
alertcondition(signalBuySLPrint and alertOnCondition, title="Buy SL Alert", message='{"content": "Buy SL {{ticker}} at {{close}}"}')
alertcondition(signalSellSLPrint and alertOnCondition, title="Sell SL Alert", message='{"content": "Sell SL {{ticker}} at {{close}}"}')

if buyCondition
    strategy.entry("Enter Long", strategy.long)
else if sellCondition
    strategy.entry("Enter Short", strategy.short)