Perpindahan purata bergerak dan turun naik dinamik menghentikan kehilangan strategi kuantitatif

SMA RSI ATR RISK-TO-REWARD RATIO TREND FOLLOWING
Tarikh penciptaan: 2025-04-02 11:08:39 Akhirnya diubah suai: 2025-04-02 11:08:39
Salin: 2 Bilangan klik: 323
2
fokus pada
319
Pengikut

Perpindahan purata bergerak dan turun naik dinamik menghentikan kehilangan strategi kuantitatif Perpindahan purata bergerak dan turun naik dinamik menghentikan kehilangan strategi kuantitatif

Gambaran keseluruhan

Strategi perdagangan kuantitatif ini adalah sistem komprehensif yang menggabungkan penyaringan rata-rata bergerak bersilang, penyaringan indikator yang agak kuat (RSI) dan mekanisme stop loss dinamik berdasarkan rentang sebenar rata-rata (ATR). Strategi ini digunakan terutamanya untuk menangkap trend jangka menengah dan panjang, sambil mengelakkan masuk ke dalam persekitaran pasaran yang terlalu banyak dibeli atau dijual melalui indikator RSI, dan menggunakan indikator ATR untuk menetapkan stop loss dinamik untuk menyesuaikan diri dengan perubahan dalam turun naik pasaran.

Prinsip Strategi

Logik teras strategi adalah berdasarkan komponen utama berikut:

  1. Sinyal silang purata bergerakStrategi menggunakan dua purata bergerak mudah ((SMA), iaitu purata jangka pendek 50 kitaran dan purata jangka panjang 200 kitaran. Apabila purata jangka pendek lebih rendah daripada purata jangka panjang dan nilai RSI lebih besar daripada 30, sistem akan mencetuskan beberapa isyarat.

  2. Mekanisme penapis RSIStrategi menggunakan penapis RSI 14 kitaran untuk penarikan masuk. Khususnya, penarikan lebih banyak hanya dibenarkan apabila nilai RSI melebihi 30, yang membantu mengelakkan penarikan buta di kawasan oversold yang mendalam. Walaupun mengekalkan kerangka keadaan shorting dalam kod, versi semasa memberi tumpuan kepada strategi penarikan lebih banyak.

  3. Kerosakan ATR dinamikStrategi: Menggunakan indikator ATR 14 kitaran untuk mengira paras berhenti bergerak. Ditetapkan sebagai harga masuk dikurangkan ((ATR nilai × kelipatan), di mana ATR kelipatan default 1.0. mekanisme berhenti bergerak ini dapat menyesuaikan diri dengan turun naik pasaran yang sebenarnya, memberikan ruang berhenti yang lebih longgar semasa turun naik tinggi dan kawalan risiko yang lebih ketat semasa turun naik rendah.

  4. Nisbah risiko-balasStrategi: Strategi mewujudkan tetapan stop loss berdasarkan RRR, dengan nilai lalai 1.5. Stop loss dikira sebagai harga masuk ditambah (harga masuk - harga stop loss) × RRR), memastikan bahawa potensi keuntungan untuk setiap dagangan adalah proporsi yang tepat dengan risiko yang diambil.

Kelebihan Strategik

  1. Pengesanan trend dan penapisanStrategi ini bukan sahaja menggunakan purata bergerak untuk merangkumi perubahan trend, tetapi juga menapisnya melalui indikator RSI, mengurangkan isyarat salah dan meningkatkan kualiti masuk.

  2. Pengurusan risiko dinamikMekanisme Hentian Berasaskan ATR adalah satu kelebihan strategi ini, ia mampu menyesuaikan jarak Hentian mengikut dinamik pasaran yang tidak menentu, mengelakkan masalah yang disebabkan oleh Hentian Tetap yang terlalu awal dalam persekitaran yang tidak menentu, dan mengekalkan kawalan risiko yang sesuai dalam tempoh yang tidak menentu.

  3. Risiko dan ganjaran yang lebih baikStrategi ini memastikan bahawa potensi keuntungan untuk setiap dagangan berbanding dengan risiko dengan menggunakan nisbah ganjaran risiko yang diramalkan, yang membantu pertumbuhan dana dalam jangka panjang, walaupun dalam keadaan yang tidak menguntungkan.

  4. Visualisasi transaksiStrategi ini merangkumi pemetaan dalam masa nyata mengenai kedudukan berhenti dan kedudukan berhenti, serta fungsi penanda perdagangan yang telah selesai, yang meningkatkan tahap penglihatan mengenai operasi strategi, memudahkan analisis dan pengoptimuman strategi.

  5. Pengurusan kewangan bersepaduStrategi: Secara lalai menggunakan peratusan daripada jumlah akaun untuk pengurusan kedudukan, kaedah ini lebih fleksibel daripada nombor tetap dan dapat menyesuaikan saiz perdagangan secara automatik dengan perubahan saiz akaun.

Risiko Strategik

  1. Risiko pembalikan arah aliranWalaupun strategi menggunakan moving average untuk mengenal pasti trend, ia boleh menyebabkan kerugian yang lebih besar apabila pasaran tiba-tiba berbalik. Penyelesaian adalah dengan mempertimbangkan untuk memperkenalkan indikator jangka pendek yang lebih sensitif sebagai pengesahan tambahan, atau menyesuaikan nilai RSI untuk meningkatkan kepekaan terhadap perubahan.

  2. Kepekaan ParameterParameter utama strategi seperti kitaran SMA, nilai RSI, kelipatan ATR, dan lain-lain mempunyai kesan yang ketara terhadap prestasi. Persekitaran pasaran yang berbeza mungkin memerlukan tetapan parameter yang berbeza, oleh itu perlu melakukan pengulangan sejarah yang mencukupi untuk mencari kombinasi parameter yang optimum.

  3. Kekurangan pasaran unilateral: Versi semasa terutamanya memberi tumpuan kepada melakukan pelbagai strategi, yang mungkin tidak berfungsi dengan baik dalam pasaran yang terus menurun. Penyelesaian adalah mengaktifkan syarat shorting dalam kod, untuk mencapai keupayaan perdagangan dua hala.

  4. Risiko terlampau luasSemasa turun naik yang sangat tinggi, nilai ATR mungkin meningkat dengan ketara, menyebabkan jarak penutupan terlalu luas dan kerugian yang berpotensi meningkat. Anda boleh mempertimbangkan untuk menetapkan had atas kelipatan ATR, atau kombinasi penutupan jumlah tetap dengan penutupan ATR dinamik.

  5. Ketidakpastian frekuensi transaksiPenyelesaian adalah dengan mempertimbangkan untuk menambah isyarat perdagangan jangka pendek sebagai pelengkap, atau menggunakan penunjuk yang lebih pendek setelah trend utama ditubuhkan.

Arah pengoptimuman strategi

  1. Integrasi analisis pelbagai kerangka masaStrategi semasa hanya berfungsi pada satu bingkai masa, pertimbangan boleh dibuat untuk mengintegrasikan analisis pelbagai bingkai masa, misalnya menggunakan bingkai masa yang lebih tinggi untuk menentukan arah trend utama, dan kemudian mencari titik masuk pada bingkai masa yang lebih rendah untuk meningkatkan ketepatan masuk.

  2. Kesempurnaan Logik Kosong: Mengaktifkan dan mengoptimumkan logik shorting dalam strategi, membolehkan ia sama berkesan dalam pasaran turun. Ini mungkin memerlukan penyesuaian RSI threshold untuk shorting (jika RSI lebih besar daripada 70 untuk shorting), dan parameter yang berbeza untuk arah pasaran yang berbeza.

  3. Pengenalan penunjuk kuantitiPertimbangkan untuk mengintegrasikan penunjuk kuantiti dagangan ke dalam logik masuk dan hanya melaksanakan isyarat dagangan jika jumlah dagangan disahkan, yang dapat membantu mengurangkan kerugian akibat penembusan palsu.

  4. Optimumkan strategi penangguhanStrategi semasa menggunakan pulangan risiko tetap daripada menetapkan stop loss, dan pertimbangkan untuk mengunci sebahagian keuntungan atau mengesan stop loss untuk mendapatkan lebih banyak keuntungan jika trend berterusan.

  5. Menambah penapis masa transaksiUntuk pasaran yang mempunyai ciri-ciri masa yang jelas, penapis masa boleh ditambah untuk mengelakkan dagangan pada masa turun naik atau ketidakpastian yang tinggi.

  6. Mekanisme penyesuaian parameterMekanisme penyesuaian penyesuaian parameter berdasarkan kadar turun naik sejarah atau ciri-ciri pasaran lain, membolehkan strategi mengoptimumkan parameter secara automatik mengikut perubahan keadaan pasaran.

ringkaskan

Strategi kuantitatif ini, yang berasaskan crossover rata-rata bergerak, penapisan RSI, dan stop loss dinamik ATR, menyediakan rangka kerja perdagangan yang seimbang, yang sangat sesuai untuk perdagangan trend jangka menengah dan panjang. Kelebihan utamanya adalah menggabungkan analisis penunjuk teknikal dengan pengurusan risiko dinamik dengan lancar, yang dapat menangkap perubahan trend dan menyesuaikan peluang risiko mengikut turun naik pasaran.

Walaupun terdapat kekangan dalam sensitiviti parameter dan perdagangan satu arah, masalah-masalah ini dapat diperbaiki dengan baik melalui arah pengoptimuman yang disyorkan, seperti analisis jangka masa berbilang, pengoptimuman logik penyingkiran, pengenalan pengesahan kuantiti. Khususnya, menggabungkan mekanisme penyesuaian parameter dinamik dengan strategi penangguhan yang lebih kompleks, diharapkan dapat meningkatkan lagi kestabilan dan keuntungan strategi.

Bagi peniaga yang mencari perdagangan trend jangka menengah dan jangka panjang, tetapi memberi perhatian kepada kawalan risiko, strategi ini memberikan titik permulaan yang kukuh dan berpotensi menjadi sistem perdagangan yang cekap dengan penyesuaian peribadi dan pengoptimuman berterusan.

Kod 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