螢幕擷取畫面 2024-05-02 092050.png

ImplyVolatility(漲跌0.015)練習.xlsx

股票機率模型與期望報酬_2024-05-02.pdf

Section 1

import pandas as pd
import numpy as np
import tensorflow as tf
from sklearn.model_selection import train_test_split

columns = ['IV_C0', 'Std_C0', 'IV_P0', 'Std_P0',
           'IV_C1', 'Std_C1', 'IV_P1', 'Std_P1',
           'IV_C2', 'Std_C2', 'IV_P2', 'Std_P2',
           'IV_C3', 'Std_C3', 'IV_P3', 'Std_P3', 'Target']

file = 'ImplyVolatility(漲跌0.015)練習.xlsx'
path = "C:/Users/USER\\Desktop/112-2/大數據統計分析AA/finance/" + file
D = pd.read_excel(path, usecols = columns)

x_train, x_test, y_train, y_test = train_test_split(D[columns[0:16]],
                                                    D['Target'],
                                                    test_size = 0.2)
# print(len(y_train))
# print(len(y_test))
# print(D[columns[0:16]])

category = 2 # 標的漲跌有機Label答案Y
dim = 16     # 以幾種Feature特徵X,來預測標的漲跌
y_train2 = tf.keras.utils.to_categorical(y_train, num_classes = (category))
y_test2 = tf.keras.utils.to_categorical(y_test, num_classes = (category))

# 建立模型
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Dense(units = 40,
        activation = tf.nn.relu,
        input_dim = dim))
model.add(tf.keras.layers.Dense(units = 40,
        activation = tf.nn.relu))
model.add(tf.keras.layers.Dense(units = category,
        activation = tf.nn.softmax))
model.compile(optimizer = 'adam',
        loss = tf.keras.losses.categorical_crossentropy,
        metrics = ['accuracy'])

# 繪圖會用到歷史資料
history = model.fit(x_train, y_train2, epochs = 2500, batch_size = 100)

# 測試
score = model.evaluate(x_test, y_test2, batch_size = 16)
print("score:", score) # 輸出是 loss value & metrics values
print("準確率:", score[1])

predict2 = model.predict(x_test)
predict2 = np.argmax(predict2, axis = 1)
print("predict_classes:", predict2[4])
# print(y_test2)
test2 = np.argmax(y_test2, axis = 1)
print("y_test", test2)

tem = 0
print("  編號    預測    答案")
for i in range(len(y_test)):
    print("%5d\\t%5d\\t%5d" % (i, predict2[i], test2[i]))
    if predict2[i] == test2[i]:
        tem += 1
print("準確率 = %.6f" % (tem/len(y_test)))

Section 2

import pandas as pd
import numpy as np
import tensorflow as tf
from sklearn.model_selection import train_test_split

columns = ['IV_C0', 'Std_C0', 'IV_P0', 'Std_P0',
           'IV_C1', 'Std_C1', 'IV_P1', 'Std_P1',
           'IV_C2', 'Std_C2', 'IV_P2', 'Std_P2',
           'IV_C3', 'Std_C3', 'IV_P3', 'Std_P3', 'Target']

file = 'ImplyVolatility(漲跌0.015)練習.xlsx'
path = "C:/Users/USER\\Desktop/112-2/大數據統計分析AA/finance/" + file
D = pd.read_excel(path, usecols = columns)

for i in range(30):
    x_train, x_test, y_train, y_test = train_test_split(D[columns[0:16]],
                                                        D['Target'],
                                                        test_size = 0.2)
    # print(len(y_train))
    # print(len(y_test))
    # print(D[columns[0:16]])
    print("第 %d 次訓練:" % (i+1))
    
    category = 2 # 標的漲跌有機Label答案Y
    dim = 16     # 以幾種Feature特徵X,來預測標的漲跌
    y_train2 = tf.keras.utils.to_categorical(y_train, num_classes = (category))
    y_test2 = tf.keras.utils.to_categorical(y_test, num_classes = (category))
    
    # 建立模型
    model = tf.keras.models.Sequential()
    model.add(tf.keras.layers.Dense(units = 40,
            activation = tf.nn.relu,
            input_dim = dim))
    model.add(tf.keras.layers.Dense(units = 40,
            activation = tf.nn.relu))
    model.add(tf.keras.layers.Dense(units = category,
            activation = tf.nn.softmax))
    model.compile(optimizer = 'adam',
            loss = tf.keras.losses.categorical_crossentropy,
            metrics = ['accuracy'])
    
    # 繪圖會用到歷史資料
    history = model.fit(x_train, y_train2, epochs = 2500, batch_size = 100, verbose = 0)
    
    # 測試
    score = model.evaluate(x_test, y_test2, batch_size = 16)
    # print("score:", score) # 輸出是 loss value & metrics values
    print("第 %d 次訓練: 準確率:%.16f" % ((i+1), score[1]))

'''
predict2 = model.predict(x_test)
predict2 = np.argmax(predict2, axis = 1)
print("predict_classes:", predict2[4])
# print(y_test2)
test2 = np.argmax(y_test2, axis = 1)
print("y_test", test2)

tem = 0
print("  編號    預測    答案")
for i in range(len(y_test)):
    print("%5d\\t%5d\\t%5d" % (i, predict2[i], test2[i]))
    if predict2[i] == test2[i]:
        tem += 1
print("準確率 = %.6f" % (tem/len(y_test)))
'''

ImplyVolatility(漲跌0.015)練習_section2.xlsx