Strategi perdagangan kuantitatif berdasarkan filter Voss dan indikator tren


Tanggal Pembuatan: 2023-09-19 16:59:10 Akhirnya memodifikasi: 2023-09-19 16:59:10
menyalin: 2 Jumlah klik: 900
1
fokus pada
1617
Pengikut

Ringkasan

Strategi ini menggabungkan penggunaan filter Voss Prediction dan indikator garis tren instan Ehlers untuk mengidentifikasi titik-titik perputaran pasar yang berkala dan mengonversi transaksi kuantitatif. Filter Voss dapat mengirim sinyal beli / jual lebih awal, sedangkan indikator garis tren instan digunakan untuk menentukan arah tren keseluruhan dan mengurangi kesalahan filter Voss dalam pasar yang sedang tren.

Prinsip Strategi

Voss memprediksi filter

Voss memprediksikan filter dari John F. Ehlers dalam artikel A Peek Into The Future. Rumus perhitungan filter adalah sebagai berikut:

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

Di antaranya,_x1 adalah selisih satu derajat harga;_x2 adalah faktor kelancaran;_s1、_s2、_s3 adalah parameter filter;_f1 adalah parameter periodik;_filt adalah hasil filter;_voss sebagai output akhir.

Filter ini dapat dianggap sebagai filter yang halus, yang menekankan informasi dari siklus saat ini dan beberapa siklus sebelumnya, sehingga mengirimkan sinyal beli / jual lebih awal. Karena keterlambatan grup yang melekat, filter ini dapat mengirimkan sinyal prediktif sebelum indikator lainnya, seperti siput yang melihat ke dalam siput masa depan.

Indikator garis tren seketika

Indikator garis tren instan dihitung dengan rumus 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])

Indikator ini secara real-time menggambar garis tren yang paling sesuai dengan harga, sehingga dapat menentukan arah dan kekuatan tren secara akurat.

Logika Strategi

Sebuah sinyal beli dihasilkan ketika Voss bergeser dari negatif ke kanan, dan melewati hasil filter.

Ketika Voss bergeser dari positif ke negatif, dan turun melalui hasil filter, ia menghasilkan sinyal jual.

Sementara itu, sinyal perdagangan hanya akan dikirim ketika indikator garis tren instan mengkonfirmasi arah tren. Ini dapat menyaring sinyal palsu yang mungkin dikirim oleh filter Voss di pasar tren.

Keunggulan Strategis

  • Filter Voss dapat mengirimkan sinyal prediktif lebih awal untuk menangkap titik balik berkala
  • Indikator garis tren seketika dapat menentukan arah tren secara akurat, menghindari sinyal yang salah yang dikeluarkan oleh filter sebelumnya
  • Parameter yang dapat dikonfigurasi untuk dioptimalkan untuk berbagai siklus dan lingkungan pasar
  • Strategi pengendalian risiko stop loss yang dapat ditambahkan

Risiko Strategis dan Solusi

  • Strategi ini bergantung pada filter untuk memberi sinyal lebih awal dan mungkin akan melewati beberapa tren.
  • Dalam tren yang kuat, mungkin ada sinyal perdagangan yang bertentangan, yang menyebabkan kerugian

Risiko dapat dikurangi dengan:

  • Parameter siklus yang dioptimalkan untuk mencocokkan periodikitas varietas yang berbeda
  • Menyesuaikan parameter bandwidth, mengurangi intensitas gelombang filter, mengurangi sinyal yang salah
  • Menambahkan filter tren untuk menghindari sinyal palsu di bawah tren kuat
  • Menetapkan strategi stop loss untuk mengendalikan kerugian tunggal

Arah optimasi strategi

Strategi ini dapat dioptimalkan dengan:

  • Mencoba sumber harga yang berbeda, seperti harga close out, average, dan lain-lain, untuk mendapatkan input yang lebih baik
  • Menyesuaikan parameter siklus filter untuk mencocokkan periodikitas dengan varietas tertentu
  • Optimalkan parameter indikator tren untuk mendapatkan penilaian tren yang lebih akurat
  • Mencoba berbagai indikator tren untuk menemukan kombinasi yang lebih cocok
  • Menambahkan strategi stop loss dan trailing stop untuk mengendalikan risiko
  • Optimalkan parameter untuk menemukan kombinasi optimal

Meringkaskan

Strategi ini mengintegrasikan filter Voss dan indikator tren, yang dapat secara efektif mengidentifikasi titik balik berkala di pasar. Dengan mengoptimalkan parameter, mengendalikan risiko, strategi ini dapat mencapai sistem perdagangan kuantitatif yang stabil. Ini dapat digunakan secara luas pada varietas dengan periodikitas yang jelas, yang telah menunjukkan hasil perdagangan yang baik dalam pengujian ulang. Secara keseluruhan, strategi ini memiliki kemampuan prediktif yang unik, dan dapat dioptimalkan melalui berbagai aspek, dengan prospek aplikasi yang luas.

Kode 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()