Pembelian Arah Volatiliti Rendah dengan mengambil keuntungan dan hentikan kerugian

Penulis:ChaoZhang, Tarikh: 2023-12-18 12:00:07
Tag:

img

Ringkasan

Strategi ini dinamakan Low Volatility Directional Buy with Profit Taking and Stop Loss. Ia menggunakan crossover purata bergerak sebagai isyarat beli dan menggabungkan mengambil keuntungan dan menghentikan kerugian untuk mengunci keuntungan. Ia sesuai untuk syiling turun naik yang rendah.

Logika Strategi

Strategi ini menggunakan 3 purata bergerak dengan tempoh yang berbeza: 50-period, 100-period dan 200-period. Logik beli adalah: apabila MA 50-period melintasi MA 100-period dan MA 100-period melintasi MA 200-period, pergi panjang.

Ini menandakan penembusan dari julat turun naik yang rendah dan permulaan trend. kenaikan MA 50-period yang pesat mewakili penguatan momentum jangka pendek; MA 100-period juga muncul menunjukkan kekuatan jangka menengah yang menyertai untuk menstabilkan trend naik.

Selepas masuk, strategi menggunakan mengambil keuntungan dan menghentikan kerugian untuk mengunci keuntungan. mengambil keuntungan ditetapkan pada 8% daripada harga masuk. menghentikan kerugian ditetapkan pada 4% daripada harga masuk. dengan mengambil keuntungan yang lebih tinggi daripada kehilangan berhenti, ia memastikan strategi kekal menguntungkan secara keseluruhan.

Analisis Kelebihan

Kelebihan strategi ini:

  1. Mengambil peluang trend dengan tepat dari gangguan turun naik yang rendah.
  2. Logik yang mudah dan jelas dengan purata bergerak yang mudah dikira dan diuji.
  3. Pengaturan mengambil keuntungan dan menghentikan kerugian yang munasabah memastikan keuntungan yang stabil.
  4. Parameter yang boleh dikonfigurasikan yang fleksibel menjadikan pengoptimuman mudah.

Analisis Risiko

Terdapat juga beberapa risiko:

  1. Isyarat yang salah boleh menyebabkan kerugian.
  2. Sukar untuk menghentikan kerugian apabila pasaran berbalik.
  3. Pengaturan parameter mengambil keuntungan dan stop loss yang tidak betul menjejaskan keuntungan.

Penyelesaian:

  1. Tambah penunjuk lain untuk menapis isyarat dan memastikan kesahihan pecah.
  2. Memendekkan tempoh stop loss untuk mengurangkan kerugian daripada pembalikan.
  3. Uji nisbah mengambil keuntungan dan berhenti kerugian yang berbeza untuk mencari yang optimum.

Arahan pengoptimuman

Pengoptimuman boleh dibuat dalam bidang berikut:

  1. Uji tempoh purata bergerak yang berbeza untuk mencari kombinasi terbaik.
  2. Tambah jumlah dan lain-lain untuk mengesahkan penembusan trend.
  3. Sesuaikan secara dinamik peratusan mengambil keuntungan dan berhenti kerugian.
  4. Masukkan pembelajaran mesin dan lain-lain untuk meramalkan kadar kejayaan.
  5. Sesuaikan parameter berdasarkan keadaan pasaran dan syiling yang berbeza.

Ringkasnya, strategi ini mempunyai logik yang jelas secara keseluruhan, memperoleh keuntungan risiko rendah dengan mengkonfigurasi tempoh purata bergerak dan peratusan mengambil keuntungan / berhenti kerugian. Ia boleh digunakan dengan fleksibel dalam perdagangan kuantitatif. Pengoptimuman lanjut boleh dibuat di bidang seperti isyarat kemasukan dan kaedah hentian kerugian, digabungkan dengan penyesuaian parameter untuk mencapai hasil yang terbaik.


/*backtest
start: 2023-12-10 00:00:00
end: 2023-12-17 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(shorttitle='Low volatility Buy w/ TP & SL (by Coinrule)',title='Low volatility Buy w/ TP & SL', overlay=true, initial_capital = 1000, process_orders_on_close=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100)

//Backtest dates
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 10,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2019, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1970)

showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false       // create function "within window of time"

//MA inputs and calculations
movingaverage_fast = sma(close, input(50))
movingaverage_slow = sma(close, input(200))
movingaverage_normal= sma(close, input(100))



//Entry 
strategy.entry(id="long", long = true, when = movingaverage_slow > movingaverage_normal and movingaverage_fast > movingaverage_normal)

//Exit
longStopPrice  = strategy.position_avg_price * (1 - 0.04)
longTakeProfit = strategy.position_avg_price * (1 + 0.08)

strategy.close("long", when = close < longStopPrice or close > longTakeProfit and window())

//PLOT

plot(movingaverage_fast, color=color.orange, linewidth=2)
plot(movingaverage_slow, color=color.purple, linewidth=3)
plot(movingaverage_normal, color=color.blue, linewidth=2)


Lebih lanjut