Strategi mengikuti tren berdasarkan rata-rata pergerakan dan volatilitas


Tanggal Pembuatan: 2023-09-21 21:32:40 Akhirnya memodifikasi: 2023-09-21 21:32:40
menyalin: 0 Jumlah klik: 658
1
fokus pada
1617
Pengikut

Ringkasan

Strategi ini menggunakan berbagai indikator, seperti garis rata-rata, pita Brin, dan jumlah periode waktu, untuk mengidentifikasi awal dan akhir tren harga, untuk melakukan operasi pelacakan tren. Strategi ini dikonfirmasi melalui berbagai indikator, dan dapat secara efektif memfilter terobosan palsu.

Prinsip Strategi

Strategi ini mencakup langkah-langkah penting berikut:

  1. Perhitungan rata-rata cepat dan rata-rata lambat. Perhitungan rata-rata menggunakan VWAP bukan harga penutupan, yang lebih akurat mencerminkan harga transaksi yang sebenarnya.

  2. Perhitungan rata-rata garis rata-rata, dan berdasarkan rata-rata ini untuk memetakan Brin band. Brin band dapat menentukan apakah harga berfluktuasi diperluas, dan memberi tahu tren dimulai.

  3. Menggunakan indikator TSV untuk melihat apakah volume transaksi meningkat, dan mengkonfirmasi adanya tren.

  4. Ketika kecepatan rata-rata cepat melewati kecepatan rata-rata lambat, harga lebih tinggi dari Brin di atas rel dan TSV lebih besar dari 0, menghasilkan sinyal beli; sebaliknya muncul sinyal jual.

  5. Menggunakan mundurnya garis rata-rata dan tren bawah Brin sebagai sinyal stop loss.

Keunggulan Strategis

  • Menggunakan berbagai indikator untuk mengkonfirmasi, dapat secara efektif memfilter terobosan palsu, dan mengidentifikasi awal tren

  • Metode perhitungan garis rata-rata lebih akurat mencerminkan harga transaksi yang sebenarnya

  • Ada atau tidaknya tren dalam kombinasi dengan indikator volatilitas

  • Meningkatkan Indeks Volume Transaksi, Mengkonfirmasi Perkembangan Tren

  • Menetapkan standar stop loss dan stop loss yang masuk akal untuk mengendalikan risiko

  • Parameter yang dapat dikonfigurasi, dapat disesuaikan dengan kondisi optimal

Risiko Strategis

  • Pertimbangan kombinasi multi-indikator, ada masalah besar dalam pengoptimalan parameter

  • Garis rata-rata dan pita Brin mengalami lag yang dapat menyebabkan stop loss yang tidak tepat waktu.

  • Indikator waktu rentang sensitif terhadap pengaturan parameter, perlu disesuaikan dengan pasar yang berbeda

  • Dalam laporan pasar, ada kemungkinan untuk menghasilkan lebih banyak sinyal palsu

  • Tidak mempertimbangkan dampak biaya transaksi, keuntungan dan kerugian sebenarnya akan lebih rendah dari hasil penghitungan ulang

Arah optimasi strategi

  • Mencoba mengoptimalkan kombinasi parameter secara otomatis dengan metode pembelajaran mesin

  • Tetapkan Stop Loss Bergerak Secara Dinamis atau Tracking Stop Loss untuk Lebih Baik Mengunci Keuntungan

  • Memperkenalkan indikator energi volume transaksi untuk menghindari kesalahan transaksi yang dapat menyebabkan volume menyimpang

  • Kombinasi teori gelombang, dinilai saat ini berada di awal, tengah dan akhir dari tren, parameter strategi penyesuaian dinamis

  • Mempertimbangkan dampak biaya transaksi yang sebenarnya, dan mengatur margin stop-loss minimum untuk mengontrol efisiensi biaya

Meringkaskan

Strategi ini secara komprehensif mempertimbangkan berbagai indikator yang memberikan kemampuan identifikasi tren yang baik, yang dapat secara efektif menilai awal dan akhir tren yang sebenarnya. Stabilitas strategi dapat ditingkatkan lebih lanjut melalui pengoptimalan parameter, pengoptimalan stop loss, dan pengoptimalan filter. Tetapi secara keseluruhan, sebagai strategi pelacakan tren, pengunduran dan persentase kerugian masih memerlukan risiko tertentu.

Kode Sumber Strategi
/*backtest
start: 2022-09-14 00:00:00
end: 2023-09-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=4

// Credits

// "Vwap with period" code which used in this strategy to calculate the leadLine was written by "neolao" active on https://tr.tradingview.com/u/neolao/
// "TSV" code which used in this strategy was written by "liw0" active on https://www.tradingview.com/u/liw0. The code is corrected by "vitelot" December 2018.

strategy("HYE Trend Hunter [Strategy]", overlay = true, initial_capital = 1000, default_qty_value = 100, default_qty_type = strategy.percent_of_equity, commission_value = 0.025, pyramiding = 0)
  
// Strategy inputs 

slowtenkansenPeriod = input(9, minval=1, title="Slow Tenkan Sen VWAP Line Length", group = "Tenkansen / Kijunsen")
slowkijunsenPeriod = input(26, minval=1, title="Slow Kijun Sen VWAP Line Length", group = "Tenkansen / Kijunsen")
fasttenkansenPeriod = input(5, minval=1, title="Fast Tenkan Sen VWAP Line Length", group = "Tenkansen / Kijunsen")
fastkijunsenPeriod = input(13, minval=1, title="Fast Kijun Sen VWAP Line Length", group = "Tenkansen / Kijunsen")
BBlength = input(20, minval=1, title= "Bollinger Band Length", group = "Bollinger Bands")
BBmult = input(2.0, minval=0.001, maxval=50, title="Bollinger Band StdDev", group = "Bollinger Bands")
tsvlength  = input(13, minval=1, title="TSV Length", group = "Tıme Segmented Volume")
tsvemaperiod = input(7, minval=1, title="TSV Ema Length", group = "Tıme Segmented Volume")

// Make input options that configure backtest date range  
 
startDate = input(title="Start Date", type=input.integer,
     defval=1, minval=1, maxval=31, group = "Backtest Range")
startMonth = input(title="Start Month", type=input.integer,
     defval=1, minval=1, maxval=12, group = "Backtest Range")
startYear = input(title="Start Year", type=input.integer,
     defval=2000, minval=1800, maxval=2100, group = "Backtest Range")

endDate = input(title="End Date", type=input.integer, 
     defval=31, minval=1, maxval=31, group = "Backtest Range")
endMonth = input(title="End Month", type=input.integer,
     defval=12, minval=1, maxval=12, group = "Backtest Range") 
endYear = input(title="End Year", type=input.integer,
     defval=2021, minval=1800, maxval=2100, group = "Backtest Range")
     
inDateRange =  true

//Slow Tenkan Sen Calculation

typicalPriceTS = (high + low + close) / 3
typicalPriceVolumeTS = typicalPriceTS * volume
cumulativeTypicalPriceVolumeTS = sum(typicalPriceVolumeTS, slowtenkansenPeriod)
cumulativeVolumeTS = sum(volume, slowtenkansenPeriod)
slowtenkansenvwapValue = cumulativeTypicalPriceVolumeTS / cumulativeVolumeTS

//Slow Kijun Sen Calculation

typicalPriceKS = (high + low + close) / 3
typicalPriceVolumeKS = typicalPriceKS * volume
cumulativeTypicalPriceVolumeKS = sum(typicalPriceVolumeKS, slowkijunsenPeriod)
cumulativeVolumeKS = sum(volume, slowkijunsenPeriod)
slowkijunsenvwapValue = cumulativeTypicalPriceVolumeKS / cumulativeVolumeKS

//Fast Tenkan Sen Calculation

typicalPriceTF = (high + low + close) / 3
typicalPriceVolumeTF = typicalPriceTF * volume
cumulativeTypicalPriceVolumeTF = sum(typicalPriceVolumeTF, fasttenkansenPeriod)
cumulativeVolumeTF = sum(volume, fasttenkansenPeriod)
fasttenkansenvwapValue = cumulativeTypicalPriceVolumeTF / cumulativeVolumeTF

//Fast Kijun Sen Calculation

typicalPriceKF = (high + low + close) / 3
typicalPriceVolumeKF = typicalPriceKS * volume
cumulativeTypicalPriceVolumeKF = sum(typicalPriceVolumeKF, fastkijunsenPeriod)
cumulativeVolumeKF = sum(volume, fastkijunsenPeriod)
fastkijunsenvwapValue = cumulativeTypicalPriceVolumeKF / cumulativeVolumeKF

//Slow LeadLine Calculation
 
lowesttenkansen_s = lowest(slowtenkansenvwapValue, slowtenkansenPeriod)
highesttenkansen_s = highest(slowtenkansenvwapValue, slowtenkansenPeriod)

lowestkijunsen_s = lowest(slowkijunsenvwapValue, slowkijunsenPeriod)
highestkijunsen_s = highest(slowkijunsenvwapValue, slowkijunsenPeriod)

slowtenkansen = avg(lowesttenkansen_s, highesttenkansen_s)
slowkijunsen = avg(lowestkijunsen_s, highestkijunsen_s)
slowleadLine = avg(slowtenkansen, slowkijunsen)

//Fast LeadLine Calculation
 
lowesttenkansen_f = lowest(fasttenkansenvwapValue, fasttenkansenPeriod)
highesttenkansen_f = highest(fasttenkansenvwapValue, fasttenkansenPeriod)

lowestkijunsen_f = lowest(fastkijunsenvwapValue, fastkijunsenPeriod)
highestkijunsen_f = highest(fastkijunsenvwapValue, fastkijunsenPeriod)

fasttenkansen = avg(lowesttenkansen_f, highesttenkansen_f)
fastkijunsen = avg(lowestkijunsen_f, highestkijunsen_f)
fastleadLine = avg(fasttenkansen, fastkijunsen)

// BBleadLine Calculation

BBleadLine = avg(fastleadLine, slowleadLine)

// Bollinger Band Calculation
 
basis = sma(BBleadLine, BBlength)
dev = BBmult * stdev(BBleadLine, BBlength)
upper = basis + dev
lower = basis - dev

// TSV Calculation

tsv = sum(close>close[1]?volume*(close-close[1]):close<close[1]?volume*(close-close[1]):0,tsvlength)
tsvema = ema(tsv, tsvemaperiod)

// Rules for Entry & Exit  

if(fastleadLine > fastleadLine[1] and slowleadLine > slowleadLine[1] and tsv > 0 and tsv > tsvema and close > upper and inDateRange)
    strategy.entry("BUY", strategy.long)
 
if(fastleadLine < fastleadLine[1] and slowleadLine < slowleadLine[1])
    strategy.close("BUY")

// Plots 

colorsettingS = input(title="Solid Color Slow Leadline", defval=false, type=input.bool)
plot(slowleadLine, title = "Slow LeadLine", color = colorsettingS ? color.aqua : slowleadLine > slowleadLine[1] ? color.green : color.red, linewidth=3)

colorsettingF = input(title="Solid Color Fast Leadline", defval=false, type=input.bool)
plot(fastleadLine, title = "Fast LeadLine", color = colorsettingF ? color.orange : fastleadLine > fastleadLine[1] ? color.green : color.red, linewidth=3)

p1 = plot(upper, "Upper BB", color=#2962FF)
p2 = plot(lower, "Lower BB", color=#2962FF)
fill(p1, p2, title = "Background", color=color.blue)