计算收益与交易成本

问题描述 投票:1回答:1

这或许是在计算交易收益的同时,把交易成本也算进去了,过于简化了。我做了一些假设--投资和提取投资的佣金分别为1%和2%。佣金在交易期间不发生变化,在本例中是5个时间步骤。我使用Python代码来进行计算。

给定资产的价格在5个时间步长中的正负百分比变化集为 {0.031% , 0.00121% , 0.0231% , -0.0213% , -0.0121%}.

进入投资的手续费是投资金额的1%,退出投资的手续费是投资金额现值的2%。

如果我将1欧元投资于该资产,以下说法是否正确?

1.

如果我在$t=5$之前不进行投资交易,最终的投资金额是:$t=5$时的最终变动百分比金额是: 2. '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$。

python finance trading
1个回答
1
投票

首先,我不得不尊重您对案例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

1
投票

佣金和价格变化都是以百分比的形式给出的。这意味着在投资后,账户中的金额立即为。

initial_investment_amt*(1-commission_in_amt100)

_amt的后缀或许让人迷惑,但问题中的佣金是以%来表示的。

在第一个投资期过后,账户有金额。

initial_investment_amt*(1-commission_in_amt100)*(1-price_change100)

最后在退出后,客户收到。

initial_investment_amt*(1-commission_in_amt100)(1-价格变化100)(1-commission_out_amt100)

我认为这个模式很清楚,所以你只要插入更多的价格_变化,以延长投资时间,如果你取消投资和再投资,你将有更多的佣金支付。希望这样可以--抱歉没有代码--但这样看起来比较清晰,而且使用了问题符号。

© www.soinside.com 2019 - 2024. All rights reserved.