Section 1 統計檢定大於零的顯著性
# -*- 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()
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()