Strategi Referensi Tren Naik Penembusan Kuantitatif

Penulis:ChaoZhang, Tanggal: 2024-02-21 10:58:01
Tag:

img

Gambaran umum

Strategi ini adalah strategi holding jangka panjang yang didasarkan pada menentukan arah tren dengan garis rata-rata bergerak sederhana dan membentuk sinyal terobosan dengan garis resistensi dan dukungan. Dengan menghitung titik harga Pivot High dan Pivot Low, memetakan garis resistensi dan dukungan, pergi panjang ketika harga menembus garis resistensi, dan menutup posisi ketika harga menembus garis dukungan. Strategi ini cocok untuk saham dengan tren yang jelas dan dapat memperoleh rasio risiko-manfaat yang baik.

Prinsip Strategi

  1. Menghitung garis rata-rata bergerak sederhana 20 hari sebagai garis dasar untuk menentukan tren
  2. Menghitung titik Pivot High dan Pivot Low berdasarkan parameter input pengguna
  3. Menggambar garis resistensi dan dukungan berdasarkan titik Pivot High dan Pivot Low
  4. Pergi panjang ketika harga penutupan lebih tinggi dari garis resistensi
  5. Tutup posisi ketika garis dukungan melintasi di bawah garis resistensi

Strategi ini menggunakan rata-rata bergerak sederhana untuk menentukan arah tren keseluruhan, dan kemudian menggunakan terobosan titik kunci untuk menghasilkan sinyal perdagangan, yang merupakan strategi breakout khas.

Analisis Keuntungan

  1. Strategi ini memiliki peluang yang cukup dan cocok untuk saham volatilitas tinggi, sehingga mudah menangkap tren
  2. Pengendalian risiko yang baik untuk posisi panjang, rasio risiko-manfaat tinggi
  3. Gunakan sinyal terobosan untuk menghindari risiko terobosan palsu
  4. Parameter yang dapat disesuaikan, kemampuan beradaptasi yang tinggi

Analisis Risiko

  1. Bergantung pada optimasi parameter, parameter yang tidak tepat akan meningkatkan kemungkinan pecah palsu
  2. Penundaan sinyal terobosan, mungkin kehilangan beberapa kesempatan
  3. Mudah dihentikan di pasar yang tidak stabil
  4. Kegagalan untuk menyesuaikan garis dukungan tepat waktu dapat menyebabkan kerugian

Risiko dapat dikurangi dengan mengoptimalkan parameter melalui perdagangan langsung, dan menggabungkan strategi stop loss/take profit.

Arahan Optimasi

  1. Mengoptimalkan parameter periode rata-rata bergerak
  2. Mengoptimalkan parameter resistance dan support line
  3. Tambahkan strategi stop loss/take profit
  4. Meningkatkan mekanisme konfirmasi terobosan
  5. Sinyal filter dengan volume perdagangan dan indikator lainnya

Ringkasan

Secara keseluruhan, strategi ini adalah strategi breakout khas yang bergantung pada optimasi parameter dan likuiditas, cocok untuk pedagang tren. Sebagai kerangka referensi, dapat diperluas sesuai dengan kebutuhan aktual dengan menambahkan mekanisme seperti stop loss / take profit, penyaringan sinyal untuk mengurangi risiko dan meningkatkan stabilitas.


/*backtest
start: 2023-02-14 00:00:00
end: 2024-02-20 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/
// © CheatCode1

//@version=5
strategy("Quantitative Trend Strategy- Uptrend long", 'Steady Uptrend Strategy', overlay=true, initial_capital = 1500, default_qty_value = 100, commission_type = strategy.commission.percent, commission_value = 0.01, default_qty_type = strategy.percent_of_equity)


length = input.int(20, minval=1)
src = input(close, title="Source")
basis = ta.sma(src, length)
offset = input.int(0, "Offset", minval = -500, maxval = 500)
plot(basis, "Basis", color=#FF6D00, offset = offset)

inp1 = input.int(46, 'LookbackLeft')
inp2 = input.int(32, 'LookbackRight')

l1 = ta.pivothigh(close, inp1, inp2)
S1 = ta.pivotlow(close, inp1, inp2)

// plot(l1, 'Pivothigh', color.red, 1)
// // plot(S1, 'Pivot Low', color.red)

l1V = ta.valuewhen(l1, close, 0)
S1V = ta.valuewhen(S1, close, 0)

Plotl1 = not na(l1) ? l1V : na
PlotS1 = not na(S1) ? S1V : na

plot(Plotl1, 'Resistance', color.green, 1, plot.style_stepline, true)
plot(PlotS1, 'Support', color.red, 1, plot.style_stepline, true)

Priceforlong = close > l1V ? true : na
Priceforshort = close < S1V ? true : na

plotshape(Priceforlong ? high : na, 'p', shape.arrowup, location.abovebar, color.green, size = size.small)
plotshape(Priceforshort ? low : na, 's', shape.arrowdown, location.belowbar, color.red, size = size.small)

vol = volume
volma = ta.sma(vol, 20)

Plotl1C = ta.valuewhen(na(Plotl1), l1V, 0)
PlotS1C = ta.valuewhen(na(PlotS1), S1V, 0)
//Strategy Execution
volc = volume > volma 

Lc1 = Priceforlong 

Sc1 = Priceforshort

sL = Plotl1 < PlotS1 ? close : na
sS = PlotS1 > Plotl1 ? close : na


if Lc1 
    strategy.entry('Long', strategy.long)
// if Sc1 and C2
//     strategy.entry('Short', strategy.short)

if Priceforshort
    strategy.cancel('Long')
if Priceforlong   
    strategy.cancel('Short')


// Stp1 = ta.crossover(k, d)
// Ltp1 = ta.crossunder(k, d)
// Ltp = d > 70  ? Ltp1 : na
// Stp = d < 30  ? Stp1 : na


if strategy.openprofit >= 0 and sL
    strategy.close('Long')
if strategy.openprofit >= 0 and sS
    strategy.close('Short')
takeP = input.float(2, title='Take Profit') / 100
stopL = input.float(1.75, title='Stop Loss') / 100


// // Pre Directionality

Stop_L = strategy.position_avg_price * (1 - stopL)

Stop_S = strategy.position_avg_price * (1 + stopL)

Take_S= strategy.position_avg_price * (1 - takeP)

Take_L = strategy.position_avg_price * (1 + takeP)
     
// sL = Plotl1 < PlotS1 ? close : na
// sS = PlotS1 < Plotl1 ? close : na
     
// //Post Excecution
if strategy.position_size > 0 and not (Lc1)
    strategy.exit("Close Long", stop = Stop_L, limit = Take_L)

if strategy.position_size < 0 and not (Sc1)
    strategy.exit("Close Short", stop = Stop_S, limit = Take_S)

Lebih banyak