Hướng dẫn binomial option pricing python - quyền chọn nhị thức đặt giá python

  • Ngày 21 tháng 12 năm 2020 |

Mô hình nhị thức là một mô hình định giá đơn giản nhưng hiệu quả. Trong bài viết này, chúng tôi sẽ giải thích các toán học đằng sau mô hình định giá nhị thức, phát triển tập lệnh Python để thực hiện nó và cuối cùng kiểm tra nó trên một số dữ liệu thị trường thực từ Yahoo Finance. & NBSP;

Chúng tôi cũng sẽ cho thấy mối quan hệ giữa mô hình nhị thức và mô hình da đen nổi tiếng. Chúng tôi sẽ chỉ xem xét các tùy chọn loại châu Âu trong bài viết này, sẽ có một bài viết trong tương lai tập trung cụ thể vào các tùy chọn kiểu Mỹ. Tuy nhiên, giá cho các cuộc gọi thường rất gần nếu không bằng với hết hạn của EU và Mỹ. & NBSP;

Trước khi chúng ta chuyển sang mô hình thực tế, có thể hữu ích khi đưa ra một số ví dụ tương tự đơn giản hơn để giải thích các toán học sẽ được sử dụng trong suốt bài viết này.

Thí dụ

Bạn được đề nghị chơi một trò chơi trong đó một đồng xu công bằng được lật & nbsp; n & nbsp; thời gian và bạn được trả 1 đô la cho mỗi người đứng đầu. & Nbsp;

Nói rằng chúng tôi lật đồng xu 4 lần. Giá hợp lý cho trò chơi này là gì? Dưới đây là danh sách 16 kết quả có thể có từ 4 lần lật được cho là 2x2x2x2 = 24 & nbsp; & nbsp; kết quả được mã hóa màu để biểu thị cùng một kết quả bất kể thứ tự do đó hhht = thhh

HHHH     THHH     THHH     THHH

HHHT     THHT    THHT    THHT

Hhth & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Thth      THTH      THTH

Hhtt & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Thtt      THTT      THTT

HTHH & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Tthh      TTHH      TTHH

HTTT & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; ttht       TTHT       TTHT

Htth & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Ttth     TTTH     TTTH

Httt & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; TTTT       TTTT       TTTT

Bây giờ chúng ta có không gian mẫu được xác định ở trên. Hãy làm cho một bảng thanh toán nhớ lại rằng chúng tôi được trả 1 đô la cho mỗi người đứng đầu (h). & Nbsp;

#Heads Kết quả với & nbsp; n & nbsp; người đứng đầu & nbsp; & nbsp; & nbsp; & nbsp; Tiền thưởng & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; xác suất & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Tính toán có trọng số & NBSP; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;
0 1 0 & nbsp; & nbsp; \ (\ frac {1} {16} \)\(\frac{1}{16}\)\(\frac{1}{16}\) 0
1 4 1 \ (\ frac {4} {16} \) 0.25
2 6 2 \ (\ frac {6} {16} \) 0.75
3 4 3 \ (\ frac {4} {16} \) 0.75
4 1 4 \ (\ frac {6} {16} \) 0.25

\ (\ frac {1} {16} \)

Giá hợp lý của trò chơi này là 0,25 + 0,75 + 0,75 +0,25 = $ 2 & NBSP;

Chúng tôi có nghĩa là gì bởi một giá hợp lý & nbsp;? & Nbsp;

Vâng, bạn có thể nghĩ về điều này một cách trực giác vì bạn sẽ trung lập về việc bạn đang chơi trò chơi này hay cung cấp cho người khác để chơi trò chơi này. Lý do bạn trung lập là trung bình khi chơi trò chơi này, bạn có thể mong đợi không thắng cũng không thua trung bình. & NBSP;\(p\ \text{for any} \ p\(p\ \text{for any} \ p<2\) you would be interested in playing since on average you would make \(2-p\)  $ per game played. For prices greater than 2 you would not be willing to play, however you would be willing to offer someone else to play the game since you would expect to make \(p-2\) $ per iteration of the game. 

Về mặt trò chơi có tính chất này, giá hợp lý và giá trị dự kiến ​​có thể được sử dụng thay thế cho nhau. Nếu được cung cấp để chơi trò chơi cho giá & nbsp; \ (p \ \ text {cho bất kỳ} \ p

& nbsp; bây giờ nói ví dụ bạn được đề nghị chơi trò chơi này trong một năm kể từ ngày hiện tại. Giá nào bạn sẽ sẵn sàng trả ngày hôm nay để chơi trò chơi một năm kể từ bây giờ? & NBSP; Khi xem xét các câu hỏi này giả định rằng bạn có thể kiếm được 5% bằng cách gửi tiền của mình vào tài khoản tiết kiệm của mình. & NBSP;\(Ve^{-rT}\) where V is the value in 1 year's time, r is the interest rate 5% in this case and T is the time. \(Ve^{-rT}\) where V is the value in 1 year's time, r is the interest rate 5% in this case and T is the time. 

Vâng, chúng tôi có thể lấy giá trị mong đợi mà chúng tôi đã xác định ở trên và giảm giá ngược qua thời gian. Để giảm giá một khoản chi trả, chúng tôi sử dụng & nbsp;

\ (2e^{-0,05} \ khoảng $ 1,90 \)

Chúng tôi giả sử ở đây rằng bạn đang & nbsp; Rủi ro trung lập & nbsp; & nbsp; trong đó bạn xem khoản chi trả dự kiến ​​trong một năm chính xác theo cách bạn xem chi trả từ việc đầu tư vào tài khoản tiết kiệm. Mặc dù trong ví dụ giả định này, điều này có vẻ khá lạ, nhưng đó là một khái niệm hữu ích để hiểu các tùy chọn định giá. & NBSP;

Hãy cố gắng khái quát hóa trò chơi ở trên, nói rằng chúng tôi muốn chơi một trò chơi mà chúng tôi được trả 1 đô la cho mỗi h trên một số giá trị ngưỡng. Giả sử chúng tôi lật một đồng xu & nbsp; n lần và chúng tôi được trả 1 đô la cho mỗi h lớn hơn một số giá trị & nbsp; k & nbsp; công thức dưới đây là công thức kết hợp. & Nbsp;

\ (\ binom {n} {k} = \ frac {n!} {k! (n-k)!} \)

import math

def combos(n, i):
    return math.factorial(n) / (math.factorial(n-i)*math.factorial(i))

for i in range(5):
    print(combos(4,i))

#out:
#1.0
#4.0
#6.0
#4.0
#1.0

Chúng ta có thể làm công thức tổ hợp này trong Python như hình dưới đây. Hãy xem liệu chúng ta có thể khôi phục #heads từ ví dụ trên. & NBSP;

Chúng ta cũng có thể phục hồi xác suất của từng kết quả, trong ví dụ lật đồng xu, xác suất p & nbsp; của đầu là 0,5 và k là số lượng đầu quan sát được. & Nbsp;

\ (\ binom {n} {k} \ p^k (1-p)^{n-k} \)

Sau đó, chúng ta có thể tìm thấy khoản thanh toán bằng cách sử dụng công thức sau. & NBSP;

fair_value = 0 
n= 4 # number of coin flips
for k in range(n+1):
    fair_value += combos(n,k)*0.5**k*0.5**(n-k) * k
    
print(fair_value)

#2.0

\ (\ DisplayStyle \ sum_ {k = 0}^n \ binom {n} {k} \ p^k (1-p)

Bây giờ hãy xem xét nếu chúng tôi muốn định giá một trò chơi trong đó chúng tôi nhận được $ 1 mỗi đầu trong một ngưỡng nhất định. Chúng ta hãy lấy một ví dụ trong đó chúng ta lật một đồng xu 10 lần và nhận được 1 đô la cho mỗi đầu trên 6.

fair_value = 0 
n= 10 # number of coin flips
for k in range(7,n+1):
    fair_value += combos(n,k)*0.5**k*0.5**(n-k) * k
    
print(fair_value)

#1.26953125

\ (\ DisplayStyle \ sum_ {k = 7}^{10} \ binom {10} {k} \ 0.5^k (1-0.5)

Giá tùy chọn

Bây giờ chúng ta có một số trực giác liên quan đến cách thức toán học hoạt động, chúng ta sẽ áp dụng các khái niệm tương tự để định giá tùy chọn. Mô hình định giá tùy chọn dựa trên cây phổ biến nhất được biết đến được tạo ra bởi Cox, Ross và Rubinstein. Ở đây chúng tôi trình bày ví dụ được đưa ra trong bài báo năm 1979 của họ: & NBSP;

"Giả sử giá hiện tại của một cổ phiếu là S = $ 50 và vào cuối một khoảng thời gian, giá của nó phải là S* = $ 25 hoặc S* = $ 100. K = $ 50, hết hạn vào cuối kỳ. Cũng có thể vay và cho vay với lãi suất 25%. "

Tất cả thông tin ngoài giá của cuộc gọi có sẵn trong trích xuất từ ​​trên. Chúng tôi sẽ giả định thời gian hết hạn là 1 năm. & NBSP;

Bây giờ hãy xem xét hình thành danh mục đầu tư sau:

1) Viết 3 cuộc gọi ở mức giá c mỗi

2) Mua hai cổ phiếu ở mức $ 50 & NBSP;

3) vay $ 40 ở mức 25% sẽ được trả lại vào cuối kỳ. & NBSP;

Để ngăn chặn chênh lệch giá (lợi nhuận không có rủi ro) & nbsp; Sự bình đẳng sau đây phải giữ.

\ (3C - 100 +40 = 0 \)

Quan sát bảng thanh toán cho cả hai kịch bản. & NBSP;

 cảnh 1Kịch bản 2
Hành động hôm nay & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; \ (s_t = 25 \)\(S_T = 25\)\(S_T = 25\) & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; \ (s_t = 100 \)\(S_T = 100\)\(S_T = 100\)
Viết 3 cuộc gọi ở giá C -& nbsp; -50 * 3 = -150
Mua hai cổ phiếu ở mức $ 50 & NBSP; 50 200
Vay $ 40 ở mức 25%& nbsp; - 50 & nbsp; -50 & nbsp;
Tổng cộng - -

Do đó, C duy nhất thỏa mãn không có điều kiện phân xử là c = $ 20. & nbsp;

Các tác giả giấy sau đó tiếp tục hiển thị các kịch bản trong đó giá C không bằng 20.

"Nếu cuộc gọi không được định giá là 20 đô la, lợi nhuận chắc chắn sẽ có thể xảy ra. Đặc biệt, nếu C = 25 đô la, thì hàng rào trên sẽ mang lại một lượng tiền mặt hiện tại là 15 đô la và sẽ không có khoản lãi hoặc lỗ nào trong tương lai. mặt khác, nếu C = $ 15, thì điều tương tự có thể được thực hiện bằng cách mua 3 cuộc gọi, bán ngắn 2 cổ phiếu và cho vay $ 40. "

& nbsp; ở trên được gọi là đối số không có giá để định giá tùy chọn. & nbsp;

Chúng ta hãy giới thiệu hai thuật ngữ & nbsp; S_d \) & nbsp; đại diện cho giá ở vùng dưới. Cũng lưu ý đến giá trị & nbsp; \ (p \) & nbsp; là đại diện cho xác suất trung lập rủi ro của một động thái UP. Let & nbsp; \ (r = (1 + lãi) \)\(u\ \text{and} \ d\) which denote up movement and down movement respectively. \(S_u\) represents the price at the up state, and \(S_d\) represents the price at the downstate. Also take note of the value \(p\) which is representative of the risk neutral probability of an up move. Let \(r = (1 + interest)\)\(u\ \text{and} \ d\) which denote up movement and down movement respectively. \(S_u\) represents the price at the up state, and \(S_d\) represents the price at the downstate. Also take note of the value \(p\) which is representative of the risk neutral probability of an up move. Let \(r = (1 + interest)\)

\ (p = \ frac {r- d} {u -d} = \ frac {1.25- 0.5} {2 -0.5} = 0,5 \)

Hướng dẫn binomial option pricing python - quyền chọn nhị thức đặt giá python

& NBSP;\(\text{binomial value} = \frac{1}{r}[max(S_u - K,0) \times p+ max(S_d-K,0) \times (1-p)]\)\(\text{binomial value} = \frac{1}{r}[max(S_u - K,0) \times p+ max(S_d-K,0) \times (1-p)]\)

Cắm các số vào

\ (20 = \ frac {1} {1.25} [50 \ lần 0,5+ 0 (1-0.5)] \)

Tham khảo ví dụ lật đồng xu trong ví dụ được hiển thị ở đầu tài liệu, điều này có thể được xem trong bối cảnh chơi trò chơi lật đồng xu trong 1 năm. & NBSP;

& nbsp; xác định u và d

Trong ví dụ trên cả & nbsp; u & nbsp; và & nbsp; d & nbsp; trong đó được đưa ra lần lượt là 2 và 0,5. Tuy nhiên, trong thực tế, các giá trị này sẽ không có sẵn, để ước tính các giá trị này, chúng ta có thể sử dụng biến động của tài sản. Chúng ta hãy lấy một ví dụ khác trong đó có giao dịch cổ phiếu với giá 100 đô la, tùy chọn cuộc gọi với giá thực hiện là 105 đô la và thời gian đáo hạn là 6 tháng. Bạn ước tính sự biến động từ dữ liệu lịch sử ở mức 40%. Giả sử chúng tôi muốn ước tính giá bằng cách sử dụng 4 bước so với cây một bước được hiển thị ở trên, để làm điều này, chúng tôi sẽ cần sử dụng số mũ tự nhiên vì chúng có thuộc tính sau & nbsp; \ (e^ae^b = e^{{ a+b} \) & nbsp; Điều này cũng hữu ích để áp dụng cho tỷ lệ miễn phí rủi ro để thể hiện liên tục & nbsp; gộp. & nbsp;\(e^ae^b = e^{a+b}\) this is also useful to apply to the risk free rate to represent continuous compounding. \(e^ae^b = e^{a+b}\) this is also useful to apply to the risk free rate to represent continuous compounding. 

\ (u = e^{\ sigma \ sqrt {\ delta t}} \\ \\ d = e^{-\ sigma \ sqrt

\ (p = \ frac {e^{(r \ delta t) - d}} {u -d} \)

& nbsp; vì chúng tôi muốn sử dụng 4 giai đoạn để định giá tùy chọn:

\ (u = e^{0.4 \ sqrt {\ frac {1} {2} \ frac {1} {4}}} \)

\ (d = e^{-0.4 \ sqrt {\ frac {1} {2} \ frac {1} {4}}} \)

\ (p = \ frac {e^{(0,05 \ frac {1} {2} \ frac {1} {4})} - d} {u -d} \)

Vì chúng tôi chỉ xem xét các lựa chọn châu Âu chỉ có sẵn để thực hiện khi hết hạn, giá cổ phiếu thiết bị đầu cuối sẽ trông như hình dưới đây. Nếu chúng tôi đang xem xét các tùy chọn của Mỹ là cuộc gọi có thể được thực hiện bất cứ lúc nào, chúng tôi sẽ cần xem xét giá tại mỗi bước thời gian như thể hiện trên trục X. & NBSP;

Để có được các giá trị này trong Python, chúng ta có thể sử dụng các giá trị sau để lấy giá cổ phiếu đầu cuối và giá trị tùy chọn tại mỗi nút. & NBSP;

N = 4
S0  = 100
T = 0.5
sigma = 0.4
dt = T/N
K =105
r = 0.05
u = np.exp( sigma * np.sqrt(dt) )
d =  np.exp( -sigma * np.sqrt(dt) )
p = ( np.exp(r*dt) - d) / (u -d)

for k in reversed(range(N+1)):
    ST = S0 * u**k * d ** (N-k)
    print(round(ST,2), round(max(ST-K,0),2))


#176.07 71.07
#132.69 27.69
#100.0 0
#75.36 0
#56.8 0

& nbsp; Xác suất tại mỗi nút & nbsp; \ (p^*\) & nbsp; được đưa ra bởi những điều sau đây. Đặt k là số lượng di chuyển lên trong cổ phiếu. & Nbsp;\(p^*\)  is given by the following. Let k be the number of up moves in the stock. \(p^*\)  is given by the following. Let k be the number of up moves in the stock. 

\ (p^* = \ binom {n} {k} \ p^k (1-p) \ Delta t) - d}} {u -d})^k (1- \ frac {e^{(r \ delta t) - d}} {u -d})^{n -k} \)

def combos(n, i):
    return math.factorial(n) / (math.factorial(n-i)*math.factorial(i))
    
for k in reversed(range(N+1)):
    p_star = combos(N, k)*p**k *(1-p)**(N-k)
    print(round(p_star,2))
    
#0.06
#0.24
#0.37
#0.26
#0.07

& nbsp; tìm giá trị của cuộc gọi

Giá trị của cuộc gọi sau đó chỉ đơn giản là một trung bình có trọng số của các giá trị ở mỗi nút nhân với giá trị xác suất tương ứng. & NBSP;

\ (C_k = \ DisplayStyle \ sum_k^n \ binom {n} {k} \ p^k (1-p) ) \)

C=0   
for k in reversed(range(N+1)):
    p_star = combos(N, k)*p**k *(1-p)**(N-k)
    ST = S0 * u**k * d ** (N-k)
    C += max(ST-K,0)*p_star
    
print(np.exp(-r*T)*C)

#10.60594883990603

Tập lệnh đầy đủ từ phần này có thể được tìm thấy ở cuối tài liệu được dán nhãn 'Công việc thô' & NBSP;

& nbsp; Hãy đặt tập lệnh ở trên & nbsp; vào một hàm để chúng tôi có thể định giá cũng và cũng tăng kích thước bước & nbsp;\(\Delta t\) easily to see it's effect on the option price. \(\Delta t\) easily to see it's effect on the option price. 

N =4
S0  = 100
T = 0.5
sigma = 0.4
K = 105
r = 0.05

def binom_EU1(S0, K , T, r, sigma, N, type_ = 'call'):
    dt = T/N
    u = np.exp(sigma * np.sqrt(dt))
    d = np.exp(-sigma * np.sqrt(dt))
    p = (  np.exp(r*dt) - d )  /  (  u - d )
    value = 0 
    for i in range(N+1):
        node_prob = combos(N, i)*p**i*(1-p)**(N-i)
        ST = S0*(u)**i*(d)**(N-i)
        if type_ == 'call':
            value += max(ST-K,0) * node_prob
        elif type_ == 'put':
            value += max(K-ST, 0)*node_prob
        else:
            raise ValueError("type_ must be 'call' or 'put'" )
    
    return value*np.exp(-r*T)


binom_EU1(S0, K, T, r,sigma, N)

#10.605948839906029

Chức năng trên đồng ý với giá chúng tôi nhận được từ phần công việc thô. Bây giờ chúng ta có thể tăng số lượng các bước để xem ảnh hưởng của giá của cuộc gọi. & NBSP;

Lưu ý rằng khi chúng tôi tăng n giá trị của cuộc gọi dường như hội tụ lên 10,22 đô la. Giá này thực sự là kết quả chúng tôi sẽ nhận được từ công thức scholes màu đen. & Nbsp;

Ns = [2, 4, 6, 8, 10, 20, 50, 100, 200, 300, 400,500, 600]
    

for n in Ns:
    c = binom_EU1(S0, K, T, r,sigma, n)
    print(f'Price is {n} steps is {round(c,2)}')
    
    
#Price is 2 steps is 9.99
#Price is 4 steps is 10.29
#Price is 6 steps is 10.35
#Price is 8 steps is 10.37
#Price is 10 steps is 10.37
#Price is 20 steps is 10.34
#Price is 50 steps is 10.27
#Price is 100 steps is 10.22
#Price is 200 steps is 10.22
#Price is 300 steps is 10.23
#Price is 400 steps is 10.22
#Price is 500 steps is 10.22
#Price is 600 steps is 10.22 

Mô hình tùy chọn lật đồng xu. & NBSP;

Khi chúng ta nói về mô hình tùy chọn lật đồng xu, hãy xem xét một cổ phiếu có đường dẫn được xác định bởi một đồng tiền lật liên tục giữa ngày nay và ngày hết hạn, khi đồng xu lật đầu cổ phiếu tăng lên và khi đuôi của cổ phiếu giảm.

Trong thực tế, những gì chúng ta đang nói ở đây là lấy giới hạn của mô hình nhị thức khi chúng ta cho phép & nbsp; & nbsp; \ (\ delta t \ rightarrow 0 \) & nbsp ;.\(\Delta t \rightarrow 0\) .\(\Delta t \rightarrow 0\) .

Xem xét những gì xảy ra với các tham số của mô hình khi điều này xảy ra. Vâng, chúng tôi sẽ nhận ra rằng & nbsp; \ (u \) & nbsp; tiếp cận 1 từ bên phải, & nbsp; \ (d \) & nbsp; -d} {u-d} \ rightarrow 0,5 \ \) & nbsp; vì vậy điều này có thể được biểu diễn dưới dạng lật đồng xu. & nbsp;\(u\) approaches 1 from the right, \(d \) approaches 1 from the left and the probability of an up move \( \frac{e^0-d}{u-d} \rightarrow 0.5\ \) so therefore this can be represented as a coin flip. \(u\) approaches 1 from the right, \(d \) approaches 1 from the left and the probability of an up move \( \frac{e^0-d}{u-d} \rightarrow 0.5\ \) so therefore this can be represented as a coin flip. 

Chúng ta hãy xem xét đi một đường dẫn 100.000 lần lật giữ các tham số của mô hình của chúng tôi giống nhau. Một lần nữa, chúng tôi không thực sự lấy giới hạn đúng cách ở đây, chỉ là một xấp xỉ gần hơn, xem xét việc cắt các gia số trên trục X thành các gia số nhỏ vô hạn để có ý tưởng về giới hạn thực. & NBSP;

________số 8

Vậy điều đó có liên quan gì đến mô hình nhị thức? Có lẽ khi chúng ta tạo ra nói 1000 con đường như vậy, nó sẽ trở nên rõ ràng. Lưu ý rằng điều này hãy mất một thời gian trên máy tính của bạn !!!!Note that this make take a while on your computer!!!!Note that this make take a while on your computer!!!!

paths = np.random.choice([Heads,Tails],p=[p,1-p],size=(N,1000))
plt.plot(paths.cumprod(axis=0)*100, color='black');

Cân nhắc ở bước 100.000 ở trên và lấy các giá trị thiết bị đầu cuối của lô trên. Việc trả tiền cho một cuộc gọi sau đó sẽ trở thành:

A

Bây giờ so sánh điều này với một mạng có độ phân giải phù hợp như hình dưới đây. Lưu ý rằng mạng lưới đóng vai trò là một xấp xỉ cho phiên bản liên tục & nbsp; ở trên. & Nbsp;

Phiên bản liên tục & nbsp; được gọi là chuyển động Brownian hình học, và trên thực tế, đây chính xác là những gì Cox, Ross và Rubinstein đã xấp xỉ trong bài báo của họ. Rõ ràng phương thức mạng cung cấp một xấp xỉ chính xác về giá nếu số bước đủ lớn. & NBSP;

Giá các lựa chọn thực tế trên Yahoo Finance.

Trong phần này sẽ thử mô hình của chúng tôi về dữ liệu từ Yahoo Finance, chúng tôi đã trình bày trước đây & NBSP; Cách tương tác với API Tùy chọn. Vấn đề chúng tôi có thể sẽ gặp phải, là chúng tôi đang định giá các tùy chọn này cho TSLA bằng cách sử dụng hết hạn các tùy chọn châu Âu và bản thân các tùy chọn rất có thể là người Mỹ. Chúng tôi cũng giả sử biến động không đổi 50% (được chọn để thuận tiện. & NBSP;

Lưu ý rằng dữ liệu này đã được thực hiện vào ngày 21 tháng 12 năm 2020. Rõ ràng điều này sẽ thay đổi nếu bạn đọc lại kịch bản. & NBSP;

fair_value = 0 
n= 4 # number of coin flips
for k in range(n+1):
    fair_value += combos(n,k)*0.5**k*0.5**(n-k) * k
    
print(fair_value)

#2.0
0

Có vẻ như chúng tôi đã không thể sao chép chuỗi tùy chọn cho hết hạn này. Trong một vài bài viết tiếp theo, chúng tôi sẽ cố gắng cải thiện kết quả này. Chúng tôi sẽ để nó cho người đọc kiểm tra các lần đặt và ở các lần hết hạn khác nhau. & NBSP;

Công việc thô

fair_value = 0 
n= 4 # number of coin flips
for k in range(n+1):
    fair_value += combos(n,k)*0.5**k*0.5**(n-k) * k
    
print(fair_value)

#2.0
1