Section 1 統計檢定大於零的顯著性

檢定統計.xlsx

# -*- coding: utf-8 -*-
'''
Created on Sat Mar 25 20:05:00 2023

@author: tcm73
'''

import pandas as pd
from scipy.stats import ttest_1samp

# 讀取 Excel 文件,獲取需要進行假設檢驗的數據
file = '檢定統計.xlsx'
path = 'C:/Users/USER/Desktop/112-2/大數據統計分析AA/finance/' + file
df = pd.read_excel(path, sheet_name = '工作表1')

# 獲取數據
data = df['test'].values

ave = sum(data)/len(data)

# 進行假設檢驗
# 函數ttest_1samp的第一個參數是要進行檢定的資料,
# 第二個參數是檢定的原假設(在這個例子中是樣本均值等於 0),
# 第三個參數是檢定的類型(在這個例子中是單邊檢定且方向是大於)。
# 這個函數將退回 T 值和 P 值。最後,我們可以根據 P 值判斷檢定結果是否顯著
alpha = 0.01 # 顯著水準
t_statistic, p_value = ttest_1samp(data, 0, alternative = 'greater')

# 顯示假設檢驗結果
# 假設檢定 H0: 數據=0, H1: 數據>0
if p_value < alpha:
    print('檢定統計量 %f' % t_statistic)
    print('P-Value = %f' % p_value)
    print("平均值 = %f" % ave)
    print("拒絕虛無假設H0: 數據=0,不拒絕對立假設H1: 數據>0")
    print("檢定結果顯著,也就是樣本均值顯著大於 0")
else:
    print(t_statistic, p_value)
    print("平均值 = %f" % ave)
    print('接受虛無假設H0: 數據=0,拒絕對立假設H1: 數據>0')
    print('也就是檢定結果不顯著,無法拒絕樣本均值等於 0 的原假設')

Section 2 B-S評價

# -*- coding: utf-8 -*-
"""
Created on Tue May 7 16:26:55 2024
@author: tcm7324
"""

from scipy.stats import norm
from math import sqrt, exp, log

def BS(X):
    d1 = (log(S/K) + (R + Sigma*Sigma/2)*T)/(Sigma*sqrt(T))
    d2 = d1 - Sigma*sqrt(T)
    
    if X == "C":
        return S*norm.cdf(d1) - K*exp(-R*T)*norm.cdf(d2)
    if X == "P":
        return K*exp(-R*T)*norm.cdf(-d2) - S*norm.cdf(-d1)

def main():
    global S, T, R, K, Sigma
    
    S = 100
    K = 100
    Sigma = 0.3
    R = 0.01
    T = 1
    
    print("買價(Call)價格 = %f" % BS("C"))
    print("賣價(Put)價格 = %f" % BS("P"))
   
main()

螢幕擷取畫面 2024-05-09 102628.png

Section 3 二分法求解

# -*- coding: utf-8 -*-
"""
Created on Tue May 7 16:37:39 2024
@author: tcm7324
"""

def f(x):
    return pow(x,2)-2

def solve():
    a = 1.00001
    b = 2.00001
    for i in range(4096):
        c = (b+a)/2
        if b-c < pow(10,-6):
            break
        else:
            if f(b)*f(c)<0:
                a=c
            else:
                b=c
    return c

def main():
    print("函數求解 = %f" % solve())

main()