returns_vs_log_returns
# coding: utf-8 import timeit def calc_returns (): df['returns'] = df['close'] / df['close'].shift(1) #df['cum_returns'] = df['returns'].cumprod() cum_returns = df['returns'].prod() def calc_log_returns (): df['log_returns'] = np.log( df['close'] / df['close'].shift(1) ) #df['cum_log_returns'] = np.exp(df['log_returns'].cumsum()) cum_log_returns = np.exp( df['log_returns'].sum() ) print(timeit.timeit(stmt='calc_returns()',setup='from __main__ import calc_returns',number=10000)) print(timeit.timeit(stmt='calc_log_returns()',setup='from __main__ import calc_log_returns',number=10000))
# coding: utf-8 df = pd.read_csv('https://raw.githubusercontent.com/brulint/backtesting/main/btceur-2h.csv') df['fast'] = ta.EMA(df['close'], timeperiod = 20) df['slow'] = ta.SMA(df['close'], timeperiod = 200) df['position'] = df['fast'] > df['slow'] df['r_hodl'] = df['close'] / df['close'].shift() df['logr_hodl'] = np.log( df['r_hodl'] ) df['r_strat'] = np.where(df['position'].shift() == 1, df['r_hodl'], 1) df['logr_strat'] = np.where(df['position'].shift() == 1, df['logr_hodl'], 0) df['R_strat'] = df['r_strat'].cumprod() df['logR_strat'] = np.exp( df['logr_strat'].cumsum() ) df['r_fee'] = np.where(df['position'] != df['position'].shift(), 1.0025, 1) df['logr_fee'] = np.where(df['position'] != df['position'].shift(), np.log(1.0025), 0) df['r_net'] = df['r_strat'] / df['r_fee'] df['logr_net'] = df['logr_strat'] - df['logr_fee'] df['R_net'] = df['r_net'].cumprod() df['logR_net'] = np.exp( df['logr_net'].cumsum() )
returns_vs_log_returns.txt · Last modified: 2025/03/14 15:33 by bruno