Strategi kuantitatif persilangan rata-rata bergerak dan stop loss volatilitas dinamis

SMA RSI ATR RISK-TO-REWARD RATIO TREND FOLLOWING
Tanggal Pembuatan: 2025-04-02 11:08:39 Akhirnya memodifikasi: 2025-04-02 11:08:39
menyalin: 2 Jumlah klik: 323
2
fokus pada
319
Pengikut

Strategi kuantitatif persilangan rata-rata bergerak dan stop loss volatilitas dinamis Strategi kuantitatif persilangan rata-rata bergerak dan stop loss volatilitas dinamis

Ringkasan

Strategi perdagangan kuantitatif ini adalah sistem komprehensif yang menggabungkan mekanisme stop loss dinamis yang menggabungkan crossover rata-rata bergerak, penyaringan indikator yang relatif kuat (RSI) dan rentang rata-rata yang sebenarnya (ATR). Strategi ini terutama digunakan untuk menangkap tren jangka menengah dan panjang sambil menghindari masuk ke dalam lingkungan pasar yang terlalu overbought atau oversold melalui indikator RSI, dan menggunakan indikator ATR untuk mengatur stop loss dinamis untuk beradaptasi dengan perubahan volatilitas pasar. Strategi ini bekerja sangat baik pada jangka waktu 15 menit, mampu mencapai keseimbangan yang baik antara menangkap tren intraday dan menghindari kebisingan yang berlebihan pada jangka waktu rendah.

Prinsip Strategi

Logika inti dari strategi ini didasarkan pada komponen-komponen kunci berikut:

  1. Sinyal silang rata-rata bergerakStrategi menggunakan dua rata-rata bergerak sederhana ((SMA), yaitu rata-rata jangka pendek 50 periode dan rata-rata jangka panjang 200 periode. Sistem akan memicu sinyal ganda ketika rata-rata jangka pendek lebih rendah dari rata-rata jangka panjang dan nilai RSI lebih besar dari 30.

  2. Mekanisme penyaringan RSIStrategi menggunakan indikator RSI 14 siklus untuk penyaringan masuk. Secara khusus, overtrading hanya diizinkan ketika nilai RSI lebih tinggi dari 30, yang membantu menghindari masuk buta di zona oversold yang dalam. Meskipun kode mempertahankan kerangka kondisi shorting, versi saat ini berfokus pada strategi overtrading.

  3. ATR Dynamic Stop LossStrategi: Menggunakan indikator ATR 14 siklus untuk menghitung stop loss dinamis. Stop loss diatur sebagai harga masuk dikurangi ((ATR nilai × kelipatan), di mana ATR kelipatan default adalah 1.0. mekanisme stop loss dinamis ini dapat menyesuaikan diri dengan volatilitas pasar yang sebenarnya, memberikan ruang stop loss yang lebih longgar selama gelombang tinggi, menjaga kontrol risiko yang lebih ketat selama gelombang rendah.

  4. Rasio Risiko-RugiStrategi ini menerapkan pengaturan stop loss berdasarkan RRR, dengan nilai default 1.5. Stop loss dihitung sebagai harga masuk ditambah harga masuk - harga stop loss × RRR, memastikan bahwa potensi keuntungan dari setiap perdagangan tetap proporsional dengan risiko yang ditanggung.

Keunggulan Strategis

  1. Menggabungkan trend tracking dan filterStrategi tidak hanya menggunakan pergerakan rata-rata untuk menangkap perubahan tren, tetapi juga memfilternya melalui indikator RSI, mengurangi sinyal palsu dan meningkatkan kualitas entry.

  2. Manajemen risiko dinamisATR-based stop loss mechanism adalah fitur utama dari strategi ini, yang dapat menyesuaikan stop loss distance sesuai dengan dinamika pasar yang berfluktuasi, menghindari masalah dengan stop loss tetap yang dipicu terlalu dini dalam lingkungan yang berfluktuasi tinggi, sambil mempertahankan kontrol risiko yang tepat pada periode yang rendah.

  3. Pengembalian Risiko yang DioptimalkanStrategi ini memastikan bahwa potensi keuntungan dari setiap perdagangan adalah proporsional dengan risiko melalui rasio risiko-pengembalian yang diantisipasi, yang membantu pertumbuhan modal dalam jangka panjang, bahkan jika peluang kemenangan tidak tinggi.

  4. Visualisasi transaksiStrategi ini mencakup pemetaan real-time dari posisi stop loss dan stop loss, serta fungsi penanda transaksi yang telah selesai, yang meningkatkan visibilitas operasi strategi secara signifikan, yang memudahkan analisis dan optimasi strategi.

  5. Integrasi Manajemen DanaStrategi: Default menggunakan persentase dari total nilai akun untuk manajemen posisi, metode ini lebih fleksibel daripada jumlah tetap, dan dapat secara otomatis menyesuaikan ukuran perdagangan dengan perubahan ukuran akun.

Risiko Strategis

  1. Risiko pembalikan trenMeskipun strategi menggunakan moving average untuk mengidentifikasi tren, itu dapat menyebabkan kerugian yang lebih besar jika pasar tiba-tiba berbalik. Solusi adalah dengan mempertimbangkan untuk memperkenalkan indikator jangka pendek yang lebih sensitif sebagai konfirmasi tambahan, atau menyesuaikan RSI threshold untuk meningkatkan sensitivitas terhadap berbalik.

  2. Parameter SensitivitasParameter-parameter penting dari strategi seperti siklus SMA, RSI, ATR, dan lain-lain, memiliki pengaruh yang signifikan terhadap kinerja. Pengaturan parameter yang berbeda mungkin diperlukan dalam lingkungan pasar yang berbeda, sehingga perlu dilakukan retrospeksi sejarah yang memadai untuk menemukan kombinasi parameter yang optimal.

  3. Keterbatasan Pasar Unilateral: Versi saat ini berfokus pada melakukan beberapa strategi yang mungkin tidak berfungsi dengan baik di pasar yang terus turun. Solusinya adalah mengaktifkan kondisi shorting dalam kode untuk memungkinkan perdagangan dua arah.

  4. Stop loss terlalu besarPada saat volatilitas sangat tinggi, nilai ATR dapat meningkat secara signifikan, menyebabkan jarak stop loss terlalu lebar dan potensi kerugian meningkat. Anda dapat mempertimbangkan untuk menetapkan batas atas untuk kelipatan ATR, atau kombinasi dari stop loss jumlah tetap dan stop loss ATR dinamis.

  5. Ketidakpastian frekuensi transaksiSolusi adalah mempertimbangkan untuk menambahkan sinyal perdagangan jangka pendek sebagai tambahan, atau menggunakan indikator yang lebih pendek setelah tren utama ditetapkan.

Arah optimasi strategi

  1. Integrasi analisis multi-frame waktuStrategi saat ini hanya bekerja pada satu kerangka waktu. Anda dapat mempertimbangkan untuk mengintegrasikan analisis multi-kerangka waktu, misalnya dengan menggunakan kerangka waktu yang lebih tinggi untuk mengkonfirmasi arah tren utama, dan kemudian mencari titik masuk pada kerangka waktu yang lebih rendah untuk meningkatkan akurasi masuk.

  2. Kesempurnaan Logika Ruang: Aktifkan dan optimalkan logika shorting dalam strategi, sehingga dapat bekerja sama baiknya di pasar yang turun. Ini mungkin memerlukan penyesuaian RSI threshold untuk shorting (jika RSI lebih besar dari 70 untuk shorting), dan pengaturan parameter yang berbeda untuk arah pasar yang berbeda.

  3. Memperkenalkan indikator volume transaksiPertimbangkan untuk mengintegrasikan indikator volume transaksi ke dalam logika entry dan hanya melakukan sinyal perdagangan jika volume transaksi dikonfirmasi, yang dapat membantu mengurangi kerugian akibat terobosan palsu.

  4. Optimalkan strategi penanggulanganStrategi saat ini menggunakan pengembalian risiko tetap daripada pengaturan stop loss, Anda dapat mempertimbangkan untuk mengunci sebagian keuntungan atau melacak stop loss untuk mendapatkan lebih banyak keuntungan jika tren terus berkembang.

  5. Menambahkan filter waktu transaksiUntuk pasar yang memiliki karakteristik waktu yang jelas, filter waktu dapat ditambahkan untuk menghindari perdagangan pada saat-saat likuiditas rendah atau ketidakpastian tinggi.

  6. Parameter AdaptifAdaptasi parameter berdasarkan volatilitas historis atau karakteristik pasar lainnya, sehingga strategi dapat secara otomatis mengoptimalkan parameter sesuai dengan perubahan lingkungan pasar.

Meringkaskan

Strategi kuantitatif ini didasarkan pada crossover moving average, RSI filter, dan stop loss dinamis ATR, yang memberikan kerangka perdagangan yang seimbang, terutama untuk perdagangan tren jangka menengah dan panjang. Keunggulan utamanya adalah bahwa analisis indikator teknis dikombinasikan dengan manajemen risiko dinamis dengan mulus, baik untuk menangkap perubahan tren, dan untuk menyesuaikan peluang risiko sesuai dengan volatilitas pasar.

Meskipun ada keterbatasan pada sensitivitas parameter dan perdagangan satu arah, masalah-masalah ini dapat diperbaiki secara efektif dengan arah optimasi yang disarankan, seperti analisis multi-frame timeframe, perbaikan logika shorting, dan pengenalan konfirmasi volume. Khususnya, menggabungkan mekanisme penyesuaian parameter dinamis dengan strategi stop-loss yang lebih kompleks, diharapkan untuk meningkatkan lebih lanjut kehandalan dan profitabilitas strategi.

Strategi ini memberikan titik awal yang kuat bagi para pedagang yang mencari perdagangan tren jangka menengah dan panjang, sambil memperhatikan pengendalian risiko, dan berpotensi menjadi sistem perdagangan yang efisien dengan penyesuaian yang dipersonalisasi dan pengoptimalan berkelanjutan.

Kode Sumber Strategi
/*backtest
start: 2024-04-02 00:00:00
end: 2025-04-01 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BNB_USDT"}]
*/

//@version=6
strategy(title=" VS-NTC> NASDQ100 Long MA+RSI+ATR", shorttitle="VS-NTC> Long NASDQ100 MA+RSI+ATR", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// ————— Inputs —————
smaLenShort  = input.int(50,  title="Short SMA Length")
smaLenLong   = input.int(200, title="Long SMA Length")
rsiLen       = input.int(14,  title="RSI Length")
atrPeriod    = input.int(14,  title="ATR Period")
atrMult      = input.float(1.0, title="Stop-Loss ATR Multiplier", step=0.1)
rrRatio      = input.float(1.5, title="Risk-to-Reward Ratio",    step=0.1)

// ————— Indicator Calculations —————
smaShort = ta.sma(close, smaLenShort)
smaLong  = ta.sma(close, smaLenLong)
rsiVal   = ta.rsi(close, rsiLen)
atrVal   = ta.atr(atrPeriod)

// ————— Entry Conditions —————
// Long Condition: 50SMA > 200SMA and RSI < 70
longCondition = (smaShort < smaLong) and (rsiVal > 30)
// Short Condition: 50SMA < 200SMA and RSI > 30 (example: avoid oversold)
// Or use RSI > 70 to short if the market is overbought.
shortCondition = false
// shortCondition = (smaShort > smaLong) and (rsiVal < 35)

// ————— Entry Logic —————
if longCondition
    strategy.entry(id="Long", direction=strategy.long)

if shortCondition
    strategy.entry(id="Short", direction=strategy.short)

// ————— Stop-Loss & Take-Profit Calculation —————
var float stopPrice       = na
var float takeProfitPrice = na

// If we have a position open, we determine SL & TP differently for Long or Short.
if strategy.position_size > 0
    // We are in a Long trade
    stopPrice       := strategy.position_avg_price - (atrVal * atrMult)
    takeProfitPrice := strategy.position_avg_price + ((strategy.position_avg_price - stopPrice) * rrRatio)

    strategy.exit("Exit SL/TP", stop=stopPrice, limit=takeProfitPrice)
else if strategy.position_size < 0
    // We are in a Short trade
    stopPrice       := strategy.position_avg_price + (atrVal * atrMult)
    // For short, the distance from entry to stop is (stopPrice - entry)
    // So the take-profit is entry - that same distance times RR
    takeProfitPrice := strategy.position_avg_price - ((stopPrice - strategy.position_avg_price) * rrRatio)

    strategy.exit("Exit SL/TP", stop=stopPrice, limit=takeProfitPrice)
else
    // No open position → reset plots to na
    stopPrice       := na
    takeProfitPrice := na

// ————— Plot the Planned Stop-Loss & Take-Profit —————
plot(stopPrice,       title="Stop Loss",   color=color.red,   linewidth=2)
plot(takeProfitPrice, title="Take Profit", color=color.green, linewidth=2)


// ————— Label Each Closed Trade (Wins & Losses) —————
var int lastClosedTradeCount = 0
currentClosedCount = strategy.closedtrades

// If there's at least one new closed trade, label it
if currentClosedCount > lastClosedTradeCount
    newTradeIndex = currentClosedCount - 1

    tradeProfit  = strategy.closedtrades.profit(newTradeIndex)
    exitBarIndex = strategy.closedtrades.exit_bar_index(newTradeIndex)
    exitPrice    = strategy.closedtrades.exit_price(newTradeIndex)

    // Win label if profit > 0
    if tradeProfit > 0
        labelText  = "Win: " + str.tostring(tradeProfit)
        labelStyle = label.style_label_up
        labelColor = color.new(color.green, 0)
        label.new(exitBarIndex, exitPrice, text=labelText, style=labelStyle, color=labelColor, size=size.tiny)

    // Loss label if profit < 0
    if tradeProfit < 0
        labelText  = "Loss: " + str.tostring(tradeProfit)
        labelStyle = label.style_label_down
        labelColor = color.new(color.red, 0)
        label.new(exitBarIndex, exitPrice, text=labelText, style=labelStyle, color=labelColor, size=size.tiny)

    lastClosedTradeCount := currentClosedCount