Market-Timing-Strategien basierend auf historischer Volatilität


Erstellungsdatum: 2024-01-15 12:27:47 zuletzt geändert: 2024-01-15 12:27:47
Kopie: 2 Klicks: 697
1
konzentrieren Sie sich auf
1617
Anhänger

Market-Timing-Strategien basierend auf historischer Volatilität

Überblick

Diese Strategie realisiert eine verbesserte Buy-and-Hold-Strategie durch das Hinzufügen eines Filters, der auf historischen Volatilität basiert. Der Filter dient dazu, Kaufpositionen zu schließen, wenn die Marktvolatilität hoch ist, und Kaufpositionen neu zu erstellen, wenn die Volatilität niedrig ist, wodurch die maximale Rücknahme der Strategie verringert wird.

Strategieprinzip

  1. Berechnung der historischen Volatilität von SPY in den letzten 100 Tagen
  2. Wenn die aktuelle Volatilität höher ist als der 95-Punkte-Wert der Volatilität der letzten 100 Tage, filtert man den Handelstag und schließt die Kaufposition.
  3. Wenn die Volatilität unter dem 95-Punkt-Wert liegt, wird eine Kaufposition eingerichtet

Analyse der Stärken

Verglichen mit einer einfachen Buy-and-Hold-Strategie ohne Filter erhöhte sich die jährliche Rendite dieser Strategie über die 28 Jahre Rücklaufzeit (7,95% vs 9,92%) und die maximale Rücknahme sank deutlich (50,79% vs 31,57%). Dies zeigt, dass die Einbeziehung eines volatilen Marktfilters die Strategie-Rendite zu einem gewissen Grad erhöhen und das Risiko reduzieren kann.

Risikoanalyse

Das Hauptrisiko dieser Strategie liegt in der Genauigkeit der Berechnungsmethode für die Schwankungen und der Einstellung der Filterparameter. Wenn die Schwankungen nicht genau berechnet werden, wird der Filter ausfallen. Wenn die Einstellung der Filterparameter zu konservativ oder zu radikal ist, hat dies einen negativen Einfluss auf die Strategie.

Optimierungsrichtung

Es kann in Betracht gezogen werden, andere Filterindikatoren als Bestätigungssignale hinzuzufügen, z. B. die langfristige Moving Average, die ADX-Indikatoren des Großplattenindex usw. Die Optimierung von Parameteranpassungen ist ebenfalls wichtig, z. B. die Einstellung von Parametern wie dem Testen verschiedener Lookback-Perioden, Filtering-Thresholds usw.

Zusammenfassen

Die Strategie erhöht die Rendite der SPY-Buy-Hold-Strategie durch einen einfachen Filter basierend auf der historischen Volatilität erheblich, während die maximale Rücknahme deutlich reduziert wird. Dies beweist die Bedeutung der Identifizierung von Marktzuständen und der Vermögenskonfiguration.

Strategiequellcode
/*backtest
start: 2023-01-08 00:00:00
end: 2024-01-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// 
// @author Sunil Halai
//
// This script has been created to demonstrate the effectiveness of using market regime filters in your trading strategy, and how they can improve your returns and lower your drawdowns
//
// This strategy adds a simple filter (The historical volatility filter, which can be found on my trading profile) to a traditional buy and hold strategy of the index SPY. There are other filters
// that could also be added included a long term moving average / percentile rank filter / ADX filter etc, to improve the returns further.
//
// The filter added closes our long position during periods of volatility that exceed the 95th percentile (or in the top 5% of volatile days)
//
// Have included the back test results since 1993 which is 28 years of data at the time of writing,  Comparing  buy and hold of the SPY (S&P 500), to improved by and hold offered here.
//
// Traditional buy and hold:
//
// Return per year:     7.95   % (ex Dividends)
// Total return :       851.1  %
// Max drawdown:        50.79  %
//
// 'Modified' buy and hold (this script):
//
// Return per year:     9.92    % (ex Dividends)
// Total return:        1412.16 %
// Max drawdown:        31.57   %
//
// Feel free to use some of the market filters in my trading profile to improve and refine your strategies further, or make a copy and play around with the code yourself. This is just 
// a simple example for demo purposes.
//

//@version=4
strategy(title = "Simple way to beat the market [STRATEGY]", shorttitle = "Beat The Market [STRATEGY]", overlay=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, currency="USD", default_qty_value=100)


upperExtreme = input(title = "Upper percentile filter (Do not trade above this number)", type = input.integer, defval = 95)
lookbackPeriod = input(title = "Lookback period", type = input.integer, defval = 100)

annual = 365
per = timeframe.isintraday or timeframe.isdaily and timeframe.multiplier == 1 ? 1 : 7
hv = lookbackPeriod * stdev(log(close / close[1]), 10) * sqrt(annual / per)

filtered = hv >= percentile_nearest_rank(hv, 100, upperExtreme)

if(not(filtered))
    strategy.entry("LONG", strategy.long)
else
    strategy.close("LONG")