文章

[心得] 股市的技術指標(RSI、KD、MACD)與物理力學的關係

圖片
        過去常常思考一個問題,股市的量價關係如何與物理力學產生連結呢?股市的技術指標如何與牛頓定律扯上關係呢?我在這裡不探討數學式子,單純從概念來思考。以下謹代表個人研究心得,不負責盈虧。首先,股市的成交量能代表推力或衰退力道,股價代表移動的距離大小,股本可視為一個物體的質量。在股海時間久了,普遍的認知就是股本越大越需要更大的成交量能來推動價格,小股本的公司只需一點推力就能產生推升的效果,這樣的邏輯可以套用到力學當中的牛頓第二定律 F = MA (F: 牛頓力,M: 物體質量,A: 移動加速度),移動的距離又與速度/加速度有關。分為四種情境,往前進的速度且加速度為正,往前進的速度且加速度為負,往後退且加速度為負,往後退且加速度為正("正"代表方向轉為向前)。         股市中,常見常用的技術指標 RSI 、 KD、MACD,根據定義 RSI 代表強弱指標,以價格的最高最低來計算 RSI 數值。我們試著把價格高低點想像成移動的距離遠近,移動距離越大是不是代表發力的力道越大?於是, RSI 指標從 50 開始往上增加時,表示開始發力 ,F 開始產生作用,產生加速度 A 的移動,如下圖所示,這視為向前速度且加速度為正。         在牛頓第一慣性定律中,發力的過程即使停止發力了,物體還是會持續往前進,這是慣性也是動能。從下圖中觀察,RSI 回到 50 以上,雖然力道變得很微弱了,但是還有上升上漲的動能。講到這裡,發力強弱指的是瞬間力道,而平均力道就要觀察另一個指標 KD。 倘若 KD 維持在高檔(俗稱高檔鈍化),代表平均力道維持不墜 ,既然有力道就還有前進的速度,也就有動能。因此,觀察 KD 指標能維持高檔多久的時間代表力道的持久度,只要 KD 不斷維持 "中強" 水準,即使量能稍微偷懶沒有出力,事後再瞬間發力,這股前進的慣性還是存在於 K 線中的,如下圖所示。         最後,來講講動能,雖然前進具備動能,但是也要觀察動能的強弱,到底這次動能跟上次相比是更強還是更弱呢?技術指標的 MACD 用來判斷動能的強弱, 當高於零軸時,代表動能轉向往前進 ,低於零軸代表動能為後退(代表價格下跌)。下圖...

工控板 STM32F103 與網路晶片 DM9000

圖片
        網路上訂購一塊工控板 STM32F103 帶有網路介面,上面的網路晶片型號是 DM9000,過去我主要用 F207 開發網路的功能,這回使用 F103 試試看(降規打怪),MCU 與 DM9000 溝通的介面方式是 FSMC,過去也經常使用,算是熟悉 FSMC 介面。不過開發過程發現,MCU 讀取不到晶片的 Device ID,於是接上邏輯分析儀觀察腳位的變化,檢查是否符合 datasheet 的規定。測試結果,腳位訊號一切滿足規範,便聯絡廠商技術支援。聽對方工程師說,F103 速度(MCU 72MHz)比較慢所以搭配 DM9000 可能會有些問題,後續會再寄一塊新的給我。我當下思考,是否這樣的系統搭配造成良率不佳?還是說硬體設計本身有問題?         12路光耦合的隔離輸入,如下圖所示, XH 2.54 端子台。當輸入訊號為GND,觸發光耦合迴路導通,激發另一端的電晶體導通。輸入訊號只要以 +24V 或 GND 代表切換 On/Off,MCU 便能判斷輸入訊號的準位。         8路光耦合的隔離輸出,如圖 XH 2.54 端子台,MCU 控制腳位的 On/Off 觸發光耦合 IC。當光耦合開關打開時,+24V 會流向下一級的電晶體,同時開啟電晶體導通,因此輸出會導通到 GND。外部接點必須是一個具有負載的點位,無論它是繼電器或是乾濕接點,都是一個帶有電源負載的點位。 利用這塊工控板實作一個 GPS 軌跡追蹤系統,其影片連結如下: https://youtu.be/d_qeJ52fTf0

工廠設備用到的工具:串列資料傳輸轉換為網路通訊

圖片
        工廠生產設備遇到網路化的問題,偏偏產線設備不具有網路端口,這時候可以使用 RS-232 to Ethernet 模組來解決,下圖一所示。有些設備不具有網路,只要將下圖的模組 RS-232 配置設定好後(圖四),設備與模組間就算搞定了,接下來再設定網路模式。 圖一:RS-232 to Ethernet 轉換模組         網路參數的部分,分為 TCP 或 UDP 通訊模式,前者是連線保證(資料不丟失),後者是傳輸不保證(資料可能丟失)。如果是重要數據的傳輸,最好選 TCP 模式。除了通訊模式之外,要事先設定模組當做 server 或者是 client 端,圖二所示。如果做為 server 端,需要設定監聽的埠口,以便讓客戶端連線進來模組。如果做為 client 端,需要設定遠端 server IP 位址與埠口,模組通電後便會自動連線到遠端 server,建立起通訊連線。簡單說,server 角色是被動建立連線,client 角色是主動建立連線。 圖二:TCP 網路模式的參數配置         UDP 的設定就相對簡單了,下圖三所示。沒有所謂的 server 或 client 角色,只要設定本模組的通訊埠口,以及對方的 IP 位址與埠口,模組通電後,資料就會透過埠口互傳了。 圖三:UDP 網路模式的參數配置 圖四:UART 通訊模式的參數配置

[應用] 預訓練模型庫 PaddleHub 快速實現 AI

圖片
        什麼叫「預訓練模型」?現在的科技巨擘本身擁有海量的數據以及大型算力系統,他們事先透過這些大量的數據集訓練神經網路模型,這樣所獲得的模型結果可稱為 預訓練 ,不過生成的模型算是一種通用的模型。比如一個分類的模型,大量被標註的數據集輸入到網路模型經過訓練後,這樣的預訓練模型或許能做到分類工作,但不見得能做得特別精準。所以說它只是一種通用模型,如果想要讓它分類更精準,那就得用自己的數據集再做 fine tune 進行模型參數的微調。         在百度的 PaddleHub 平台上  https://github.com/PaddlePaddle/PaddleHub  提供不少預訓練的模型庫,底下圖一列出了部分網路模型。百度本身擁有不少數據集,適合拿來預先訓練各類網路模型,像是人體關鍵點檢測用到 ResNet50 的模型,目標檢測用到 YOLOv3 模型做訓練,我們身為初學者可以直接拿這些模型庫來做測試,基本上都有不錯程度的效果。不過,如果要針對某特定領域做檢測,可能會覺得精準度還不足。 圖一:PaddleHub 提供的預訓練模型庫         如何使用 PaddleHub?舉圖像分割為例,在 python 環境下,呼叫下面的粗體字函數。先載入模型名稱後,再調用分割的函數。 import paddlehub as hub module = hub. Module (name= "deeplabv3p_xception65_humanseg" ) res = module. segmentation (paths = [ "./test.jpg" ], visualization= True , output_dir= 'humanseg_output' ) 底下是人臉辨識模組, module = hub. Module (name= "ultra_light_fast_generic_face_detector_1mb_640" ) res = module. face_detection (paths = [ "./test.jpg" ], visualizatio...

[應用] OCR 光學字元辨識的開發 (以百度 Paddle Inference 推理模型為核心)

圖片
        OCR 圖形轉文字的識別技術也是架構在深度學習的理論之上,是人工智慧的應用之一。OCR 技術的辨識過程分成三部分:文本偵測 、 文本識別 、 文字分類,每一部分都用到神經網路模型來訓練。本文不打算講模型訓練的過程,而是介紹訓練後的網路模型如何部署到應用端,在 Windows 上的 OCR 軟體如何開發。就核心基礎來說,神經網路的模型是基於百度的 PaddleOCR 所訓練得來,它在 Github 上有開放原始碼,除了用百度內建的模型之外,也可以自建模型來訓練。訓練後的模型,百度提供一套推理模型部署的方法,根據其技術文件的步驟操作,我們可以在 Windows 環境下編譯出 OCR 的應用程式,不過文件操作內容多半還是以 Linux 環境為主。底下我把在 Windows 的編譯過程寫下來。 代碼函數庫下載         (1) OpenCV:到官網上面下載 Windows 版本,裡面包含程式碼和編譯後的函數庫。         (2) PaddleOCR 原始碼:到 Github 上面下載,至少 v2.5 版本以上的代碼。         (3) Paddle Inference 推理預測庫:這是模型的函數庫,可在百度官網下載  https://paddleinference.paddlepaddle.org.cn/user_guides/download_lib.html#windows ,裡面分CPU 和 GPU (CUDA) 的版本,本文是下載 CPU 版本進行編譯。         (4) 模型架構:OCR 需要下載三個模型架構,分別是偵測 、 辨識 、 和分類。在 Github 上面可以下載各種模型架構, https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.6/doc/doc_ch/models_list.md 。 將上述的資料準備好後,如下圖所示,依序放到資料夾裡。接著,我們用 Visual Studio 2019 來開始編譯 OCR 應用程式。 圖一:開發前需要準備的資料庫...

[筆記] 百度飛槳 PaddlePaddle 平台的介紹

圖片
         近年來,人工智慧 AI 的浪潮持續發酵,然而,實際上AI的定義和運作方式並不容易說得清楚。AI是一個廣泛的領域,涵蓋了各種技術和應用,其核心目標是讓機器模仿人類的智能和學習能力。 就技術的角度而言,確實需要具備並累積相當多的數學背景知識,例如: 微積分 、 機率 、 線性代數 、 矩陣行列式 ...等,這些知識是理解機器學習 ML 的理論基礎不可或缺的要素。在機器學習中,數學扮演了關鍵的角色,它們構成了算法和模型背後的數學原理,幫助我們解釋和理解機器學習的運作方式。熟悉這些數學概念和技巧,有助於更深入地探索機器學習領域,並設計出更有效和強大的學習模型。 前一篇[1] 大略整理了人工智慧 AI 、 機器學習 ML 、深度學習  DL 三者的關係, 然而,深度學習的技術發展才是真正推動人工智慧在應用面取得大幅進展的主要因素。深度學習以類神經網路為基礎搭配硬體的高效運算能力,進一步改進了許多應用領域,如圖像識別、語音辨識、自然語言處理...等。這些技術的突破性進展使得人工智慧應用的範疇不斷擴展,並為許多行業帶來了革命性的變化和創新 。         雖然機器學習的理論基礎複雜,不過整體開發的流程可以歸納成下圖的管線,就像是面對問題 、 分析問題 、 解決問題 、 放下問題一樣,有一套標準步驟。首先定義問題是不是需要靠深度學習的方法才能解決?再來是收集資料,足夠的資料量或不夠的資料會決定接下來採用哪種模型。有了模型後,才會訂定最佳化的標準,進行一輪又一輪的訓練。最後,用「未訓練」的數據來評估訓練後的模型,看看效果好不好。如果達到預期,則保留模型的參數。有關機器學習的課程,可以到  百度人工智能學習社區 https://aistudio.baidu.com ,先有一些基礎知識後再來開發 AI 會事半功倍。 圖一:機器學習的萬能公式 (取自飛槳平台)         從設計模型的方面來看,在飛槳 Paddle framework 上,提供三種開發的方式給工程人員建立模型與訓練,如下圖二所示。機器學習中的各個模型都有著複雜的數學計算和公式,如果要一個一個用程式碼寫出模型的功能,那大概要花費我們很長的時間。幸好,目前...

[筆記] 整理人工智慧 AI、機器學習 ML、深度學習 DL

圖片
        「人工智慧」是一個很熱門的話題,不過就技術而言它已經存在已久。 最近,我非常專注地閱讀了百度的 Paddle 飛槳網站 https://www.paddlepaddle.org.cn/   有關人工智慧技術的內容,我覺得它非常清楚地解釋了人工智慧、機器學習和深度學習之間的關係。因此,我特別把這些內容整理起來。從下圖一來解釋這三者的關係, 人工智慧 AI 可以被視為應用於各個領域的一種技術,其需要依賴於機器學習 (ML:Machine Learning) 的方法。機器學習技術可以分為兩種主要形式,即早期的傳統學習技術和現代的深度學習技術 (DL:Deep Learning)。          在早期的機器學習中,由於硬體運算效能有限且訊息數據難以大量取得,技術的發展側重於分析訊息的特徵。以我過去學習過的語音和影像技術為例,我們需要分析語音的發音方式,例如聲母、韻母、子音...等,並提取出聲音的 特徵 ,還有從頻譜的角度來分析 語音特性 。之後,我們建立一個模型,例如隱藏式馬可夫鏈 (HMM),以便進行語音的訓練和識別。過去,同樣的過程也被運用在影像處理方面,先解析影像訊號,分析影像特性並取得其特徵,再建立影像的模型。 從上述描述可以看出,傳統的技術需要對這類型多媒體訊號的特性進行深入研究,不論是從時域(time domain)或頻譜(frequency domain)的角度來解析訊號的特徵。接著,根據這些特徵建立一套模型,並將有限的數據輸入到模型中,最終進行模型的訓練以獲得適合的結果。這個過程需要對訊息進行大量的研究和分析,並且受限於資源和數據的可用性。 圖一:AI,ML,DL 的關係圖          近年來,隨著物聯網和網路技術的進展,深度學習成為人工智慧的主要技術。儘管深度學習的演算核心是類神經網路,這並不是一個特別新穎的技術。然而,由於現在可以獲得各種海量數據,再加上運算晶片的功效大幅提升,深度學習的技術才逐漸被廣泛採用。整理上述的概念後,下圖二說明兩種機器學習的方法,上半部是傳統的機器學習,下半部是深度學習 。上半圖,經過特徵工程獲取輸入訊號的特徵特性,再輸入到一個訓練後的模型,獲得輸出的結...