User Tools

Site Tools


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