Python 用交易成本计算收益
这可能是在计算交易回报时过于简化了,同时也包括了交易成本。我做了一些假设——投资和提取投资的佣金分别为1%和2%。佣金在交易期内不会发生变化,在这种情况下,交易期为5个时间步。我已经使用Python代码来执行计算 给定资产在5个时间步长内价格的正负百分比变化集是Python 用交易成本计算收益,python,finance,trading,Python,Finance,Trading,这可能是在计算交易回报时过于简化了,同时也包括了交易成本。我做了一些假设——投资和提取投资的佣金分别为1%和2%。佣金在交易期内不会发生变化,在这种情况下,交易期为5个时间步。我已经使用Python代码来执行计算 给定资产在5个时间步长内价格的正负百分比变化集是{0.031%,0.00121%,0.0231%,-0.0213%,-0.0121%} 进入投资的佣金为投资金额的1%,退出投资的佣金为投资金额现值的2% 如果我在这项资产上投资1欧元,以下是否正确? 1. 如果我在$t=5$之前不进行投
{0.031%,0.00121%,0.0231%,-0.0213%,-0.0121%}
进入投资的佣金为投资金额的1%,退出投资的佣金为投资金额现值的2%
如果我在这项资产上投资1欧元,以下是否正确?
1.
如果我在$t=5$之前不进行投资交易,则最终投资金额为:
最终百分比变动金额为$t=5$,即“初始投资金额”+“%change”-“佣金输入”-“佣金退出”
,因此:
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美元。首先,我不得不恭敬地不同意你对案例1的结论: 如果我在$t=5$之前不交易投资,则最终投资金额为:$t=5$时的最终百分比变化金额,即“初始投资金额”+“'%change'-”佣金进入“-”佣金退出 我认为,最终值的正确公式是 ((初始投资金额-输入佣金)*(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):
首先,我不得不恭敬地不同意你对案例1的结论: 如果我在$t=5$之前不交易投资,则最终投资金额为:$t=5$时的最终百分比变化金额,即“初始投资金额”+“'%change'-”佣金进入“-”佣金退出 我认为,最终值的正确公式是 ((初始投资金额-输入佣金)*(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):
佣金和价格变动均以百分比形式给出。这意味着投资后账户中的金额为: 初始投资金额*(1-佣金金额/100) _amt后缀可能令人困惑,但佣金在问题中表示为% 第一个投资期后,该账户的金额为: 初始投资金额*(1-佣金金额/100)*(1-价格变化/100) 最后,退出后,客户端收到: 初始投资金额*(1-佣金金额/100)(1-价格变化/100)(1-佣金金额/100) 我认为这种模式很清楚,所以你只要为一项较长的投资插入更多的价格变化,如果你撤资再投资,你将要支付更多的佣金。
希望这是可以的-抱歉没有代码-但它看起来更清晰,并且使用了问题符号。佣金和价格变动都以百分比形式给出。这意味着投资后账户中的金额为: 初始投资金额*(1-佣金金额/100) _amt后缀可能令人困惑,但佣金在问题中表示为% 第一个投资期后,该账户的金额为: 初始投资金额*(1-佣金金额/100)*(1-价格变化/100) 最后,退出后,客户端收到: 初始投资金额*(1-佣金金额/100)(1-价格变化/100)(1-佣金金额/100) 我认为这种模式很清楚,所以你只要为一项较长的投资插入更多的价格变化,如果你撤资再投资,你将要支付更多的佣金。
希望这没问题-抱歉,没有代码-但它看起来更清晰,并且使用了问题符号。除非我遗漏了什么,否则您似乎认为在每一个步骤中,您都会同时支付投资佣金和销售佣金。这是真的吗?还是时间步1开头的投资佣金和时间步5开头的销售佣金?@JackFleeting In 1。我在投资时支付一笔投资佣金,当我进行投资时,我支付一笔销售佣金——因此在本例中,在5个时间步骤的系列中支付两笔佣金。在2。当我在每个时间步将投资取出,然后再投资时,我必须在每个时间步支付投资和销售佣金。我希望这是有道理的。根据市场在5个时间步中的走势,这些策略中的每一个都会产生不同的回报,正如我在问题中所建议的。除非我遗漏了什么,否则你似乎认为在每一个时间步你都会支付投资佣金和销售佣金。这是真的吗?还是时间步1开头的投资佣金和时间步5开头的销售佣金?@JackFleeting In 1。我在伦敦支付投资佣金