大數據統計分析報告.pdf

資料下載

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)

04/05含準確率版本

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')