Melalui Strategi Pecah

Penulis:ChaoZhang, Tarikh: 2023-10-12 16:47:55
Tag:

Ringkasan

Strategi crossover purata bergerak adalah strategi perdagangan kuantitatif yang sangat biasa. Ia menggunakan salib emas dan salib kematian purata bergerak untuk menentukan trend dan keuntungan. Apabila purata bergerak jangka pendek melintasi di atas purata bergerak jangka panjang, ia menandakan trend menaik, dan kedudukan panjang boleh diambil. Apabila purata bergerak jangka pendek melintasi di bawah purata bergerak jangka panjang, ia menandakan trend menurun, dan kedudukan pendek boleh diambil.

Logika Strategi

Strategi ini berdasarkan salib emas dan salib kematian purata bergerak untuk menentukan titik masuk dan keluar. Kod menggunakan dua parameter input booleanupOrDowndanlongOrShortuntuk menentukan panjang atau pendek;percentInputuntuk menetapkan kadar terendah perubahan harga;closePositionDaysuntuk menetapkan bilangan hari untuk memegang kedudukan.

Logik terasnya ialah: mengira peningkatan / penurunan hari ini berbanding semalam. Jika ia mencapai peratusan ambang input, isyarat perdagangan dicetuskan. Jika ia adalah isyarat panjang, apabila harga hari ini meningkat lebih daripada ambang berbanding semalam, pergi panjang. Jika ia adalah isyarat pendek, apabila harga hari ini menurun lebih daripada ambang berbanding semalam, pergi pendek.

Selepas pergi panjang/pendek, hari kemasukan dan 4 hari akan datang akan ditandakan dengan warna pada carta.

Kelebihan

  • Menggunakan persilangan purata bergerak untuk menentukan trend adalah kaedah yang matang dan boleh dipercayai
  • Logik strategi yang mudah dan jelas, mudah difahami dan dilaksanakan
  • Frekuensi boleh dikawal dengan menyesuaikan parameter
  • Mekanisme stop loss automatik mengawal risiko dengan berkesan

Risiko

  • Purata bergerak mempunyai kesan kelewatan, mungkin terlepas masa terbaik perubahan harga yang cepat
  • Perubahan harga yang ketara boleh berlaku dalam jangka pendek, menghasilkan isyarat yang tidak perlu
  • Tetapan parameter yang tidak sesuai boleh mempengaruhi prestasi strategi
  • Tidak dapat bertindak balas dengan berkesan terhadap kesan peristiwa yang tidak dijangka

Pengurusan Risiko:

  1. Mengoptimumkan parameter purata bergerak, tempoh yang lebih lama membantu menapis bunyi bising
  2. Meningkatkan peratusan ambang untuk mengurangkan perdagangan yang tidak perlu
  3. Uji tempoh penahan yang berbeza untuk mengawal kehilangan tunggal
  4. Gabungkan dengan penunjuk lain untuk mengesahkan isyarat

Arahan pengoptimuman

  • Pertimbangkan untuk menggunakan EMA, DMA bukannya SMA untuk menjadikannya lebih sensitif
  • Tambahkan mekanisme stop loss, contohnya stop loss apabila memecahkan purata
  • Tambah penunjuk teknikal lain seperti MACD, KDJ untuk gabungan, meningkatkan kadar kemenangan
  • Cuba kaedah pembelajaran mesin untuk mengoptimumkan parameter automatik
  • Mengoptimumkan masa masuk dan keluar, seperti keluar, dll.

Ringkasan

Strategi crossover purata bergerak adalah strategi perdagangan kuantitatif yang sangat mudah dan praktikal. Dengan menilai hubungan antara trend jangka pendek dan jangka panjang, ia mendapat keuntungan dari sifat trend harga aset. Strategi ini mudah dilaksanakan dengan logik yang jelas, dan membentuk asas banyak strategi perdagangan kuantitatif. Kita boleh mendapatkan prestasi yang lebih baik melalui penyesuaian parameter dan pengoptimuman. Tetapi kita juga perlu menguruskan risiko dan mengelakkan penyalahgunaan.


/*backtest
start: 2023-01-01 00:00:00
end: 2023-10-11 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//  Created by Leon Ross

strategy(title = "DaysAfterCertainPercentChangev1", shorttitle = "DACPCv1", overlay = true, 
  pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, 
  calc_on_every_tick=true, initial_capital=100000)
  
//Inputs
longOrShort = input(title="Long=Checked Short=Unchecked", type=bool, defval=true) //long=true, down=false
upOrDown = input(title="Direction of Today vs. Previous day: Up=Checked Down=Unchecked", type=bool, defval=true) //up=true, down=false: this is the direction of days vs previous day
percentInput = input(title="Percent", type=float, defval=4.5)
closePositionDays = input(title="How Many Days to Close Position", defval=4)

//Conditions
//percentUpValue = (close / close[1]) - 1
//percentUp = percentUpValue >= (percentInput/100.0)
//upConditions = percentUp
//percentDownValue = 1- (close / close[1])
//percentDown = percentDownValue >= (percentInput/100.0)
//downConditions = percentDown
upValue = (close / close[1]) - 1
downValue = 1 - (close / close[1])
allConditions = if(upOrDown)
    upValue >= (percentInput/100.0)
else
    downValue >= (percentInput/100.0)
    
//Plots
bgcolor(allConditions ? (upOrDown ? green : red) : na, transp=70)
bgcolor(allConditions ? silver : na, transp=70, offset=1)
bgcolor(allConditions ? silver : na, transp=70, offset=2)
bgcolor(allConditions ? silver : na, transp=70, offset=3)
bgcolor(allConditions ? silver : na, transp=70, offset=4)
//bgcolor(downConditions == 1 ? red : na, transp=70)
//bgcolor(downConditions == 1 ? silver : na, transp=70, offset=1)
//bgcolor(downConditions == 1 ? silver : na, transp=70, offset=2)
//bgcolor(downConditions == 1 ? silver : na, transp=70, offset=3)
//bgcolor(downConditions == 1 ? silver : na, transp=70, offset=4)

//Entires
if(longOrShort)
    strategy.entry(id = "Long", long = true, when = allConditions) 
else
    strategy.entry(id = "Short", long = false, when = allConditions)

//Exits
if (barssince(allConditions) == closePositionDays)
    if(longOrShort)
        strategy.close("Long")
    else
        strategy.close("Short")




Lebih lanjut