Strategi mengikut arah aliran berdasarkan purata bergerak dan turun naik


Tarikh penciptaan: 2023-09-21 21:32:40 Akhirnya diubah suai: 2023-09-21 21:32:40
Salin: 0 Bilangan klik: 658
1
fokus pada
1617
Pengikut

Gambaran keseluruhan

Strategi ini menggunakan pelbagai indikator seperti garis rata-rata, jalur Brin dan tempoh masa untuk mengenal pasti permulaan dan akhir trend harga, untuk operasi pengesanan trend. Strategi ini disahkan melalui pelbagai indikator, yang dapat menyaring penembusan palsu dengan berkesan.

Prinsip Strategi

Strategi ini merangkumi langkah-langkah penting berikut:

  1. Hitung garis rata-rata pantas dan garis rata-rata perlahan. Hitung garis rata-rata menggunakan VWAP dan bukannya harga penutupan, yang lebih tepat mencerminkan harga dagangan sebenar.

  2. Hitung nilai purata garis rata-rata dan lukiskan Burin Band berdasarkan nilai purata tersebut. Burin Band dapat menentukan sama ada kadar turun naik harga meningkat atau tidak dan memberi isyarat untuk memulakan trend.

  3. Memperkenalkan penunjuk tempoh masa (TSV) untuk melihat sama ada jumlah transaksi berkembang dan mengesahkan trend.

  4. Apabila laju rata-rata melintasi laju rata-rata pada garis laju, harga lebih tinggi daripada Brin di atas landasan dan TSV lebih besar daripada 0, menghasilkan isyarat beli; sebaliknya muncul isyarat jual.

  5. Menggunakan pengunduran garisan rata-rata dan tren bawah Brin sebagai isyarat hentikan kerugian.

Kelebihan Strategik

  • Menggunakan pelbagai penunjuk untuk mengesahkan, menyaring penembusan palsu, mengenal pasti trend bermula

  • Kaedah pengiraan garis rata-rata lebih tepat mencerminkan harga transaksi sebenar

  • Kewujudan trend dalam kombinasi indikator kadar turun naik

  • Peningkatan Indeks Jumlah Dagangan, Pengesahan Trend

  • Menetapkan standard yang munasabah untuk halangan dan penangguhan yang dapat mengawal risiko

  • Parameter boleh dikonfigurasi dan boleh disesuaikan dengan keadaan optimum

Risiko Strategik

  • Penghakiman gabungan pelbagai indikator, terdapat masalah besar dalam pengoptimuman parameter

  • Masalah ketinggalan pada kedua-dua garis rata-rata dan jalur Brin, yang mungkin menyebabkan kemusnahan yang tidak mencukupi

  • Penunjuk kuantiti tempoh masa sensitif kepada tetapan parameter, memerlukan penyesuaian untuk pasaran yang berbeza

  • Dalam pasaran, terdapat kemungkinan untuk menghasilkan lebih banyak isyarat palsu

  • Tanpa mengambil kira kesan kos urus niaga, keuntungan dan kerugian sebenar akan lebih rendah daripada hasil pengkajian semula

Arah pengoptimuman strategi

  • Cuba mengoptimumkan set parameter secara automatik menggunakan kaedah pembelajaran mesin

  • Tetapkan Hentian Bergerak Dinamis atau Hentian Tracking untuk lebih baik mengunci keuntungan

  • Memperkenalkan penunjuk tenaga kuantitatif untuk mengelakkan perdagangan yang salah yang disebabkan oleh kuantiti

  • Menggabungkan teori gelombang untuk menilai masa awal, pertengahan dan akhir trend, parameter strategi penyesuaian dinamik

  • Mengambil kira kesan kos urus niaga sebenar dan menetapkan margin terhad untuk mengawal kos

ringkaskan

Strategi ini merangkumi pelbagai indikator yang memberikan keupayaan untuk mengenal pasti trend yang baik, yang dapat menentukan permulaan dan akhir trend yang sebenar. Kestabilan strategi dapat ditingkatkan lagi melalui pengoptimuman parameter, pengoptimuman hentian dan pengoptimuman penapis. Tetapi secara keseluruhan, sebagai strategi untuk mengesan trend, pengunduran dan kadar kerugian masih memerlukan risiko tertentu.

Kod 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)