Расчет прибыли с торговыми расходами - PullRequest
0 голосов
/ 29 апреля 2020

Возможно, это чрезмерное упрощение расчета торговых доходов с учетом торговых расходов. Я сделал несколько предположений - комиссия за инвестирование и извлечение инвестиций составляет 1% и 2% соответственно. Комиссии не меняются в течение торгового периода, который в этом случае составляет 5 временных шагов. Я использовал код Python для выполнения расчетов.

Набор положительных и отрицательных процентных изменений цены данного актива за 5 временных шагов составляет {0.031% , 0.00121% , 0.0231% , -0.0213% , -0.0121%}.

Комиссия за если вложение составляет 1% от вложенной суммы, комиссия за выход из вложения составляет 2% от текущей стоимости вложенной суммы.

Если я вкладываю 1 евро в этот актив, будет следующее правильно?

1.

Окончательная сумма вложения, если я не торгую вложения до $ t = 5 $, равна: окончательная сумма процентного изменения в $ t = 5 $, что составляет 'initial invested amount' + '% change' - 'commission to enter' - 'commission to exit', поэтому:

initial_investment_amt = 1

comission_in_amt = 1

comission_out_amt = 2

price_change = -.0121

return_amt = (initial_investment_amt + (price_change / 100)) - (comission_in_amt / 100) - (comission_out_amt / 100) = 0.97 which represents a loss of 1 - .97 = .03

2.

Окончательная сумма вложения, если я торгую вложение на каждом временном шаге до $ t = 5 $ равно:

initial_investment_amt = 1

comission_in_amt = 1

comission_out_amt = 2

price_change = .031

return_amt_1 = (initial_investment_amt + (price_change / 100)) - (comission_in_amt / 100) - (comission_out_amt / 100)

price_change = .00121

return_amt_2 = (return_amt_1 + (price_change / 100)) - (comission_in_amt / 100) - (comission_out_amt / 100)

price_change = .0231

return_amt_3 = (return_amt_2 + (price_change / 100)) - (comission_in_amt / 100) - (comission_out_amt / 100)

price_change = -.0213

return_amt_4 = (return_amt_3 + (price_change / 100)) - (comission_in_amt / 100) - (comission_out_amt / 100)

price_change = -.0121

return_amt_5 = (return_amt_4 + (price_change / 100)) - (comission_in_amt / 100) - (comission_out_amt / 100)

print(return_amt_1)
print(return_amt_2)
print(return_amt_3)
print(return_amt_4)
print(return_amt_5)

отпечатков:

0.97031
0.9403220999999999
0.9105530999999999
0.8803400999999998
0.8502190999999998

, что означает потерю 1 - 0,85 = 0,15 $.

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

Комиссии и изменения цен указаны в процентах. Это означает, что сразу после вложения сумма на счете равна:

initial_investment_amt * (1-Commission_in_amt / 100)

Возможно, суффикс _amt сбивает с толку, но комиссия указана в процентах в вопросе.

После первого инвестиционного периода счет имеет сумму:

initial_investment_amt * (1-Commission_in_amt / 100) * (1-price_change / 100)

И, наконец, после выхода клиент получает:

initial_investment_amt * (1-Commission_in_amt / 100) (1-price_change / 100) (1- Commission_out_amt / 100)

Я думаю, что схема ясна, поэтому вы просто вставляете больше price_changes для более длительных инвестиций, и если вы преинвестируете и реинвестируете, у вас будет намного больше комиссионных, чтобы платить. Надеюсь, что все в порядке - извините, нет кода - но, кажется, так понятнее и использует нотацию вопроса.

1 голос
/ 30 апреля 2020

Во-первых, я должен с уважением не согласиться с вашим выводом для случая 1:

Окончательная сумма инвестиций, если я не буду торговать инвестициями до тех пор, пока $ t = 5 $, не равна: окончательная сумма процентного изменения при $ t = 5 $, который представляет собой «начальную вложенную сумму» + «% изменения» - «комиссия за вход» - «комиссия за выход»

Правильная формула для конечного значения, Я считаю, это

((начальная сумма инвестиций - комиссия за вход) * (изменение 1 +%)) - комиссия за выход. Основным отличием является то, что комиссия за ввод / инвестирование вынимается из обращения до возврата инвестиций. Это вносит существенную разницу во времени.

Предполагая, что я прав, ниже приведен код, который я предлагаю. Я позволил себе сменить некоторые термины для удобства, но вы, очевидно, можете изменить их так, как вам удобно:

p_changes = [0.03100, 0.00121, 0.02310, 0.02130, -0.01210]
initial_investment_amt = 100 #I used a larger initial investment; otherwise, the fees would have eaten you alive...
invest_fee = 1
sell_fee = 2

def periodic_ret(amount,change,reinv):

    if reinv == 0:
        if ind + 1 == 1: #for the initial period
            forward = (amount-invest_fee)*(1+change)      
        if ind +1 == len(p_changes): #for the final period
            forward = (amount*(1+change))-sell_fee
        else:
            forward = (amount*(1+change))
    else:
        forward = (amount-invest_fee)*(1+change)-sell_fee
    print(forward)
    return forward    

for i in range(len(p_changes)):
    reinv = 1 #1 if an invest and sell fee are paid each period, or 0, if an invest fee is paid once upfront and sell fee is paid once at the end
    if i == 0: #for the initial period
        cur = periodic_ret(initial_investment_amt, p_changes[0], reinv)
    else:
        cur = periodic_ret(cur,p_changes[i], reinv)

Вывод (w / reinv = 1):

100.06899999999999
97.18887348999998
96.41083646761896
95.44308728437926
91.30032592823827
...