Strategieoptimierung und Benchmarking

Finanzhandel mit Python

Chelsea Yang

Data Science Instructor

Wie wählst du Werte für Eingabeparameter?

  • Frage:

    • Welcher SMA-Lookback ist für das Signal „Price > SMA" besser?
  • Lösung: Strategieoptimierung

    • Teste in Backtests verschiedene Eingabewerte und vergleiche die Ergebnisse
Finanzhandel mit Python

Beispiel: Strategieoptimierung

def signal_strategy(ticker, period, name, start='2018-4-1', end='2020-11-1'):

# Get the data and calculate SMA price_data = bt.get(ticker, start=start, end=end) sma = price_data.rolling(period).mean()
# Define the signal-based strategy bt_strategy = bt.Strategy(name, [bt.algos.SelectWhere(price_data>sma), bt.algos.WeighEqually(), bt.algos.Rebalance()])
# Return the backtest return bt.Backtest(bt_strategy, price_data)
1 www.datacamp.com/courses/writing-functions-in-python
Finanzhandel mit Python

Beispiel: Strategieoptimierung

ticker = 'aapl'
sma20 = signal_strategy(ticker, 
                        period=20, name='SMA20')
sma50 = signal_strategy(ticker, 
                        period=50, name='SMA50')
sma100 = signal_strategy(ticker, 
                        period=100, name='SMA100')

# Run backtests and compare results bt_results = bt.run(sma20, sma50, sma100) bt_results.plot(title='Strategy optimization')

Ein Diagramm des Optimierungsergebnisses

Finanzhandel mit Python

Was ist eine Benchmark?

Ein Standard oder Referenzwert, an dem eine Strategie gemessen oder verglichen wird.

  • Beispiel:
    • Eine Strategie, die mit Signalen aktiv Aktien handelt, kann eine passive Buy-and-Hold-Strategie als Benchmark nutzen.
    • Der S&P‑500-Index wird oft als Aktien-Benchmark verwendet.
    • U.S. Treasuries dienen zur Messung von Anleiherisiken und -renditen.
Finanzhandel mit Python

Beispiel: Benchmarking

def buy_and_hold(ticker, name, start='2018-11-1', end='2020-12-1'):

# Get the data price_data = bt.get(ticker, start=start_date, end=end_date)
# Define the benchmark strategy bt_strategy = bt.Strategy(name, [bt.algos.RunOnce(), bt.algos.SelectAll(), bt.algos.WeighEqually(), bt.algos.Rebalance()])
# Return the backtest return bt.Backtest(bt_strategy, price_data)
Finanzhandel mit Python

Beispiel: Benchmarking

benchmark = buy_and_hold(ticker, name='benchmark')

# Run all backtests and plot the resutls bt_results = bt.run(sma20, sma50, sma100, benchmark) bt_results.plot(title='Strategy benchmarking')

Benchmarking-Ergebnis

Finanzhandel mit Python

Lass uns üben!

Finanzhandel mit Python

Preparing Video For Download...