Sumber dimuat naik... memuat...

Adaptive Trend Flow Multiple Filter Strategi Perdagangan

Penulis:ChaoZhang, Tarikh: 2025-01-06 11:58:25
Tag:EMASMAMACDATRHLC3

img

Ringkasan

Strategi ini adalah sistem trend berikut adaptif berdasarkan pelbagai penapis penunjuk teknikal. Ia menggabungkan pelbagai penunjuk teknikal termasuk Exponential Moving Average (EMA), Simple Moving Average (SMA), dan Moving Average Convergence Divergence (MACD), menyesuaikan parameter secara dinamik untuk menyesuaikan diri dengan persekitaran pasaran yang berbeza untuk menangkap trend yang cekap dan kawalan risiko. Strategi ini menggunakan mekanisme penapisan berlapis-lapis, yang meningkatkan kebolehpercayaan isyarat perdagangan dengan ketara melalui gabungan sinergi pelbagai penunjuk teknikal.

Prinsip Strategi

Logik teras adalah berdasarkan mekanisme penapisan tiga lapisan:

  1. Lapisan Pengiktirafan Trend Adaptif: Menggunakan gabungan EMA pantas dan perlahan untuk mengira garis asas trend dan secara dinamik menyesuaikan garis saluran atas dan bawah berdasarkan turun naik pasaran.
  2. Lapisan Penapis SMA: Memastikan arah pergerakan harga sejajar dengan trend keseluruhan menggunakan Purata Bergerak Sederhana.
  3. Lapisan Pengesahan MACD: Lebih lanjut mengesahkan isyarat dagangan menggunakan fungsi pengesahan trend penunjuk MACD.

Generasi isyarat perdagangan memerlukan semua syarat penapis dipenuhi: peralihan trend, pengesahan arah SMA, dan sokongan garis isyarat MACD. Strategi ini juga merangkumi sistem pengurusan kedudukan dinamik berdasarkan ekuiti akaun, menyesuaikan saiz kedudukan secara automatik melalui faktor leverage.

Kelebihan Strategi

  1. Kebolehsesuaian yang kuat: Strategi boleh menyesuaikan diri dengan persekitaran pasaran yang berbeza melalui penyesuaian parameter dinamik.
  2. Kawalan Risiko Komprehensif: Mekanisme penapisan berbilang mengurangkan kemungkinan isyarat palsu dengan ketara.
  3. Kebolehsesuaian Tinggi: Pengguna boleh menyesuaikan pelbagai parameter mengikut gaya perdagangan peribadi.
  4. Tahap Automasi Tinggi: Menyokong mesej amaran format JSON untuk integrasi mudah dengan sistem perdagangan automatik.
  5. Visualisasi yang baik: Menyediakan maklum balas visual yang kaya termasuk jalur trend dan penanda isyarat.

Risiko Strategi

  1. Kebergantungan Trend: Boleh menghasilkan isyarat palsu yang kerap dalam pasaran berayun.
  2. Risiko Kelewatan: Mekanisme penapisan berbilang boleh menyebabkan penangguhan masa kemasukan.
  3. Sensitiviti Parameter: Kombinasi parameter yang berbeza boleh menyebabkan variasi prestasi strategi yang ketara.
  4. Risiko Leverage: Leverage yang berlebihan boleh meningkatkan kerugian.

Arahan Pengoptimuman Strategi

  1. Penyesuaian Volatiliti: Tambahkan mekanisme stop-loss dinamik berdasarkan ATR.
  2. Pengiktirafan persekitaran pasaran: Tambah sistem klasifikasi keadaan pasaran untuk menggunakan kombinasi parameter yang berbeza dalam persekitaran pasaran yang berbeza.
  3. Skor Kualiti Isyarat: Menubuhkan sistem penilaian kekuatan isyarat untuk menyesuaikan kedudukan secara dinamik berdasarkan kekuatan isyarat.
  4. Pengoptimuman Pengurusan Modal: Memperkenalkan algoritma pengurusan wang yang lebih canggih untuk kawalan kedudukan yang lebih tepat.

Ringkasan

Strategi ini mencapai trend yang agak boleh dipercayai melalui mekanisme penapisan pelbagai lapisan dan pelarasan parameter dinamik. Walaupun terdapat beberapa risiko kelewatan dan pergantungan parameter, prestasi yang stabil masih dapat dicapai dalam perdagangan sebenar melalui pengoptimuman parameter yang munasabah dan langkah kawalan risiko.


/*backtest
start: 2024-12-29 00:00:00
end: 2025-01-05 00:00:00
period: 45m
basePeriod: 45m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("Adaptive Trend Flow Strategy with Filters for SPX", overlay=true, max_labels_count=500, 
     initial_capital=1000, commission_type=strategy.commission.cash_per_order, commission_value=0.01, slippage=2,
     margin_long=20, margin_short=20, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// User-defined inputs for trend logic
atr           = input.int(14, "Main Length", minval=2, group = "Find more strategies like this on pineindicators.com")
length        = input.int(2, "Main Length", minval=2)
smooth_len    = input.int(2, "Smoothing Length", minval=2)
sensitivity   = input.float(2.0, "Sensitivity", step=0.1)

// User-defined inputs for SMA filter
use_sma_filter = input.bool(true, "Enable SMA Filter?")
sma_length = input.int(4, "SMA Length", minval=1)

// User-defined inputs for MACD filter
use_macd_filter = input.bool(true, "Enable MACD Filter?")
macd_fast_length = input.int(2, "MACD Fast Length", minval=1)
macd_slow_length = input.int(7, "MACD Slow Length", minval=1)
macd_signal_length = input.int(2, "MACD Signal Length", minval=1)
// User-defined inputs for leverage
leverage_factor = input.float(4.5, "Leverage Factor", minval=1.0, step=0.1)
id           = input("besttrader123", title= "Your TradingView username", group = "Automate this strategy with plugpine.com")
key           = input("nc739ja84gf", title= "Unique identifier (UID)")
ticker        = input("SPX", title= "Ticker/symbol of your broker")
bullcolor     = #0097a7
bearcolor     = #ff195f
showbars      = input.bool(true, "Color Bars?")
showbg        = input.bool(true, "Background Color?")
showsignals   = input.bool(true, "Show Signals?")


// Trend calculation functions
calculate_trend_levels() =>
    typical = hlc3
    fast_ema = ta.ema(typical, length)
    slow_ema = ta.ema(typical, length * 2)
    basis = (fast_ema + slow_ema) / 2
    vol = ta.stdev(typical, length)
    smooth_vol = ta.ema(vol, smooth_len)
    upper = basis + (smooth_vol * sensitivity)
    lower = basis - (smooth_vol * sensitivity)
    [basis, upper, lower]

get_trend_state(upper, lower, basis) =>
    var float prev_level = na
    var int trend = 0
    if na(prev_level)
        trend := close > basis ? 1 : -1
        prev_level := trend == 1 ? lower : upper
    if trend == 1
        if close < lower
            trend := -1
            prev_level := upper
        else
            prev_level := lower
    else
        if close > upper
            trend := 1
            prev_level := lower
        else
            prev_level := upper
    [trend, prev_level]

[basis, upper, lower] = calculate_trend_levels()
[trend, level] = get_trend_state(upper, lower, basis)

// SMA filter
sma_value = ta.sma(close, sma_length)
sma_condition = use_sma_filter ? close > sma_value : true

// MACD filter
[macd_line, signal_line, _] = ta.macd(close, macd_fast_length, macd_slow_length, macd_signal_length)
macd_condition = use_macd_filter ? macd_line > signal_line : true

// Signal detection with filters
long_signal = trend == 1 and trend[1] == -1 and sma_condition and macd_condition
short_signal = trend == -1 and trend[1] == 1

// Plotting visuals
p2 = plot(basis, color=trend == 1 ? bullcolor : bearcolor, linewidth=2)
p1 = plot(level, color=close > level ? bullcolor : bearcolor, linewidth=2, style=plot.style_linebr)
// if showsignals and ta.crossover(close, level)
//     label.new(bar_index, level, "▲", color=bullcolor, textcolor=chart.bg_color, style=label.style_label_upper_right)
// if showsignals and ta.crossunder(close, level)
//     label.new(bar_index, level, "▼", color=bearcolor, textcolor=chart.fg_color, style=label.style_label_lower_right)

qty = strategy.equity / close * leverage_factor

// Automated alerts
if long_signal
    alert('{"AccountID": "' + id + '","Key": "' + key + '", "symbol": "' + ticker + '", "action": "long", "volume": ' + str.tostring(qty) + '}', alert.freq_once_per_bar)
if short_signal
    alert('{"AccountID": "' + id + '","Key": "' + key + '", "symbol": "' + ticker + '", "action": "closelong"}', alert.freq_once_per_bar)

// Strategy entries and exits
if long_signal
    strategy.entry("Long", strategy.long, qty=qty)
if short_signal
    strategy.close("Long")

// Optional SMA and MACD plot
plot(use_sma_filter ? sma_value : na, color=color.new(color.blue, 80), title="SMA")
plot(use_macd_filter ? macd_line : na, color=color.new(color.orange, 80), title="MACD Line")
plot(use_macd_filter ? signal_line : na, color=color.new(color.red, 80), title="Signal Line")


Berkaitan

Lebih lanjut