Strategi pengoptimuman nisbah pulangan risiko berdasarkan persilangan purata bergerak

MA SMA RR SL TP
Tarikh penciptaan: 2024-12-27 15:46:05 Akhirnya diubah suai: 2024-12-27 15:46:05
Salin: 0 Bilangan klik: 436
1
fokus pada
1617
Pengikut

Strategi pengoptimuman nisbah pulangan risiko berdasarkan persilangan purata bergerak

Gambaran keseluruhan

Strategi ini ialah sistem dagangan automatik berdasarkan isyarat persilangan purata bergerak, yang mengoptimumkan prestasi dagangan dengan menetapkan nisbah pulangan risiko tetap. Strategi ini menggunakan persilangan purata bergerak pantas (MA Cepat) dan purata bergerak perlahan (MA Perlahan) untuk menentukan arah aliran pasaran, dan menggabungkan titik henti kerugian pratetap dan sasaran keuntungan untuk menguruskan risiko kedudukan.

Prinsip Strategi

Logik teras strategi adalah berdasarkan isyarat silang yang dijana oleh dua purata bergerak bagi tempoh berbeza (10 tempoh dan 30 tempoh). Apabila garisan pantas melintasi garisan perlahan, sistem menghasilkan isyarat panjang apabila garisan pantas melintasi garisan perlahan, sistem menghasilkan isyarat pendek. Selepas setiap kedudukan dibuka, sistem akan mengira kedudukan henti rugi secara automatik berdasarkan nisbah henti rugi 2% yang telah ditetapkan, dan menetapkan sasaran keuntungan mengikut nisbah pulangan risiko 2.5 kali ganda. Pendekatan ini memastikan bahawa setiap perdagangan mempunyai profil pulangan risiko tetap.

Kelebihan Strategik

  1. Sistematisasi pengurusan risiko: pengurusan dana piawai dicapai melalui nisbah henti rugi tetap dan nisbah pulangan risiko
  2. Mekanisme perdagangan objektif: sistem isyarat berdasarkan persilangan purata bergerak, mengelakkan berat sebelah yang disebabkan oleh pertimbangan subjektif
  3. Kebolehlarasan parameter yang kuat: parameter utama seperti nisbah stop loss, nisbah pulangan risiko, dll. boleh dilaraskan secara fleksibel mengikut keadaan pasaran
  4. Automasi pelaksanaan tahap tinggi: automasi dicapai daripada penjanaan isyarat kepada pengurusan kedudukan, mengurangkan ralat operasi manusia

Risiko Strategik

  1. Risiko pasaran tidak menentu: Dalam pasaran sisi, isyarat pindah silang purata bergerak mungkin menghasilkan pecahan palsu yang kerap
  2. Risiko gelinciran: Dalam keadaan pasaran yang pantas, harga transaksi sebenar mungkin menyimpang dengan ketara daripada harga isyarat.
  3. Risiko henti rugi tetap: nisbah henti rugi tunggal mungkin tidak sesuai untuk semua keadaan pasaran
  4. Kos komisen: Perdagangan yang kerap boleh menyebabkan kos transaksi yang lebih tinggi

Arah pengoptimuman strategi

  1. Memperkenalkan penapis arah aliran: Anda boleh menambah purata bergerak tempoh lebih lama atau penunjuk arah aliran lain untuk menapis isyarat palsu
  2. Mekanisme henti rugi dinamik: laraskan nisbah henti rugi secara dinamik mengikut turun naik pasaran untuk meningkatkan kebolehsesuaian strategi
  3. Tambah pengesahan volum: Gabungkan penunjuk volum untuk mengesahkan kesahihan pecahan
  4. Optimumkan masa pembukaan: Anda boleh menunggu panggilan balik selepas purata bergerak melepasi sebelum memasuki pasaran, yang meningkatkan kecekapan harga kemasukan

ringkaskan

Strategi ini membina sistem perdagangan yang lengkap dengan menggabungkan kaedah analisis teknikal klasik dengan konsep pengurusan risiko moden. Walaupun terdapat batasan tertentu, melalui pengoptimuman dan penambahbaikan berterusan, strategi ini dijangka dapat mengekalkan prestasi yang stabil dalam persekitaran pasaran yang berbeza. Kuncinya adalah untuk melaraskan tetapan parameter secara berterusan berdasarkan hasil dagangan sebenar dan mencari konfigurasi yang paling sesuai dengan persekitaran pasaran semasa.

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

//@version=5
strategy("SOL 15m 2.5 R:R Strategy", overlay=true, margin_long=100, margin_short=100, initial_capital=10000, commission_type=strategy.commission.percent, commission_value=0.1)

//---------------------------------------------------
// User Inputs
//---------------------------------------------------
// sym = input.symbol("swap", "Symbol")
timeframe = input.timeframe("15", "Timeframe")

fastLength  = input.int(10, "Fast MA Length")
slowLength  = input.int(30, "Slow MA Length")

stopLossPerc = input.float(2.0, "Stop Loss %", step=0.1) // This is an example; adjust to achieve ~45% win rate
RR           = input.float(2.5, "Risk to Reward Ratio", step=0.1)

//---------------------------------------------------
// Data Sources
//---------------------------------------------------
price = request.security("swap", timeframe, close)

// Compute moving averages
fastMA = ta.sma(price, fastLength)
slowMA = ta.sma(price, slowLength)

// Entry Conditions
longCondition  = ta.crossover(fastMA, slowMA)
shortCondition = ta.crossunder(fastMA, slowMA)

//---------------------------------------------------
// Stop Loss and Take Profit Calculation
//---------------------------------------------------
var entryPrice = 0.0

if (strategy.position_size == 0) // not in a position
    if longCondition
        // Long entry
        entryPrice := price
        strategy.entry("Long", strategy.long)

    if shortCondition
        // Short entry
        entryPrice := price
        strategy.entry("Short", strategy.short)

if strategy.position_size > 0
    // We are in a long position
    if strategy.position_avg_price > 0 and strategy.position_size > 0
        longStop  = strategy.position_avg_price * (1 - stopLossPerc/100)
        longTarget = strategy.position_avg_price * (1 + (stopLossPerc/100)*RR)
        strategy.exit("Long Exit", "Long", stop=longStop, limit=longTarget)

if strategy.position_size < 0
    // We are in a short position
    if strategy.position_avg_price > 0 and strategy.position_size < 0
        shortStop  = strategy.position_avg_price * (1 + stopLossPerc/100)
        shortTarget = strategy.position_avg_price * (1 - (stopLossPerc/100)*RR)
        strategy.exit("Short Exit", "Short", stop=shortStop, limit=shortTarget)

//---------------------------------------------------
// Plotting
//---------------------------------------------------
plot(fastMA, color=color.new(color.teal, 0), title="Fast MA")
plot(slowMA, color=color.new(color.orange, 0), title="Slow MA")