Strategi perdagangan kuantitatif berdasarkan penapis Voss dan penunjuk arah aliran


Tarikh penciptaan: 2023-09-19 16:59:10 Akhirnya diubah suai: 2023-09-19 16:59:10
Salin: 2 Bilangan klik: 900
1
fokus pada
1617
Pengikut

Gambaran keseluruhan

Strategi ini menggabungkan penggunaan penapis ramalan Voss dan penunjuk garisan trend seketika Ehlers untuk mengenal pasti titik perubahan berkala di pasaran, untuk mencapai perdagangan kuantitatif. Penapis Voss boleh menghantar isyarat beli / jual lebih awal, manakala penunjuk garisan trend seketika digunakan untuk menentukan arah trend keseluruhan, mengurangkan penapis Voss yang keliru dalam pasaran yang sedang tren.

Prinsip Strategi

Voss meramalkan penapis

Voss meramalkan penapis dari John F. Ehlers dalam artikel A Peek Into The Future. Formula pengiraan penapis adalah sebagai berikut:

_filt = 0.5 * _s3 * _x1 + _f1 * _s2 * _filt[1] - _s1 * _filt[2]
_voss = _x2 * _filt - _sumC

Di antaranya,_x1 adalah satu darjah perbezaan harga;_x2 ialah faktor kelancaran;_s1、_s2、_s3 ialah parameter filter;_f1 ialah parameter kitaran;_filt ialah hasil penapisan;_voss untuk output akhir.

Penapis ini boleh dilihat sebagai penapis halus, yang menekankan maklumat mengenai kitaran semasa dan beberapa kitaran lalu, untuk menghantar isyarat beli / jual lebih awal. Oleh kerana kelewatan kumpulan yang tertanam, ia boleh menghantar isyarat ramalan sebelum indikator lain, seperti keldai melihat keldai masa depan.

Penunjuk garisan trend seketika

Indeks garis trend seketika dikira dengan formula berikut:

_it = (_a-((_a*_a)/4.0))*_src+0.5*_a*_a*_src[1]-(_a-0.75*_a*_a)*_src[2]+2*(1-_a)*nz(_it[1])+-(1-_a)*(1-_a)*nz(_it[2])

Penunjuk ini menggambar garis trend yang paling sesuai dengan harga dalam masa nyata, dan dapat menentukan arah dan kekuatan trend dengan tepat.

Logik Strategi

Voss menghasilkan isyarat beli apabila dialihkan dari negatif ke kanan, dan melalui penyaringan.

Voss menghasilkan isyarat jual apabila ia bertukar positif ke negatif, dan melalui penyaringan bawah.

Pada masa yang sama, isyarat dagangan hanya akan dikeluarkan apabila petunjuk garis trend seketika mengesahkan arah trend. Ini dapat menyaring isyarat salah yang mungkin dikeluarkan oleh penapis Voss dalam pasaran yang sedang tren.

Kelebihan Strategik

  • Penapis Voss boleh menghantar isyarat ramalan lebih awal untuk menangkap titik-titik perubahan berkala
  • Penunjuk garisan trend seketika dapat menentukan arah trend dengan tepat, mengelakkan isyarat yang salah yang dikeluarkan oleh penapis lebih awal
  • Parameter yang boleh dikonfigurasi untuk dioptimumkan, sesuai untuk pelbagai kitaran dan keadaan pasaran
  • Tambahan strategi kawalan risiko

Risiko strategi dan penyelesaian

  • Strategi ini bergantung kepada penapis untuk memberi isyarat lebih awal dan mungkin melangkau sebahagian daripada trend.
  • Dalam trend yang kuat, mungkin ada isyarat perdagangan yang berbalik dan membawa kerugian

Risiko boleh dikurangkan dengan:

  • Parameter kitaran yang dioptimumkan untuk memadankan kitaran yang berbeza
  • Menyesuaikan parameter lebar jalur untuk mengurangkan intensiti gelombang filter dan mengurangkan isyarat yang salah
  • Menambah penapis trend untuk mengelakkan isyarat salah semasa trend kuat
  • Tetapkan strategi berhenti kerugian untuk mengawal kerugian tunggal

Arah pengoptimuman strategi

Strategi ini boleh dioptimumkan dengan:

  • Cuba sumber harga yang berbeza, seperti harga penutupan, rata-rata, dan lain-lain untuk input yang lebih baik
  • Sesuaikan parameter kitaran penapis untuk menyesuaikan kekerapan kitaran untuk varieti tertentu
  • Mengoptimumkan parameter penunjuk trend untuk mendapatkan penilaian trend yang lebih tepat
  • Mencuba pelbagai indikator trend untuk mencari kombinasi yang lebih sesuai
  • Tambah strategi berhenti, trailing stop, dan kawalan risiko yang lebih baik
  • Mengoptimumkan parameter untuk mencari kombinasi parameter yang terbaik

ringkaskan

Strategi ini mengintegrasikan penapis Voss dan penunjuk trend, yang dapat mengenal pasti titik-titik perubahan berkala di pasaran. Dengan mengoptimumkan parameter, mengawal risiko, strategi ini dapat mencapai sistem perdagangan kuantitatif yang stabil. Ia boleh digunakan secara meluas untuk varieti yang jelas berkala, yang telah menunjukkan kesan perdagangan yang baik dalam pengesanan semula.

Kod sumber strategi
/*backtest
start: 2023-08-19 00:00:00
end: 2023-09-18 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// A Peek Into the Future
// John F. Ehlers
// TASC Aug 2019

// Created by e2e4mfck for tradingview.com
// Modified by © Bitduke

//@version=4
//strategy("Voss Strategy (Filter + IT)", overlay=false, calc_on_every_tick=false,pyramiding=0, default_qty_type=strategy.cash,default_qty_value=1000, currency=currency.USD, initial_capital=1000,commission_type=strategy.commission.percent, commission_value=0.075)

// voss filter

source = input(close, type = input.source)
period = input(20, type = input.integer)
predict = input(4, type = input.integer)
bandwidth = input(0.25, type = input.float)

// it trendline

src = input(hl2, title="Source IT")
a = input(0.07, title="Alpha", step=0.01) 
fr = input(false, title="Fill Trend Region")
ebc = input(false, title="Enable barcolors")
hr = input(false, title="Hide Ribbon")


voss_filter (_period, _predict, _bandwidth, _source) =>
	float _filt = 0, float _sumC = 0, float _voss = 0
	_PI		= 2 * asin(1)
	_order	= 3 * _predict
	_f1		= cos(2 * _PI / _period)
	_g1		= cos(_bandwidth * 2 * _PI / _period)
	_s1		= 1 / _g1 - sqrt(1 / (_g1 * _g1) - 1)
	_s2		= 1 + _s1
	_s3		= 1 - _s1
	_x1		= _source - _source[2]
	_x2		= (3 + _order) / 2

	for _i = 0 to (_order - 1)
		_sumC := _sumC + ((_i + 1) / _order) * _voss[_order - _i]

	if bar_index <= _order
		_filt := 0		
		_voss := 0		
	else			
		_filt := 0.5 * _s3 * _x1 + _f1 * _s2 * _filt[1] - _s1 * _filt[2]
		_voss := _x2 * _filt - _sumC

	[_voss, _filt]


[Voss, Filt] = voss_filter(period, predict, bandwidth, source)


instantaneous_trendline (_src, _a, _freq, _ebc, _hr) =>
    _it = 0.0
    _it := (_a-((_a*_a)/4.0))*_src+0.5*_a*_a*_src[1]-(_a-0.75*_a*_a)*_src[2]+2*(1-_a )*nz(_it[1], ((_src+2*_src[1]+_src[2])/4.0))-(1-_a)*(1-_a)*nz(_it[2], ((_src+2*_src[1]+_src[2])/4.0))
    _lag = 2.0*_it-nz(_it[2])
    
    [_it, _lag]

[it, lag] = instantaneous_trendline(src, a, fr, ebc, hr)

// - - - - -  - - - - - //

plot(Filt, title = "Filter", style = plot.style_line, color = color.red, linewidth = 2)
plot(Voss, title = "Voss", style = plot.style_line, color = color.blue,	linewidth = 2)
hline(0.0, title = "Zero", linestyle = hline.style_dashed, color = color.black,	linewidth = 1)
plot(hr? na:it, title="IT Trend", color= fr? color.gray : color.red, linewidth=1)
plot(hr? na:lag, title="IT Trigger", color=fr? color.gray : color.blue, linewidth=1)


// Strategy Logic
longCondition =  lag < it  and crossover(Voss,Filt) 
shortCondition = it > lag and crossover(Filt,Voss) 

strategy.entry("Voss_Short", strategy.short, when=shortCondition)
strategy.entry("Voss_Long", strategy.long, when=longCondition)


// === Backtesting Dates === thanks to Trost

testPeriodSwitch = input(true, "Custom Backtesting Dates")
testStartYear = input(2019, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testStartHour = input(0, "Backtest Start Hour")
testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, testStartHour, 0)
testStopYear = input(2020, "Backtest Stop Year")
testStopMonth = input(2, "Backtest Stop Month")
testStopDay = input(29, "Backtest Stop Day")
testStopHour = input(0, "Backtest Stop Hour")
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, testStopHour, 0)
testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
testPeriod_1 = testPeriod()
isPeriod = true
// === /END

if not isPeriod
    strategy.cancel_all()
    strategy.close_all()