import pandas as pd
import yfinance as yf
# 定義35支半導體股票代號
symbols = ["NVDA", "TSM", "AVGO", "AMD", "QCOM", "INTC", "TXN", "MU", "ARM",
"ADI", "NXPI", "MRVL", "MCHP", "STM", "MPWR", "ON","GFS","ASX",
"UMC", "SWKS", "QRVO", "LSCC", "AMKR", "MTSI", "RMBS", "ALGM",
"CRUS", "SLAB", "POWI", "SYNA", "WOLF", "TSEM", "FORM", "DIOD", "VSH"]
# 設定期間(train)
start_train_date = "2020-07-01"
end_train_date = "2023-12-31"
start_test_date = "2024-01-01"
end_test_date = "2024-03-31"
# 迴圈處理每支股票
for symbol in symbols:
# 下載股價資料
stock_data = yf.download(symbol, start=start_train_date, end=end_train_date)
# 選擇需要的欄位
stock_data = stock_data[["Open", "High", "Low", "Close", "Volume"]]
# 儲存資料到CSV檔案,檔名為股票代號
file_name = f"{symbol}_stock_prices_train.csv"
stock_data.to_csv(file_name)
# 下載股價資料
stock_data = yf.download(symbol, start=start_test_date, end=end_test_date)
# 選擇需要的欄位
stock_data = stock_data[["Open", "High", "Low", "Close", "Volume"]]
# 儲存資料到CSV檔案,檔名為股票代號
file_name = f"{symbol}_stock_prices_test.csv"
stock_data.to_csv(file_name)
shift用程式碼
# Import the libraries
import numpy as np
import matplotlib.pyplot as plt # for 畫圖用
import pandas as pd
from scipy.stats import pearsonr
from sklearn.preprocessing import MinMaxScaler # Feature Scaling
# 建立 長短期記憶 LSTM 模型 Import the Keras libraries and packages
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
from keras.layers import Dropout
#symbols = ["NVDA", "TSM", "AVGO", "AMD", "QCOM", "INTC", "TXN", "MU", "ARM",
# "ADI", "NXPI", "MRVL", "MCHP", "STM", "MPWR", "ON","GFS","ASX",
# "UMC", "SWKS", "QRVO", "LSCC", "AMKR", "MTSI", "RMBS", "ALGM",
# "CRUS", "SLAB", "POWI", "SYNA", "WOLF", "TSEM", "FORM", "DIOD", "VSH"]
# 建立空的列表儲存預測結果
#all_predicted_stock_prices = []
all_results = []
all_correlation_coefficient = []
all_p_value = []
#變更股票代號
symbol = str('UMC')
#迴圈次數
x = 10
#學習次數
count = 1000
#size
size = 128
#-----------------------------------------------------------------------------
for i in range(x):
number = i+1
# 載入訓練資料
dataset_train = pd.read_csv(symbol + '_stock_prices_train.csv') # 讀取訓練集
training_set = dataset_train.iloc[:, 4:5].values # 取「Close」欄位值
# 載入測試資料
dataset_test = pd.read_csv(symbol + '_stock_prices_test.csv') # 讀取測試集
real_stock_price = dataset_test.iloc[:, 4:5].values # 取「Close」欄位值
# 將資料標準化成(0,1)之間
sc = MinMaxScaler(feature_range = (0, 1))
training_set_scaled = sc.fit_transform(training_set)
m = 60 # 預測點的前 m 天的資料
n = len(dataset_test) # 預測未來 n 天股價走勢
print(len(dataset_train))
X_train = [] #預測點的前 m 天的資料
y_train = [] #預測點
for j in range(m, len(dataset_train)): # 1258 是訓練集總數
X_train.append(training_set_scaled[j-m:j, 0])
y_train.append(training_set_scaled[j, 0])
X_train, y_train = np.array(X_train), np.array(y_train) # 轉成numpy array的格式,以利輸入 RNN
print(X_train.shape[0], X_train.shape[1])
# 原X_train 是 2-dimension,將它 reshape 成 3-dimension:
# [stock prices, timesteps, indicators]
X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], 1))
# 建立 長短期記憶 LSTM 模型
# Initialising the RNN
regressor = Sequential()
# Adding the first LSTM layer and some Dropout regularisation
regressor.add(LSTM(units = 50, return_sequences = True, input_shape = (X_train.shape[1], 1)))
regressor.add(Dropout(0.2))
# Adding a second LSTM layer and some Dropout regularisation
regressor.add(LSTM(units = 50, return_sequences = True))
regressor.add(Dropout(0.2))
# Adding a third LSTM layer and some Dropout regularisation
regressor.add(LSTM(units = 50, return_sequences = True))
regressor.add(Dropout(0.2))
# Adding a fourth LSTM layer and some Dropout regularisation
regressor.add(LSTM(units = 50))
regressor.add(Dropout(0.2))
# Adding the output layer
regressor.add(Dense(units = 1))
# Compiling
regressor.compile(optimizer = 'adam', loss = 'mean_squared_error')
# 進行訓練
regressor.fit(X_train, y_train, epochs = count, batch_size = size)
# 測試
dataset_total = pd.concat((dataset_train['Open'], dataset_test['Open']), axis = 0)
inputs = dataset_total[len(dataset_total) - len(dataset_test) - m:].values
inputs = inputs.reshape(-1,1)
inputs = sc.transform(inputs) # Feature Scaling
X_test = []
for k in range(m, m+n): # m+n = 先前的m天資料+2017年的n天資料
X_test.append(inputs[k-m:k, 0])
X_test = np.array(X_test)
X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1)) # Reshape 成 3-dimension
predicted_stock_price = regressor.predict(X_test)
predicted_stock_price = sc.inverse_transform(predicted_stock_price) # to get the original scale
#將二維陣列轉換維一維陣列
real_stock_price = np.array (real_stock_price[0:n])
real_stock_price = real_stock_price.ravel()
predicted_stock_price = np.array (predicted_stock_price)
predicted_stock_price = predicted_stock_price.ravel()
date = pd.DataFrame({
"Real Stock Price": real_stock_price,
"predicted Dtock Price": predicted_stock_price
})
corr = date.corr(method="pearson")
print(corr)
t = pearsonr(real_stock_price, predicted_stock_price)
print(t)
all_results.append((t[0], t[1]))
all_correlation_coefficient.append(t[0])
all_p_value.append(t[1])
# 真實股價與預測股價均為二維陣列
#print(real_stock_price[0:n])
#print(predicted_stock_price)
# 繪製實際股價
plt.plot(real_stock_price[0:n], color='red', label='Real '+ symbol + ' Stock Price')
# 繪製每次的預測股價
plt.plot(predicted_stock_price, color='blue', label='Prediction '+ symbol + ' Stock Price')
# 設置標題,將 Pearson 相關係數添加到標題中
title = symbol + ' Stock Price Prediction\\ncorrelation_coefficient: {:.6f}'.format(t[0]) # 使用每次迭代的 Pearson 相關係數
plt.title(title)
plt.xlabel('Time')
plt.ylabel(symbol + ' Stock Price')
plt.legend()
# 將圖片保存
plt.savefig(symbol +' stock_price_prediction_{}.png'.format(number)) # 使用索引來命名圖片文件
plt.show()
plt.close() # 關閉當前的圖表,以便下一次迭代可以繪製新的圖表
print('-------------------------------------------------------------------------------------------------')
rise = 0
fall = 0
predict = []
for l in range(len(real_stock_price)-1):
if (real_stock_price[l+1] > real_stock_price[l] and predicted_stock_price[l+1] > predicted_stock_price[l]):
#print('漲,預測成功')
rise += 1
predict.append(1)
elif real_stock_price[l+1] < real_stock_price[l] and predicted_stock_price[l+1] < predicted_stock_price[l]:
#print('跌,預測成功')
fall += 1
predict.append(1)
else:
#print('預測失敗')
predict.append(0)
#print(predict)
print('漲預測成功: ', rise)
print('跌預測成功: ', fall)
print('預測失敗: ', len(real_stock_price)-rise-fall)
print('準確率', (rise+fall) / len(real_stock_price))
results_data = [
['漲預測成功', rise],
['跌預測成功', fall],
['預測失敗', len(real_stock_price)-rise-fall],
['準確率', (rise+fall) / len(real_stock_price)]
]
#將每次的解果輸出成CSV檔
column_names = ['預測類型', '次數/準確率']
all_results_df = pd.DataFrame(results_data, columns=column_names)
all_results_df.to_csv(symbol + '_predict_'+ str(number) +'.csv', encoding='big5', index=False)
print('----------------------------------------------------------------------------------------------------\\n')
#預測資料向左偏移計算
shift = 1
shift_end = 5
for shift in range(shift,shift_end + 1):
trimmed_real_stock_price = real_stock_price[0:-shift]
trimmed_predicted_stock_price = predicted_stock_price[shift:]
plt.plot(trimmed_real_stock_price, color='red', label='Real '+ symbol + ' Stock Price')
plt.plot(trimmed_predicted_stock_price, color='blue', label='Prediction '+ symbol + ' Stock Price')
title = symbol + ' Left_Shift: {}'.format(shift)
plt.title(title)
plt.xlabel('Time')
plt.ylabel(symbol + ' Stock Price')
plt.legend()
plt.savefig(symbol +' stock_price_prediction_{}_Left_Shift_{}.png'.format(number,shift))
plt.show()
plt.close()
rise = 0
fall = 0
predict = []
for o in range(len(trimmed_real_stock_price)-shift):
if (trimmed_real_stock_price[o+1] > trimmed_real_stock_price[o] and trimmed_predicted_stock_price[o+1] > trimmed_predicted_stock_price[o]):
#print('漲,預測成功')
rise += 1
predict.append(1)
elif trimmed_real_stock_price[o+1] < trimmed_real_stock_price[o] and trimmed_predicted_stock_price[o+1] < trimmed_predicted_stock_price[o]:
#print('跌,預測成功')
fall += 1
predict.append(1)
else:
#print('預測失敗')
predict.append(0)
#print(predict)
print('漲預測成功: ', rise)
print('跌預測成功: ', fall)
print('預測失敗: ', len(trimmed_real_stock_price)-rise-fall)
print('準確率', (rise+fall) / len(trimmed_real_stock_price))
results_data = [
['漲預測成功', rise],
['跌預測成功', fall],
['預測失敗', len(trimmed_real_stock_price)-rise-fall],
['準確率', (rise+fall) / len(trimmed_real_stock_price)]
]
#將每次的解果輸出成CSV檔
column_names = ['預測類型', '次數/準確率']
all_results_df = pd.DataFrame(results_data, columns=column_names)
all_results_df.to_csv(symbol + '_predict_' + str(number) + '_Left_shift_'+ str(shift) +'.csv', encoding='big5', index=False)
print('----------------------------------------------------------------------------------------------------\\n')
#真實資料向右偏移計算
shift = 1
shift_end = 5
for shift in range(shift,shift_end + 1):
trimmed_real_stock_price = real_stock_price[shift:]
trimmed_predicted_stock_price = predicted_stock_price[:-shift]
plt.plot(trimmed_real_stock_price, color='red', label='Real '+ symbol + ' Stock Price')
plt.plot(trimmed_predicted_stock_price, color='blue', label='Prediction '+ symbol + ' Stock Price')
title = symbol + ' Right_Shift: {}'.format(shift)
plt.title(title)
plt.xlabel('Time')
plt.ylabel(symbol + ' Stock Price')
plt.legend()
plt.savefig(symbol +' stock_price_prediction_{}_Right_Shift_{}.png'.format(number,shift))
plt.show()
plt.close()
rise = 0
fall = 0
predict = []
for o in range(len(trimmed_real_stock_price)-shift):
if (trimmed_real_stock_price[o+1] > trimmed_real_stock_price[o] and trimmed_predicted_stock_price[o+1] > trimmed_predicted_stock_price[o]):
#print('漲,預測成功')
rise += 1
predict.append(1)
elif trimmed_real_stock_price[o+1] < trimmed_real_stock_price[o] and trimmed_predicted_stock_price[o+1] < trimmed_predicted_stock_price[o]:
#print('跌,預測成功')
fall += 1
predict.append(1)
else:
#print('預測失敗')
predict.append(0)
#print(predict)
print('漲預測成功: ', rise)
print('跌預測成功: ', fall)
print('預測失敗: ', len(trimmed_real_stock_price)-rise-fall)
print('準確率', (rise+fall) / len(trimmed_real_stock_price))
results_data = [
['漲預測成功', rise],
['跌預測成功', fall],
['預測失敗', len(trimmed_real_stock_price)-rise-fall],
['準確率', (rise+fall) / len(trimmed_real_stock_price)]
]
#將每次的解果輸出成CSV檔
column_names = ['預測類型', '次數/準確率']
all_results_df = pd.DataFrame(results_data, columns=column_names)
all_results_df.to_csv(symbol + '_real_' + str(number) + '_Right_shift_'+ str(shift) +'.csv', encoding='big5', index=False)
print('----------------------------------------------------------------------------------------------------\\n')
#計算平均值
average_correlation_coefficient = np.mean(all_correlation_coefficient)
average_p_value = np.mean(all_p_value)
sum = [average_correlation_coefficient,average_p_value]
all_results.append(sum)
#將每次的解果輸出成CSV檔
column_names = ['correlation_coefficient', 'p_value']
all_results_df = pd.DataFrame(all_results, columns=column_names)
all_results_df.to_csv(symbol + '_pearson_coefficients.csv', encoding='big5', index=False)
檔案壓縮下載
import shutil
# 資料夾的相對路徑
folder_to_compress = "/content/"
# 壓縮後的檔案名稱
zip_file_name = "/compressed_folder"
# 使用 make_archive 函式壓縮資料夾
shutil.make_archive(zip_file_name, 'zip', folder_to_compress)
# Import the libraries
import numpy as np
import matplotlib.pyplot as plt # for 畫圖用
import pandas as pd
from scipy.stats import pearsonr
from sklearn.preprocessing import MinMaxScaler # Feature Scaling
# 建立 長短期記憶 LSTM 模型 Import the Keras libraries and packages
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
from keras.layers import Dropout
#symbols = ["NVDA", "TSM", "AVGO", "AMD", "QCOM", "INTC", "TXN", "MU", "ARM",
# "ADI", "NXPI", "MRVL", "MCHP", "STM", "MPWR", "ON", "LRCX", "ASX",
# "UMC", "SWKS", "QRVO", "LSCC", "AMKR", "MTSI", "RMBS", "ALGM",
# "CRUS", "SLAB", "POWI", "SYNA", "WOLF", "TSEM", "FORM", "DIOD", "VSH"]
#變更股票代號
symbol = str('NVDA')
#迴圈次數
x = 10
#學習次數
count = 100
#size
size = 32
#-----------------------------------------------------------------------------
for i in range(x):
number = i+1
# 載入訓練資料
dataset_train = pd.read_csv(symbol + '_stock_prices_train.csv') # 讀取訓練集
training_set = dataset_train.iloc[:, 4:5].values # 取「Close」欄位值
# 載入測試資料
dataset_test = pd.read_csv(symbol + '_stock_prices_test.csv') # 讀取測試集
real_stock_price = dataset_test.iloc[:, 4:5].values # 取「Close」欄位值
# 將資料標準化成(0,1)之間
sc = MinMaxScaler(feature_range = (0, 1))
training_set_scaled = sc.fit_transform(training_set)
m = 60 # 預測點的前 m 天的資料
n = len(dataset_test) # 預測未來 n 天股價走勢
print(len(dataset_train))
X_train = [] #預測點的前 m 天的資料
y_train = [] #預測點
for j in range(m, len(dataset_train)): # 1258 是訓練集總數
X_train.append(training_set_scaled[j-m:j, 0])
y_train.append(training_set_scaled[j, 0])
X_train, y_train = np.array(X_train), np.array(y_train) # 轉成numpy array的格式,以利輸入 RNN
print(X_train.shape[0], X_train.shape[1])
# 原X_train 是 2-dimension,將它 reshape 成 3-dimension:
# [stock prices, timesteps, indicators]
X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], 1))
# 建立 長短期記憶 LSTM 模型
# Initialising the RNN
regressor = Sequential()
# Adding the first LSTM layer and some Dropout regularisation
regressor.add(LSTM(units = 50, return_sequences = True, input_shape = (X_train.shape[1], 1)))
regressor.add(Dropout(0.2))
# Adding a second LSTM layer and some Dropout regularisation
regressor.add(LSTM(units = 50, return_sequences = True))
regressor.add(Dropout(0.2))
# Adding a third LSTM layer and some Dropout regularisation
regressor.add(LSTM(units = 50, return_sequences = True))
regressor.add(Dropout(0.2))
# Adding a fourth LSTM layer and some Dropout regularisation
regressor.add(LSTM(units = 50))
regressor.add(Dropout(0.2))
# Adding the output layer
regressor.add(Dense(units = 1))
# Compiling
regressor.compile(optimizer = 'adam', loss = 'mean_squared_error')
# 進行訓練
regressor.fit(X_train, y_train, epochs = count, batch_size = size)
# 測試
dataset_total = pd.concat((dataset_train['Open'], dataset_test['Open']), axis = 0)
inputs = dataset_total[len(dataset_total) - len(dataset_test) - m:].values
inputs = inputs.reshape(-1,1)
inputs = sc.transform(inputs) # Feature Scaling
X_test = []
for k in range(m, m+n): # m+n = 先前的m天資料+2017年的n天資料
X_test.append(inputs[k-m:k, 0])
X_test = np.array(X_test)
X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1)) # Reshape 成 3-dimension
predicted_stock_price = regressor.predict(X_test)
predicted_stock_price = sc.inverse_transform(predicted_stock_price) # to get the original scale
#將二維陣列轉換維一維陣列
real_stock_price = np.array (real_stock_price[0:n])
real_stock_price = real_stock_price.ravel()
predicted_stock_price = np.array (predicted_stock_price)
predicted_stock_price = predicted_stock_price.ravel()
date = pd.DataFrame({
"Real Stock Price": real_stock_price,
"predicted Dtock Price": predicted_stock_price
})
corr = date.corr(method="pearson")
print(corr)
t = pearsonr(real_stock_price, predicted_stock_price)
print(t)
# 真實股價與預測股價均為二維陣列
#print(real_stock_price[0:n])
#print(predicted_stock_price)
# 繪製實際股價
plt.plot(real_stock_price[0:n], color='red', label='Real '+ symbol + ' Stock Price')
# 繪製每次的預測股價
plt.plot(predicted_stock_price, color='blue', label='Prediction '+ symbol + ' Stock Price')
# 設置標題,將 Pearson 相關係數添加到標題中
title = symbol + ' Stock Price Prediction\\ncorrelation_coefficient: {:.6f}'.format(t[0]) # 使用每次迭代的 Pearson 相關係數
plt.title(title)
plt.xlabel('Time')
plt.ylabel(symbol + ' Stock Price')
plt.legend()
# 將圖片保存
plt.savefig(symbol +' stock_price_prediction_{}.png'.format(number)) # 使用索引來命名圖片文件
plt.show()
plt.close() # 關閉當前的圖表,以便下一次迭代可以繪製新的圖表
print('-------------------------------------------------------------------------------------------------')
rise = 0
fall = 0
predict = []
for l in range(len(real_stock_price)-1):
if (real_stock_price[l+1] > real_stock_price[l] and predicted_stock_price[l+1] > predicted_stock_price[l]):
#print('漲,預測成功')
rise += 1
predict.append(1)
elif real_stock_price[l+1] < real_stock_price[l] and predicted_stock_price[l+1] < predicted_stock_price[l]:
#print('跌,預測成功')
fall += 1
predict.append(1)
else:
#print('預測失敗')
predict.append(0)
#print(predict)
print('漲預測成功: ', rise)
print('跌預測成功: ', fall)
print('預測失敗: ', len(real_stock_price)-rise-fall)
print('準確率', (rise+fall) / len(real_stock_price))
results_data = [
['漲預測成功', rise],
['跌預測成功', fall],
['預測失敗', len(real_stock_price)-rise-fall],
['準確率', (rise+fall) / len(real_stock_price)]
]
#將每次的解果輸出成CSV檔
column_names = ['預測類型', '次數/準確率']
all_results_df = pd.DataFrame(results_data, columns=column_names)
all_results_df.to_csv(symbol + '_predict_'+ str(number) +'.csv', encoding='big5', index=False)
print('----------------------------------------------------------------------------------------------------\\n')
#預測資料向左偏移計算
shift = 1
shift_end = 5
for shift in range(shift,shift_end + 1):
trimmed_real_stock_price = real_stock_price[0:-shift]
trimmed_predicted_stock_price = predicted_stock_price[shift:]
plt.plot(trimmed_real_stock_price, color='red', label='Real '+ symbol + ' Stock Price')
plt.plot(trimmed_predicted_stock_price, color='blue', label='Prediction '+ symbol + ' Stock Price')
title = symbol + ' Left_Shift: {}'.format(shift)
plt.title(title)
plt.xlabel('Time')
plt.ylabel(symbol + ' Stock Price')
plt.legend()
plt.savefig(symbol +' stock_price_prediction_{}_Left_Shift_{}.png'.format(number,shift))
plt.show()
plt.close()
rise = 0
fall = 0
predict = []
for o in range(len(trimmed_real_stock_price)-shift):
if (trimmed_real_stock_price[o+1] > trimmed_real_stock_price[o] and trimmed_predicted_stock_price[o+1] > trimmed_predicted_stock_price[o]):
#print('漲,預測成功')
rise += 1
predict.append(1)
elif trimmed_real_stock_price[o+1] < trimmed_real_stock_price[o] and trimmed_predicted_stock_price[o+1] < trimmed_predicted_stock_price[o]:
#print('跌,預測成功')
fall += 1
predict.append(1)
else:
#print('預測失敗')
predict.append(0)
#print(predict)
print('漲預測成功: ', rise)
print('跌預測成功: ', fall)
print('預測失敗: ', len(trimmed_real_stock_price)-rise-fall)
print('準確率', (rise+fall) / len(trimmed_real_stock_price))
results_data = [
['漲預測成功', rise],
['跌預測成功', fall],
['預測失敗', len(trimmed_real_stock_price)-rise-fall],
['準確率', (rise+fall) / len(trimmed_real_stock_price)]
]
#將每次的解果輸出成CSV檔
column_names = ['預測類型', '次數/準確率']
all_results_df = pd.DataFrame(results_data, columns=column_names)
all_results_df.to_csv(symbol + '_predict_Left_shift_'+ str(shift) +'.csv', encoding='big5', index=False)
print('----------------------------------------------------------------------------------------------------\\n')
#真實資料向右偏移計算
shift = 1
shift_end = 5
for shift in range(shift,shift_end + 1):
trimmed_real_stock_price = real_stock_price[shift:]
trimmed_predicted_stock_price = predicted_stock_price[:-shift]
plt.plot(trimmed_real_stock_price, color='red', label='Real '+ symbol + ' Stock Price')
plt.plot(trimmed_predicted_stock_price, color='blue', label='Prediction '+ symbol + ' Stock Price')
title = symbol + ' Right_Shift: {}'.format(shift)
plt.title(title)
plt.xlabel('Time')
plt.ylabel(symbol + ' Stock Price')
plt.legend()
plt.savefig(symbol +' stock_price_prediction_{}_Right_Shift_{}.png'.format(number,shift))
plt.show()
plt.close()
rise = 0
fall = 0
predict = []
for o in range(len(trimmed_real_stock_price)-shift):
if (trimmed_real_stock_price[o+1] > trimmed_real_stock_price[o] and trimmed_predicted_stock_price[o+1] > trimmed_predicted_stock_price[o]):
#print('漲,預測成功')
rise += 1
predict.append(1)
elif trimmed_real_stock_price[o+1] < trimmed_real_stock_price[o] and trimmed_predicted_stock_price[o+1] < trimmed_predicted_stock_price[o]:
#print('跌,預測成功')
fall += 1
predict.append(1)
else:
#print('預測失敗')
predict.append(0)
#print(predict)
print('漲預測成功: ', rise)
print('跌預測成功: ', fall)
print('預測失敗: ', len(trimmed_real_stock_price)-rise-fall)
print('準確率', (rise+fall) / len(trimmed_real_stock_price))
results_data = [
['漲預測成功', rise],
['跌預測成功', fall],
['預測失敗', len(trimmed_real_stock_price)-rise-fall],
['準確率', (rise+fall) / len(trimmed_real_stock_price)]
]
#將每次的解果輸出成CSV檔
column_names = ['預測類型', '次數/準確率']
all_results_df = pd.DataFrame(results_data, columns=column_names)
all_results_df.to_csv(symbol + '_real_Right_shift_'+ str(shift) +'.csv', encoding='big5', index=False)
print('----------------------------------------------------------------------------------------------------\\n')