Sumber dimuat naik... memuat...

Adaptive Volatility and Momentum Quantitative Trading System (AVMQTS)

Penulis:ChaoZhang, Tarikh: 2024-11-27 14:20:24
Tag:ATRMACDSMATPSL

img

Ringkasan

Strategi ini adalah sistem dagangan adaptif yang menggabungkan penunjuk turun naik dan momentum untuk menangkap trend pasaran melalui penyelarasan beberapa penunjuk teknikal. Strategi ini menggunakan penunjuk ATR untuk memantau turun naik pasaran, MACD untuk menilai momentum trend, dan menggabungkan penunjuk momentum harga untuk mengesahkan isyarat perdagangan, dengan mekanisme stop-loss dan mengambil keuntungan yang fleksibel. Sistem ini mempunyai daya adaptasi yang kuat dan boleh menyesuaikan kekerapan perdagangan dan kawalan kedudukan secara automatik mengikut keadaan pasaran.

Prinsip Strategi

Strategi ini bergantung pada sistem penunjuk tiga sebagai logik dagangan terasnya: Pertama, ATR digunakan untuk mengukur keadaan turun naik pasaran untuk menyediakan rujukan turun naik untuk keputusan dagangan; Kedua, penunjuk MACD's golden dan death crosses digunakan untuk menangkap titik perubahan trend, dengan penyambungan garis MACD yang cepat dan perlahan digunakan sebagai isyarat pencetus perdagangan utama; Ketiga, penunjuk momentum harga digunakan untuk pengesahan, memerhatikan perubahan harga berbanding tempoh sebelumnya untuk mengesahkan kekuatan trend. Sistem ini juga menggabungkan purata bergerak 50 hari sebagai penapis trend, hanya membenarkan kedudukan panjang apabila harga di atas purata bergerak dan kedudukan pendek apabila di bawah. Untuk mengelakkan overtrading, isyarat isyarat strategi menguatkuasakan selang perdagangan minimum dan secara pilihan melaksanakan pelaksanaan bergantian.

Kelebihan Strategi

  1. Penyelarasan silang pelbagai penunjuk: Melalui penyelarasan penunjuk dalam tiga dimensi - turun naik, trend, dan momentum, meningkatkan kebolehpercayaan isyarat perdagangan.
  2. Kebolehsesuaian yang kuat: Strategi boleh menyesuaikan secara dinamik mengikut keadaan turun naik pasaran, menyesuaikan diri dengan persekitaran pasaran yang berbeza.
  3. Kawalan risiko yang komprehensif: Tetapan stop-loss dan mengambil keuntungan berasaskan peratusan secara berkesan mengawal risiko perdagangan tunggal.
  4. Frekuensi dagangan yang boleh dikawal: Mengelakkan overtrading melalui tetapan selang dagangan minimum dan mekanisme pertukaran isyarat.
  5. Struktur sistem yang jelas: Modulariti kod yang tinggi dengan sempadan yang jelas antara modul fungsional, memudahkan penyelenggaraan dan pengoptimuman.

Risiko Strategi

  1. Risiko pasaran berayun: Dalam pasaran sampingan, beberapa isyarat palsu boleh dihasilkan, yang membawa kepada stop-loss berturut-turut.
  2. Risiko tergelincir: Semasa tempoh turun naik yang sengit, harga urus niaga sebenar boleh menyimpang dengan ketara dari harga pencetus isyarat.
  3. Sensitiviti parameter: Strategi menggunakan beberapa penunjuk teknikal, dan munasabah tetapan parameter secara langsung mempengaruhi prestasi strategi.
  4. Ketergantungan persekitaran pasaran: Strategi ini berfungsi dengan lebih baik di pasaran dengan trend yang jelas tetapi mungkin kurang berfungsi dalam keadaan pasaran lain.

Arahan Pengoptimuman Strategi

  1. Memperkenalkan mekanisme pengiktirafan persekitaran pasaran: Tambah penunjuk kekuatan trend untuk menggunakan konfigurasi parameter yang berbeza dalam persekitaran pasaran yang berbeza.
  2. Mengoptimumkan mekanisme stop-loss dan take-profit: Mempertimbangkan penyesuaian dinamik nisbah stop-loss dan take-profit berdasarkan ATR untuk menyesuaikan diri dengan lebih baik dengan turun naik pasaran.
  3. Tambah pengurusan kedudukan: Cadangkan pengenalan sistem pengurusan kedudukan dinamik berdasarkan turun naik, mengurangkan saiz dagangan dengan sewajarnya semasa tempoh turun naik yang tinggi.
  4. Tambah lebih banyak keadaan penapisan: Pertimbangkan untuk menambah jumlah, volatiliti, dan penapisan lain untuk meningkatkan kualiti isyarat.

Ringkasan

Strategi ini adalah sistem perdagangan kuantitatif yang direka dengan baik, secara logik ketat yang mencapai penangkapan yang berkesan terhadap trend pasaran melalui penggunaan pelbagai penunjuk teknikal. Sistem ini telah membuat pertimbangan terperinci dalam kawalan risiko dan pelaksanaan perdagangan, menunjukkan kepraktisan yang baik.


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

//@version=5
strategy("[ETH] Volatility & Momentum Adaptive Strategy", shorttitle="Definitive 1 day Ethereum Signal", overlay=true, initial_capital=10000, currency=currency.USD)

// === Input Parameters === //
trade_size = input.float(5, title="Trade Size (ETH)")
atr_length = input.int(8, minval=1, title="ATR Length")
macd_fast = input.int(8, minval=1, title="MACD Fast Length")
macd_slow = input.int(7, minval=1, title="MACD Slow Length")
macd_signal = input.int(9, minval=1, title="MACD Signal Length")
momentum_length = input.int(37, title="Momentum Length")
stop_loss_percent = input.float(9.9, title="Stop Loss Percentage (%)")
take_profit_percent = input.float(9.0, title="Take Profit Percentage (%)")
alternate_signal = input.bool(true, title="Alternate Buy/Sell Signals")

// === Indicators === //
// ATR to measure volatility
atr = ta.atr(atr_length)

// MACD for trend momentum
[macd_line, signal_line, _] = ta.macd(close, macd_fast, macd_slow, macd_signal)
macd_cross_up = ta.crossover(macd_line, signal_line)
macd_cross_down = ta.crossunder(macd_line, signal_line)

// Momentum
momentum = ta.mom(close, momentum_length)

// === Signal Control Variables === //
var bool last_signal_long = na
var int last_trade_bar = na
min_bars_between_trades = 5 // Adjust for minimal trade frequency control
time_elapsed = na(last_trade_bar) or (bar_index - last_trade_bar) >= min_bars_between_trades

// === Buy and Sell Conditions === //
// Buy when:
buy_signal = (macd_cross_up and momentum > 0 and close > ta.sma(close, 50) and time_elapsed)

// Sell when:
sell_signal = (macd_cross_down and momentum < 0 and close < ta.sma(close, 50) and time_elapsed)

// Enforce alternate signals if selected
if alternate_signal
    buy_signal := buy_signal and (na(last_signal_long) or not last_signal_long)
    sell_signal := sell_signal and (not na(last_signal_long) and last_signal_long)

// === Trade Execution === //
// Buy Position
if (buy_signal)
    if strategy.position_size < 0
        strategy.close("Short")
    strategy.entry("Long", strategy.long, qty=trade_size)
    last_signal_long := true
    last_trade_bar := bar_index

// Sell Position
if (sell_signal)
    if strategy.position_size > 0
        strategy.close("Long")
    strategy.entry("Short", strategy.short, qty=trade_size)
    last_signal_long := false
    last_trade_bar := bar_index

// === Stop Loss and Take Profit === //
if strategy.position_size > 0
    long_take_profit = strategy.position_avg_price * (1 + take_profit_percent / 100)
    long_stop_loss = strategy.position_avg_price * (1 - stop_loss_percent / 100)
    strategy.exit("TP/SL Long", from_entry="Long", limit=long_take_profit, stop=long_stop_loss)

if strategy.position_size < 0
    short_take_profit = strategy.position_avg_price * (1 - take_profit_percent / 100)
    short_stop_loss = strategy.position_avg_price * (1 + stop_loss_percent / 100)
    strategy.exit("TP/SL Short", from_entry="Short", limit=short_take_profit, stop=short_stop_loss)

// === Visual Signals === //
plotshape(series=buy_signal and time_elapsed, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")
plotshape(series=sell_signal and time_elapsed, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")


Berkaitan

Lebih lanjut