Quantitative Handelsstrategie basierend auf Voss-Filter und Trendindikator


Erstellungsdatum: 2023-09-19 16:59:10 zuletzt geändert: 2023-09-19 16:59:10
Kopie: 2 Klicks: 900
1
konzentrieren Sie sich auf
1617
Anhänger

Überblick

Die Strategie kombiniert Voss-Vorhersage-Filter und Ehlers momentane Trendlinie-Indikator, um zu identifizieren, die Markt-zyklische Wendepunkte, um zu quantifizieren, den Handel. Die Voss-Filter können in der Vorausstellung von Kauf-/Verkauf-Signal, während die momentane Trendlinie-Indikator verwendet wird, um zu bestimmen, die Gesamt-Trend-Richtung, reduzieren die Voss-Filter in der Trend-Markt-Fehlen.

Strategieprinzip

Vorhersage von Voss Filter

Der Voss-Vorhersage-Filter stammt aus dem Artikel von John F. Ehres A Peek Into The Future. Die Berechnungsformel für den Filter lautet:

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

In diesem_x1 ist die Differenz in der Preisstufe;_x2 ist der Gleitfaktor._s1、_s2、_s3 ist der Filterwert;_f1 ist die Periodizität;_filt ist das Ergebnis des Filters;_voss für die endgültige Ausgabe.

Der Filter kann als eine Art Gleitfilter betrachtet werden, der die Informationen der aktuellen und der vergangenen Zyklen betont und so ein Kauf-/Verkaufssignal im Voraus auslöst. Aufgrund der inneren Gruppenverzögerungen kann er, wie eine Ameise, die in die Zukunft blickt, ein prognostisches Signal auslösen, bevor andere Indikatoren.

Kurzzeit-Trendlinie

Der Momentane Trendlinie-Indikator wird durch folgende Formel berechnet:

_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])

Der Indikator zeichnet in Echtzeit eine Trendlinie, die am besten mit dem Preis übereinstimmt, um die Richtung und Stärke des Trends zu bestimmen.

Strategielogik

Ein Kaufsignal wird erzeugt, wenn Voss von einer negativen Umstellung ausgeht und die Filterergebnisse durchbricht.

Wenn Voss von der Positiv-Negativ-Schwankung ausgeht und das Ergebnis der Unterdurchlässigkeit durchdringt, wird ein Verkaufssignal erzeugt.

Die Handelssignale werden nur dann gesendet, wenn die momentane Trendlinie die Richtung bestätigt. Dies filtert die falschen Signale aus, die der Voss-Filter in einem Trendmarkt erzeugen kann.

Strategische Vorteile

  • Voss-Filter können vorhersehbare Signale senden, um periodische Wendepunkte zu erfassen
  • Momentane Trendlinie-Indikatoren können die Richtung des Trends genau bestimmen und Fehlsignale durch vorzeitige Filter verhindern
  • Optimierte konfigurierbare Parameter für unterschiedliche Zyklen und Marktumgebungen
  • Risikokontrolle mit zusätzlicher Stop-Loss-Strategie

Strategische Risiken und Lösungen

  • Die Strategie basiert auf einem vorzeitigen Filtersignal, das einige Trends überspringen kann.
  • Bei einem starken Trend kann es zu einer Rückwirkung von Handelssignalen kommen, die zu Verlusten führen.

Das Risiko kann durch folgende Maßnahmen verringert werden:

  • Optimierung der Zyklusparameter, um die Zyklusfähigkeit verschiedener Sorten zu vergleichen
  • Anpassung der Bandbreitenparameter zur Verringerung der Schwingungsstärke und zur Verringerung der Fehlsignale
  • Trendfilter erhöhen, um falsche Signale bei starken Trends zu vermeiden
  • Setzen Sie eine Stop-Loss-Strategie, um einzelne Verluste zu kontrollieren

Richtung der Strategieoptimierung

Die Strategie kann optimiert werden durch:

  • Versuchen Sie mit verschiedenen Preisquellen, z. B. Schlusskosten, Durchschnittspreise, um bessere Eingaben zu erhalten.
  • Anpassung der Filter-Periodenparameter an die Periodizität der jeweiligen Sorte
  • Optimierung der Trendindikatorparameter für eine genauere Trendbeurteilung
  • Versuchen Sie es mit verschiedenen Trendindikatoren und suchen Sie nach einer geeigneteren Kombination.
  • Ein zusätzlicher Stop-Loss- und Trailing-Stop-Strategie zur besseren Risikokontrolle
  • Optimierung der Parameter und Suche nach der optimalen Parameterkombination

Zusammenfassen

Die Strategie kombiniert Voss-Filter und Trendindikatoren, um die periodischen Wendepunkte des Marktes effektiv zu identifizieren. Durch die Optimierung der Parameter und die Risikokontrolle ermöglicht die Strategie ein stabiles quantitatives Handelssystem. Sie kann in Sorten mit deutlicher Periodizität eingesetzt werden, die in der Rückmeldung gute Handelsergebnisse gezeigt haben. Insgesamt hat die Strategie eine einzigartige Prognosefähigkeit und kann in vielfältiger Weise optimiert werden.

Strategiequellcode
/*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()