Strategi mengikuti tren berdasarkan ATR dan indeks volatilitas


Tanggal Pembuatan: 2024-01-04 15:31:34 Akhirnya memodifikasi: 2024-01-04 15:31:34
menyalin: 1 Jumlah klik: 590
1
fokus pada
1621
Pengikut

Strategi mengikuti tren berdasarkan ATR dan indeks volatilitas

Ringkasan

Strategi ini menggunakan rata-rata real amplitude (ATR) dan indeks volatilitas (CHOP) sebagai indikator teknis utama untuk mengidentifikasi dan melacak tren. Ketika indeks menembus tren turun, kombinasi arah tren sebagai sinyal masuk; Ketika indeks kembali ke daerah pita, ambil posisi stop loss atau stop loss untuk keluar.

Prinsip Strategi

  1. ATR digunakan untuk menghitung ukuran kargo, membangun corong Ripple, dan menentukan arah tren harga.
  2. Menggunakan indikator CHOP untuk menentukan apakah pasar cocok untuk diperdagangkan, indikator ini menggabungkan harga tertinggi, harga terendah, dan ATR, yang menunjukkan bahwa pasar berfluktuasi ringan ketika berada di kisaran 38.2-61.8; jika tidak, pasar berfluktuasi besar dan tidak cocok untuk diperdagangkan.
  3. Ketika CHOP menembus ke bawah dari lintasan atas 61.8, harga masuk ke tren turun, dan jika EMA cepat jangka pendek juga menunjukkan harga memimpin, maka melakukan shorting; sebaliknya ketika CHOP menembus ke atas dari lintasan bawah 38.2 dan harga EMA jangka pendek naik, maka melakukan overtrading.
  4. Gunakan strategi stop loss stop loss atau stop loss ketika harga kembali ke area 38.2-61.8 CHOP.

Analisis Keunggulan Strategi

Strategi ini menggabungkan penilaian tren dan kontrol volatilitas untuk menangkap tren harga dan mengendalikan risiko, merupakan strategi pelacakan tren yang relatif stabil.

  1. Dengan menggunakan saluran Ripple yang dibangun oleh ATR, Anda dapat secara efektif melacak tren harga.
  2. Indikator CHOP menilai volatilitas pasar, menghindari kesalahan perdagangan dalam fluktuasi yang kuat.
  3. Dengan kombinasi EMA yang cepat untuk menentukan arah tren jangka pendek, menghindari operasi terbalik.
  4. Strategi Stop Loss mengendalikan kerugian tunggal.

Analisis risiko

Risiko utama dari strategi ini adalah:

  1. Dalam situasi getaran, saluran ATR dan indikator CHOP dapat menghasilkan sinyal yang salah. Parameter dapat disesuaikan dengan tepat untuk menghilangkan sinyal yang salah.
  2. Satu-satunya kombinasi indikator teknis tidak dapat sepenuhnya menghindari kerugian, dan intervensi manusia diperlukan untuk menentukan tren besar.
  3. Stop loss setting terlalu longgar, dan kerugian tunggal mungkin terlalu besar. Stop loss harus dikurangi sesuai.

Arah optimasi strategi

Strategi ini dapat dioptimalkan dalam beberapa hal:

  1. Menambahkan indikator lain untuk menilai sinyal, seperti bentuk K-line, jumlah transaksi, dan lain-lain, meningkatkan akurasi sinyal.
  2. Optimalkan parameter ATR dan CHOP agar lebih baik menangkap fluktuasi harga.
  3. Tetapkan posisi stop loss yang dinamis, sehingga stop loss lebih besar dan lebih cepat.
  4. Setelah menilai tren pada tingkat besar, perlu untuk melonggarkan stop loss agar lebih menguntungkan dalam tren.

Meringkaskan

Strategi ini mengintegrasikan indikator teknis yang umum digunakan, sederhana dan praktis. Dengan penyesuaian parameter yang dioptimalkan, dapat memperoleh efek pelacakan yang baik. Namun, masih perlu untuk menilai tren besar secara manual, tidak dapat sepenuhnya otomatis.

Kode Sumber Strategi
/*backtest
start: 2022-12-28 00:00:00
end: 2024-01-03 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/
// © sharatgbhat

//@version=4
strategy("Weis Chop Strategy", overlay=false, default_qty_type = strategy.percent_of_equity, default_qty_value = 10,max_lines_count = 500, max_labels_count = 500)
maxIdLossPcnt = input(1, "Max Intraday Loss(%)", type=input.float)
// strategy.risk.max_intraday_loss(maxIdLossPcnt, strategy.percent_of_equity)

method = input(defval="ATR", options=["ATR", "Traditional", "Part of Price"], title="Renko Assignment Method")
methodvalue = input(defval=14.0, type=input.float, minval=0, title="Value")
pricesource = input(defval="Close", options=["Close", "Open / Close", "High / Low"], title="Price Source")
useClose = pricesource == "Close"
useOpenClose = pricesource == "Open / Close" or useClose
useTrueRange = input(defval="Auto", options=["Always", "Auto", "Never"], title="Use True Range instead of Volume")
isOscillating = input(defval=false, type=input.bool, title="Oscillating")
normalize = input(defval=false, type=input.bool, title="Normalize")
vol = useTrueRange == "Always" or useTrueRange == "Auto" and na(volume) ? tr : volume
op = useClose ? close : open
hi = useOpenClose ? close >= op ? close : op : high
lo = useOpenClose ? close <= op ? close : op : low

if method == "ATR"
    methodvalue := atr(round(methodvalue))
if method == "Part of Price"
    methodvalue := close / methodvalue

currclose = float(na)
prevclose = nz(currclose[1])
prevhigh = prevclose + methodvalue
prevlow = prevclose - methodvalue
currclose := hi > prevhigh ? hi : lo < prevlow ? lo : prevclose

direction = int(na)
direction := currclose > prevclose ? 1 : currclose < prevclose ? -1 : nz(direction[1])
directionHasChanged = change(direction) != 0
directionIsUp = direction > 0
directionIsDown = direction < 0

barcount = 1
barcount := not directionHasChanged and normalize ? barcount[1] + barcount : barcount
vol := not directionHasChanged ? vol[1] + vol : vol
res = barcount > 1 ? vol / barcount : vol

plot(isOscillating and directionIsDown ? -res : res, style=plot.style_columns, color=directionIsUp ? color.green : color.red, transp=75, linewidth=3, title="Wave Volume")

length = input(14, minval=1)
ci = 100 * log10(sum(atr(1), length) / (highest(length) - lowest(length))) / log10(length)
offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500)
plot(ci, "CHOP", color=#2962FF, offset = offset)
band1 = hline(61.8, "Upper Band", color=#787B86, linestyle=hline.style_dashed)
band0 = hline(38.2, "Lower Band", color=#787B86, linestyle=hline.style_dashed)
fill(band1, band0, color = color.rgb(33, 150, 243, 90), title = "Background")

MomentumBull = close>ema(close,8)
MomentumBear = close<ema(close,8)
Tradecon = crossunder(ci,61.8)

if (MomentumBull and directionIsUp and Tradecon)
	strategy.entry("Buy", strategy.long)
if (MomentumBear and directionIsDown and Tradecon )
    strategy.entry("Sell", strategy.short)
    strategy.exit("exit","Buy",when=directionIsDown,qty_percent=100,profit=20,loss=10)
    strategy.exit("exit","Sell",when=directionIsUp,qty_percent=100,profit=20,loss=10)