Published April 18, 2022, 7:40 a.m. by finsteininvest
Eine Strategie, die in dem Buch "The Book of Trading Strategies" vorgestellt wird ist der simple moving average cross. Ein Kaufsignal wird generiert, wenn der Kurs einen einfachen gleitenden Durchschnitt von unten nach oben überschreitet. In dem Buch wird ein 50 Tage Periode genutzt. Verkauft wird, wenn der Kurs wieder unterhalb des gleitenden Durchschnitts fällt.
Ich habe Ethereum als Wert zum testen benutzt - Zum Zocken wäre es auch das, was ich benutzen würde. Vielleicht so mal mit €1000 zum Start.
Ich liebe die Python Welt. Irgendjemand hat schon vorgedacht. In diesem Fall habe ich Backtesting.py - Backtest trading strategies in Python gefunden. Damit muss ich diese Arbeit nicht selbst machen. Und für die Kursdaten kann ich auf investpy zurückgreifen.
Backtesting mit nur einigen Zeilen Code :-)
from backtesting import Backtest, Strategy
from backtesting.lib import crossover
from backtesting.test import SMA
import yfinance as yf
from time import strftime,gmtime
class SmaCross(Strategy):
'''Strategie für den Backtest
'''
# Periode für den gleitenden Durchschnitt
n1 = 50
def init(self):
close = self.data.Close
self.sma1 = self.I(SMA, close, self.n1)
print(self.sma1[-2:])
print('------------------')
print(self.data.Close[-2:])
def next(self):
if crossover(self.data.Close, self.sma1):
self.buy()
if crossover(self.sma1, self.data.Close):
self.position.close()
if __name__ == '__main__':
# Kurse holen
today = strftime("%Y-%m-%d", gmtime())
ether = yf.Ticker('ETH-EUR')
data = ether.history(start='2020-01-01', end=f'{today}')
#data = investpy.get_crypto_historical_data(crypto='ethereum', from_date='01/01/2020', to_date=f'{today}')
# Backtest initialisieren
bt = Backtest(data, SmaCross,
cash=10000, commission=.002,
exclusive_orders=True)
# Backtest starten
output = bt.run()
bt.plot()
print(output)
Wie schneidet die Strategie ab?
Start 2020-01-01 00:00:00
End 2022-04-17 00:00:00
Duration 837 days 00:00:00
Exposure Time [%] 62.410501
Equity Final [$] 71113.50256
Equity Peak [$] 122438.11536
Return [%] 611.135026
Buy & Hold Return [%] 2186.080306
Return (Ann.) [%] 135.004931
Volatility (Ann.) [%] 190.011043
Sharpe Ratio 0.710511
Sortino Ratio 2.860296
Calmar Ratio 2.654101
Max. Drawdown [%] -50.866545
Avg. Drawdown [%] -10.663318
Max. Drawdown Duration 341 days 00:00:00
Avg. Drawdown Duration 25 days 00:00:00
# Trades 26
Win Rate [%] 34.615385
Best Trade [%] 290.054878
Worst Trade [%] -12.23929
Avg. Trade [%] 7.925816
Max. Trade Duration 130 days 00:00:00
Avg. Trade Duration 20 days 00:00:00
Profit Factor 5.672101
Expectancy [%] 14.457229
SQN 1.082377
Buy & Hold hätte um ein vielfaches besser abgeschnitten.
Hier gibt es eine interaktive Version des Charts.