Beli rendah dan jual strategi dagangan kuantitatif jangka pendek tinggi berdasarkan purata bergerak RSI


Tarikh penciptaan: 2023-12-01 16:59:26 Akhirnya diubah suai: 2023-12-01 16:59:26
Salin: 0 Bilangan klik: 703
1
fokus pada
1619
Pengikut

Beli rendah dan jual strategi dagangan kuantitatif jangka pendek tinggi berdasarkan purata bergerak RSI

Gambaran keseluruhan

Strategi ini menentukan titik beli dan jual melalui persilangan RSI dengan garisan rata-ratanya, dan merupakan strategi perdagangan garis pendek. Strategi ini akan membeli apabila RSI berada di bawah garisan rata-ratanya, dan menjual apabila ia berada di atas garisan rata-ratanya, dan merupakan strategi jual beli tinggi yang tipikal.

Prinsip Strategi

  1. Hitung nilai RSI dengan 40 garis K
  2. Mengira garis purata MA untuk RSI, dengan panjang kitaran 10 K
  3. Sinyal beli dihasilkan apabila RSI berada di bawah garis rata-rata dengan faktor ((1 - selang jual / 100)
  4. Sinyal jual dihasilkan apabila RSI lebih tinggi daripada garis rata-rata dengan faktor ((1 + rantaian jual beli / 100)
  5. Jarak antara kawasan membeli dan menjual secara lalai 5, menunjukkan bahawa ia menghasilkan isyarat apabila ia berada di jarak negatif 5% dari garis purata
  6. Pertimbangan kedudukan rata adalah apabila RSI lebih tinggi daripada garis rata-rata dan lebih tinggi daripada paras 50

Analisis kelebihan

Ini adalah strategi trend reversal tipikal yang menggunakan ciri RSI untuk menentukan masa untuk membeli dan menjual. Strategi ini mempunyai beberapa kelebihan:

  1. Menggunakan RSI untuk menilai struktur pasaran, indikator itu sendiri lebih dipercayai
  2. Penapisan linear mengelakkan transaksi yang tidak perlu dan meningkatkan kestabilan
  3. Parameter jarak jual beli dapat menyesuaikan frekuensi dagangan
  4. Kodnya mudah difahami, logiknya jelas.

Secara keseluruhannya, ini adalah strategi perdagangan garis pendek yang mudah dan praktikal.

Analisis risiko

Strategi ini juga mempunyai risiko yang perlu diperhatikan:

  1. Kemungkinan RSI memberi isyarat yang salah, perlu memberi perhatian kepada bentuk kurva indikator
  2. Jarak yang tidak betul antara tempat membeli-belah dan tempat menjual boleh menyebabkan terlalu banyak transaksi atau kehilangan peluang.
  3. Frekuensi dagangan yang tinggi, kesan kos dagangan perlu dipertimbangkan
  4. Berasaskan pada satu-satunya indikator, mudah terdedah kepada ketidaksamaan pasaran

Risiko ini dapat dikurangkan dengan mengoptimumkan parameter, menambah syarat penapisan dan sebagainya.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dari segi berikut:

  1. Tambah lebih banyak penapis seperti jumlah dagangan untuk memastikan isyarat hanya dihasilkan pada titik perubahan trend
  2. Menyertai strategi stop loss untuk mengawal kerugian tunggal
  3. Mengoptimumkan Jarak Perdagangan, Mengimbangi Frekuensi Perdagangan dan Kadar Keuntungan
  4. Menggunakan algoritma pembelajaran mesin untuk mencari kombinasi parameter terbaik secara automatik
  5. Menambah model agregat untuk mengintegrasikan hasil daripada pelbagai substrategi

Ia boleh meningkatkan prestasi strategi dengan cara seperti kombinasi pelbagai indikator, pengurusan hentian, dan pengoptimuman parameter.

ringkaskan

Strategi ini secara keseluruhannya adalah strategi perdagangan garis pendek yang sangat tipikal dan praktikal. Ia menggunakan indikator RSI untuk menilai masa beli dan jual, disokong dengan penapisan rata. Logik strategi mudah dan jelas, parameter menyesuaikan fleksibel, mudah dilaksanakan.

Kod sumber strategi
/*backtest
start: 2022-11-24 00:00:00
end: 2023-11-30 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © I11L

//@version=5
strategy("I11L - Meanreverter 4h", overlay=false, pyramiding=3, default_qty_value=10000, initial_capital=10000, default_qty_type=strategy.cash,process_orders_on_close=false, calc_on_every_tick=false)
 
frequency = input.int(10)
rsiFrequency = input.int(40)
buyZoneDistance = input.int(5)
avgDownATRSum = input.int(3)
useAbsoluteRSIBarrier = input.bool(true)
barrierLevel = 50//input.int(50)

momentumRSI = ta.rsi(close,rsiFrequency)
momentumRSI_slow = ta.sma(momentumRSI,frequency)
 
isBuy = momentumRSI < momentumRSI_slow*(1-buyZoneDistance/100) and (strategy.position_avg_price - math.sum(ta.atr(20),avgDownATRSum)*strategy.opentrades > close or strategy.opentrades == 0 ) //and (momentumRSI < barrierLevel or not(useAbsoluteRSIBarrier))
isShort = momentumRSI > momentumRSI_slow*(1+buyZoneDistance/100) and (strategy.position_avg_price - math.sum(ta.atr(20),avgDownATRSum)*strategy.opentrades > close or strategy.opentrades == 0 ) and (momentumRSI > barrierLevel or not(useAbsoluteRSIBarrier))
momentumRSISoftClose = (momentumRSI > momentumRSI_slow) and (momentumRSI > barrierLevel or not(useAbsoluteRSIBarrier))

isClose = momentumRSISoftClose

plot(momentumRSI,color=isClose ? color.red :  momentumRSI < momentumRSI_slow*(1-buyZoneDistance/100) ? color.green : color.white)
plot(momentumRSI_slow,color=color.gray)
plot(barrierLevel,color=useAbsoluteRSIBarrier ? color.white : color.rgb(0,0,0,0))
plot(momentumRSI_slow*(1-buyZoneDistance/100),color=color.gray)
plot(momentumRSI_slow*(1+buyZoneDistance/100),color=color.gray)
plot(momentumRSI_slow*(1+(buyZoneDistance*2)/100),color=color.gray)

// plot(strategy.wintrades - strategy.losstrades)

 
 
if(isBuy)
    strategy.entry("Buy",strategy.long, comment="#"+str.tostring(strategy.opentrades+1))

// if(isShort)
//     strategy.entry("Sell",strategy.short, comment="#"+str.tostring(strategy.opentrades+1))

if(isClose)
    strategy.exit("Close",limit=close)