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.
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.
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.
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.
Das Risiko kann durch folgende Maßnahmen verringert werden:
Die Strategie kann optimiert werden durch:
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.
/*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()