下面的代碼通過下面的r_pnl函式進行迭代,并計算出以$100開始的復利值,并使用r_pnl值作為利率。唯一的區別是,利息金額不一樣,可能有正負的利息金額。這個函式是用Compounding函式計算的。還有一個因素是杠桿,所以借的錢可以從沒有杠桿開始到9.75倍的初始借貸金額1-9.75有一個-0.15的費用,這個費用是乘以r_pnl和lev_iter。有沒有一種方法可以找到1 - 9.75之間的杠桿金額的最大值,而不需要一個for回圈和為每個杠桿值計算Compounding?我正在努力獲得預期的輸出,并盡可能地降低運行時間。
import numpy as np
金額=100
Leverages = np.range(start=1, stop=10, step=0.25)
r_pnl = np.array( [0.0, -0.39247204114412626, 0. 3122849117324323, 0.6134640190523772, 9. 04025334826345, 0.34803242545822, 0.6701565095475336, -1.0390576755639311, 0. 0, -0.5423604436038103, -0.4251610104101389, -0。 1218472666501971, -0.1927069235919652, 3. 1356759237117817, -0.8274178347269903, -0.6014871237753395, -0.08516044803648884, -0. 35584520733480385, 0.17304075235109945, -0.3252022308194671, -0.19104483630759042, -0. 17181374182909762, 0.463788348215472, -0.16367088607595306, -0. 12805769442898776, -0.21855930668834814, 0. 48122377032225083, 1.3597313947097627, 0.4480022947379504, 0.0, -0. 8100583722249745, -0.5125916528667578, -0. 04964580114966066, -0.5841192117035439, -0.0971651097446353])
def func(PnL_val)。
for lev_iter in 杠桿。
PnL2=(PnL_val-0.15)*lev_iter
復利 = Amount * np.cumprod(PnL2 / 100 1)
print("result: ",np.round(Compounding[-1],2),"lev: ", lev_iter)
func(r_pnl)
預期輸出:
最大值。110.508 lev: 5.75。
運行時間:
Wall time: 2.45 ms
列印結果:
Compounding: 103.55655488289916 lev iter 1.0
復式。 104.32201041415827 lev iter 1.25
復式。 105.0392189936324 lev iter 1.5
復式。 105.70881856813112 lev iter 1.75
復式。 106.33145989067727 lev iter 2.0
復式。 106.90780570095535 lev iter 2.25
復式。 107.43852992445258 lev iter 2.5
復式。 107.92431689016875 lev iter 2.75
復式。 108.36586056676578 lev iter 3.0
復式。 108.76386381702079 lev iter 3.25
復式。 109.11903767044109 lev iter 3.5
復式。 109.43210061389581 lev iter 3.75
復式。 109.70377790010848 lev iter 4.0
復式。 109.93480087385666 lev iter 4.25
復式。 110.12590631571297 lev iter 4.5
復式。 110.27783580316388 lev iter 4.75
復式。 110.39133508893116 lev iter 5.0
復式。 110.46715349632343 lev iter 5.25
復式。 110.50604333143713 lev iter 5.5
復式。 110.5087593120221 lev iter 5.75
復式。 110.4760580128271 lev iter 6.0
復式。 110.40869732723395 lev iter 6.25
復式。 110.3074359449858 lev iter 6.5
復式。 110.17303284581423 lev iter 6.75
復式。 110.00624680876668 lev iter 7.0
復式。 109.80783593702861 lev iter 7.25
復式。 109.57855719804199 lev iter 7.5
復式。 109.31916597870695 lev iter 7.75
復式。 109.03041565546391 lev iter 8.0
復式。 108.71305717904063 lev iter 8.25
復式。 108.36783867365625 lev iter 8.5
復式。 107.99550505046489 lev iter 8.75
復式。 107.59679763502601 lev iter 9.0
復式。 107.17245380858374 lev iter 9.25
復式。 106.72320666293831 lev iter 9.5
復式。 106.2497846686893 leviter 9.75
uj5u.com熱心網友回復:
你可以廣播Leverages:
import numpy as np
金額=100
Leverages = np.range(start=1, stop=10, step=0.25)
r_pnl = np.array( [0.0, -0.39247204114412626, 0. 3122849117324323, 0.6134640190523772, 9. 04025334826345, 0.34803242545822, 0.6701565095475336, -1.0390576755639311, 0. 0, -0.5423604436038103, -0.4251610104101389, -0。 1218472666501971, -0.1927069235919652, 3. 1356759237117817, -0.8274178347269903, -0.6014871237753395, -0.08516044803648884, -0. 35584520733480385, 0.17304075235109945, -0.3252022308194671, -0.19104483630759042, -0. 17181374182909762, 0.463788348215472, -0.16367088607595306, -0. 12805769442898776, -0.21855930668834814, 0. 48122377032225083, 1.3597313947097627, 0.4480022947379504, 0.0, -0. 8100583722249745, -0.5125916528667578, -0. 04964580114966066, -0.5841192117035439, -0.0971651097446353])
f_x = (((r_pnl - 0.15)*Leverages[:, None] / 100 1) 。 cumprod(1)*Amount)[:,-1]
f'Max value: {f_x.max():.3f}, lev: {Leverages[f_x.argmax()]}'。
輸出
最大值。110.509, lev: 5.75 # %timeit 10000次回圈,5次中最好的一次:每次回圈23.7微秒。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/319978.html
標籤:
上一篇:根據參賽作品的數量計算獎牌的數量
下一篇:使用quiver繪制向量場
