User Tools

Site Tools


returns_vs_log_returns

This is an old revision of the document!


# 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_fee'] = np.where(df['position'] != df['position'].shift(), 1/1.0025, 1) df['logr_fee'] = np.where(df['position'] != df['position'].shift(), -0.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.1741965358.txt.gz · Last modified: 2025/03/14 15:15 by bruno