從零開始的股票預測程式開發(一)

CraigChiu 邱正鈞
Under The Mask 面具之下
6 min readJul 20, 2020

為什麼要開始這個計畫?我們打算要做些什麼?

第一篇:應用程式開發-前端

一、前言

這不是一篇教學文。

在這個程式開發系列,我們想要紀錄的並不是千篇一律的教學指引、一步一步的步驟與做法。

我們想要紀錄我們開發程式的心路歷程。d(`・∀・)b

因為我們知道在程式開發的初期,可能只是一個小小的好奇,可能帶有小小的期待,想要靠自己的雙手創造自己的東西。我們都懂,我們不想要只是把成果展示給大家看,我們更注重記錄下路途中所犯的錯誤、繞的遠路。

沒錯,我們將之視為一段旅程。(*゚∀゚*)

每個人的旅程都不一樣,大多數的旅程可能是蜿蜒且崎嶇的,聰明的人們可能有時候能走得比較快,但這終究會是一段旅程。當我們在旅程中快要放棄的時候,我們要有人能理解我們,並鼓勵我們再試一次。(´・ω・`)

我們希望我們的文章能在你的旅程中擔任這樣的角色。

回到正題,我們選擇從一個沒有開發過的項目著手,想以藉此能更貼近一個新手可能會遇到的問題、心態與犯的錯。我們沒有開發過應用程式的經驗,所以如果這樣的主題選擇能幫助到看到這邊的你,留言讓我們知道吧!

總之,讓我們開始。─=≡Σ((( つ•̀ω•́)つ

二、計畫

首先,讓我們先來談談我們的開發計畫:

1. 應用程式-前端

2. 資料儲存-後端

3. 深度學習模型-分析

我們希望依序完成開發,並希望藉由這三部份實現較完整的基本運作。最後,我們會比較不同深度學習模型之間的差異。因為開發的進度會受到研究所開學之後的影響,因此目前預計完成專案的日期是 13/09/20。

三、應用程式-前端開發

(一)環境

因為在之前的經驗中較常使用 Python3 來當作開發的語言,因此這次我們也打算使用它來開發前端。另一方面,選擇 Python3 也是為了更好的整合之後第三部分的深度學習模型。

(註:我們使用的是 Python 3.6.5,Windows 10,PyCharm 2019.2)

我們瀏覽過了一些 Python 開發應用程式的框架,諸如:Tkinter、PyQt5、wxPython,最後我們選擇 PyQt5,雖然學習上比較複雜,但它跨平台上擁有比較多優勢,且佈局上也更為方便。

為了方便的編輯我們的程式碼,我們選擇 PyQt5 連動 PyCharm,另一方面也可以將介面的 .ui 檔很方便地轉換成 .py 檔使用。至於為什麼要這樣做呢?讓我們先來看要怎麼做吧!

首先,將先安裝好的 PyQt5 連動 PyCharm(安裝教學),如果在連動的時候跟我一樣遇到圖一的 Error,可以先安裝 Microsoft C++ Build Tools,然後點 Modify(修改),並在 Individual Components(個別元件)中找到 MSVC v140 VS 2015 C++ 下載即可解決(圖二)。這邊值得注意的一點是:如果再建立 PyCharm 專案時,Base interpreter 沒有選擇 Anaconda3 下的 python,就配對不到 pip 安裝 package 的路徑!在 Command Prompt(命令提示字元)中鍵入 pip show pip 即可看到 pip 的安裝路徑,如圖三。

光是這邊我們就花了不少時間,試了網路上提供的幾個方法都無法解決。一開始以為是以為少了 Build Tools,後來才發現原來根本是 Base interpreter 選錯了……(´◓Д◔`)

圖一(當時忘記截到,此圖為示意圖><)
圖二
圖三

這邊我們還遇到一個問題:上述的雖然都安裝好了,卻遇到顯示 “ no qt platform plugin could be initialized ”,無法打開 Qt Designer。後來才發現我們的 designer.exe 在 pyqt5_tools/Qt/Bin 裡面,所以我們就將 pyqt5_tools/plugins 複製到 Bin 裡就可以正常使用了!(´;ω;`)(圖四)

圖四

到這邊,開發環境已經準備完成啦!

(二)練習

我們決定先來做一個按鈕。

首先,建立一個 Main Window(圖五),從左側工具欄中拉出 Push ButtonLabel 各一。點選 Push Button,右側可以更改 ObjectName。我們先把它命名為 pushButton(圖六)。

圖五
圖六

接下來,我們要來解釋先前提到的從 .ui 到 .py 的轉檔。

為了可以很方便的更新我們寫的 .py 檔,此點即是我們當初選擇 PyQt5 連動 PyCharm 的原因之一。我們將存檔的路徑放在我們的 project 底下,此時得到一個 .ui 檔,右鍵選擇 PyUIC,我們即得到一個 .py 檔(圖七)。如此,就可以在每次更新 UI 後使用 PyUIC 就可以覆寫此 .py 檔!

圖七

轉成 .py 的內容如下:

但是,為了避免每次更新時主要程式都被覆寫。因此,我們的主要程式必須放在另一個 .py 中!我們新建一個 Function.py,在裡面寫我們想要的功能。首先,我們要先控制剛剛建立的 pushButton 顯示我們想要的文字。

這邊的 Function 程式碼如下:

最後,Run 我們的 Function.py(圖八)。

圖八

大功告成!

下一篇我們將會進行更多 Qt Designer 的測試。

如果喜歡我們的文章或有想對我們說的話,可以追蹤、拍手或留言讓我們知道啦!

我們是 Craig & Jason,下次見!

--

--