[VBA] 5分鐘教會你 – 自動繪製股票「 K線圖 」

K線圖 的重要性與用途

K線圖 : 又稱為「 日本蠟燭圖 」,是一種用於金融市場價格走勢的圖表類型,特別在股票和外匯市場中廣泛使用。

◎ 它是由一系列的蠟燭線所組成,每根蠟燭線代表一段特定時間內的四個價格點位( 開盤價 / 最高價 / 最低價 / 收盤價 ),藉由K線圖的結構排列,可以傳達豐富的市場訊息,投資者可利用K線圖來識別多空趨勢 / 價格轉折點 / 支撐和壓力位置,以及其他關鍵模式。這有助於制定交易策略和做出投資決策。

( PS. 有關於K線圖的詳細介紹,請參考文章 : 認識K線。)

運用EXCEL — 製作K線圖

※ 在強大的EXCEL圖表繪圖工具中,有一組專門用來繪製「 股票圖 」的工具,可以方便的將已知的股票數據,轉化成K線圖表。

( PS. 上圖中,有四種繪製股票圖的方法,以第2和第4種,較常使用於一般的看盤軟體。)

[ 股票圖 – 資料組成方式 ] :
◎ 第 2 組K線圖 : 資料組成為 — 開盤價 / 最高價 / 最低價 / 收盤價
◎ 第 4 組K線圖 : 資料組成為 — 成交量 / 開盤價 / 最高價 / 最低價 / 收盤價。( PS. 與第2組之差別,就在於多個成交量,資料排列順序 — 必須同組成所示。

K線圖 數據之取得方式

※ 要快速取得上市櫃1700多檔股票之歷史交易記錄,有兩種方法可以達成。

[ 1 ] : 自行建置上市櫃股票歷史交易資料檔
◎ 優點 : 執行速度快,可自動化且全面性分析個股多空趨勢。
◎ 缺點 : 歷史資料建檔不易,需要時間完成且每日需下載更新股票交易數據。
( PS. 建檔方式 : 利用 VBA-QueryTable 爬蟲工具,上網擷取上市櫃個股日成交資訊,再一一將其數據整合,完成歷史交易資料檔的建置。)

[ 個股日成交資訊網址 ] :
◎ 證交所 : https://www.twse.com.tw/zh/trading/historical/stock-day.html
◎ 櫃買中心 : https://www.tpex.org.tw/web/stock/aftertrading/daily_trading_info/st43.php?l=zh-tw&code=00734B

[ 2 ] : 運用XQ DDE語法 — 擷取股票歷史交易記錄
◎ 優點 : 直接DDE語法串接XQ,無需建置股票歷史資料。
◎ 缺點 : 執行速度較慢,載入資料需要時間,適合單股票分析,否則容易出現資料(#N/A)的問題。

EXCEL / 手動製作K線圖之流程

※ 了解製作K線圖與資料取得方法,便可訂定製作K線圖的相關流程,有利於VBA的程序撰寫步驟。

[ EXCEL 製作K線圖之流程 ] :
[ 1 ] : 收集個股歷史交易記錄
[ 2 ] : 繪製K線圖
[ 3 ] : 整理K線圖中的內容設定
[ 4 ] : 調整均線與成交量之展示範圍
[ 5 ] : 添加均線指標

收集個股歷史交易記錄

※ 首先利用 證交所個股日成交資訊網站 下載台泥(1101) 112年09月之歷史交易記錄。

[ A ] : 開啟證交所個股日成交資訊網站 : https://www.twse.com.tw/zh/trading/historical/stock-day.html


[ B ] : 點擊列印/HTML : 將陣列資料轉換成表格資料。


[ C ] : 複製歷史交易資料 to EXCEL


[ D ] : 整理資料 — 刪除成交金額,將資料排列成 日期 / 成交量(成交股數) / 開盤價 / 最高價 / 最低價 / 收盤價,符合股價圖的要求形式。

選擇繪圖工具

※ 運用EXCEL圖表繪圖工具中的「 股票圖 」,將整理好的股票數據,轉化成K線圖表。

[ 製作步驟 ] :
◎ 選取股價歷史交易數據後,依照下圖步驟,完成K線圖製作。


[ K線圖 — 製作完成 ] :


[ 注意 ] :
◎ 要製作出股價圖,必須先選取股價歷史交易數據,再選取要製作的股價圖,才不會產生錯誤。( PS. 股價交易數據必須符合VOHLC的資料型態。)

整理K線圖中的內容設定

※ 根據所提供的股價交易數據,系統會展示出如上圖的圖表資訊,內容有點粗糙,必須加以整理,才方便觀看。

[ 整理步驟 ] :
[ 1 ] : 刪除圖例 : 擴大展示面積。主要是 開/高/低/收 的數據,已轉換成K棒,失去展示的目的,故將其刪除。( PS. 這屬個人看法,可刪可不刪。)


[ 2 ] : 更改圖表標題 : 有利於凸顯圖表內容。


[ 3 ] : 更改K棒顏色 : 符合看盤習慣。上漲K棒 — 紅色 / 下跌K棒 — 綠色
◎ 更改方式 : 滑鼠左鍵在K棒點2下,螢幕右邊會跳出格式設定模式,於填滿框線中,更改所需展現的顏色,即可。

調整均線與成交量之展示範圍

※ 系統展示出的圖表資訊,你會發現K棒與成交量糾結在一起,為了方便觀看,必須將其分開。

[ 解決方式 ] :
◎ 將成交量的最大值放大5倍,使其成交量的直條棒變小,置於K棒之下,即可。
→ 滑鼠左鍵在成交量座標軸點2下,出現座標軸格式設定模式,點選 : 座標軸選項,將範圍/最值 — 由 4.5E7 改為 2.0E8

添加均線指標

※ 有了K棒/成交量,可否再添加均線(移動平均線)的展示功能,增加圖表的可看性? ( PS. 答案是 : 可以的 ! )

[ 添加方法 ] :
◎ 滑鼠左鍵在圖表內繪圖區中點1下,其右上角會出現 等三個功能設定鈕,點選 : 鈕 (圖表項目),再點選 : 趨勢線 (功能鍵),此時會出現一功能選項,再選 : 其他選項


◎ 選擇 : 其他選項 的目的是 — 它可以針對某組數列,來做趨勢線的設定。( PS. 針對K棒 — 就選 : 收盤價 / 成交量 — 就選 : 成交股數。)


◎ 確定 : 收盤價 後,螢幕右方會出現趨勢線設定模式,點選 : 移動平均,週期設定 : 5 ( 代表 : 5MA )。( PS. 設定 : 10 ( 表示 : 10MA )。)


◎ 此時,自動設定好的 5MA / 10MA 均線,皆為 : 虛線。須利用填滿與線條的功能,將其轉換成 : 實線,再更換成自己想賦予的顏色。


◎ 成交量 5MA / 10MA 均線 同上作法,完成圖如下 :


☆ 上述所示,便是手動製作K線圖的步驟。但實際操作上,不可能每每分析一檔股票,就畫一次圖,這樣太浪費時間,且不實際。此時,就得利用 VBA 來設計一系列執行程序,以完成自動繪製K線圖的動作。

VBA 實作 — 自動繪製股票「 K線圖 」

※ 在進行VBA程序設計前,首先必須先確認 股票交易數據的取得方式,才好規劃 展示畫面的佈局

[ 設計前的資料取得決斷 ] :
◎ 本文開頭已經介紹股票數據的取得方式,及其優缺點。為了方便讓大家快速了解整個設計的過程,這裡就採用 XQ DDE語法,來擷取個股的歷史資料。

[ EXCEL 檔案建立 ] :
◎ 首先建立(.xlsm)活頁簿 : 檔名 — 自動繪製K線圖
◎ 將其工作表1的工作表名稱,更名為 : 繪製K線圖

[ 表格畫面的佈局 ] :
◎ 確認以 XQ DDE語法 來操作,畫面資料之展示就以單筆股票分析的方式來佈局。


※ 查詢區之佈局格式,請參考上面A行所示。最主要的部份是 : A7A24 欄位,這兩個數據是 VBA DDE指令中,必須具備的重要參數。
A7 : 可變更的股票查詢代號。
A24 : 欲擷取的股票歷史天數。

DDE擷取股票交易數據之方法

[ DDE語法公式 ] :
※ 使用者可以運用DDE語法,將XQ股票商品之最新交易日的報價資訊,下載輸出至EXCEL。
☆ EXCEL / 公式 : =XQLITE|Kline!’2330.TW-Day-5 ( PS. 2330 : 股票代號 / 5 : 擷取天數 )


        [ 程式碼 / 從XQ取得股票之歷史資料 ] :
        stockCode = [A7]  ' 股票代號
        xDays = [A24]  ' 擷取天數
        Range("B31:G" & xDays + 30).Select
        Selection.FormulaArray = "=XQLITE|Kline!'" & stockCode & ".TW-Day-" & xDays & "'"

[ 語法說明 ] :
Range(“B31:G” & xDays + 30).Select : 資料區欄位設定從B31欄位開始列表,資料內容有 : / / / / 成交量 5組欄位,加上擷取天數(xDays),所有資料的顯示範圍,必須先加以選取。
Selection.FormulaArray = “=XQLITE|Kline!'” & stockCode & “.TW-Day-” & xDays & “‘” : 利用文字串接功能,將 DDE語法 / 股票代號 / 交易擷取天數 串連起來。

[ 交易資料擷取畫面 ] :


[ 注意 : XQ語法操作說明 ] : 要輸出的欄位有幾個,就要在Excel內選取相同數量的儲存格。

轉換資料欄位 — 配合股票圖格式

※ 利用DDE語法下載而來的股票資料格式為 : 日期 / / / / / 成交量。為了符合股票圖的圖表格式 ( VOHLC ),所以要將成交量的資料,轉移到開盤價左邊,才行。

[ 轉換前的注意事項 ] :
◎ 首先要了解的是利用DDE語法下載而來的資料格式,是一組陣列型態的資料格式。若想直接將其資料(成交量)轉移,會產生操作錯誤的問題,所以必須先將其轉換成儲存格資料格式,才能有效地轉移。

    
    [ 程式碼 / 轉換成交量資料欄位 ] :
    Range("B30:G" & [G30].End(xlDown).Row).Copy
    [B30].PasteSpecial Paste:=xlPasteValues
    Range("G30:G" & [G30].End(xlDown).Row).Cut
    [C30].Insert Shift:=xlToRight

[ 語法說明 ] :
Range(“B30:G” & [G30].End(xlDown).Row).Copy : 複製所有下載資料。
[B30].PasteSpecial Paste:=xlPasteValues : 原址貼上,參數屬性 : xlPasteValues ( = 將資料類型轉換成 數值。)
Range(“G30:G” & [G30].End(xlDown).Row).Cut : 將所屬成交量的行號資料剪下(Cut)。
[C30].Insert Shift:=xlToRight : 將剪下的成交量資料,插入(Insert)開盤價的位置,轉移參數 : xlToRight ( = 將資料往右邊移動。)

[ 資料轉換畫面 ] :

新增圖表 — 股票圖

※ 首先要注意一點 : 新增股票圖前,必須先選定要顯示的所有股票交易數據。( PS. 由於上一個插入動作完成後,所有交易數據呈現被選取狀態,所以省略選取的指令動作。)

[ 圖表新增畫面 ] :


        [ 程式碼 / 新增圖表並變更圖表為 : 股票圖 ] :
        ActiveSheet.Shapes.AddChart.Select
        ActiveSheet.ChartObjects(1).Name = "KLINE"
        ActiveChart.ChartType = xlStockVOHLC

[ 語法說明 ] :
ActiveSheet.Shapes.AddChart.Select : 新增圖表。
ActiveSheet.ChartObjects(1).Name = “KLINE” : 將 圖表_1 名稱,更改為 : KLINE
ActiveChart.ChartType = xlStockVOHLC : 將圖表類型 — 設定為 : 股票圖 ( VOHLC ) 格式。

圖表格式設定

設定圖表大小

※ 新增股票圖後,系統會自動插入一組預設尺寸的股票圖,位置也是隨意放置,不符合展示需求,所以必須依照自己的想法,設定好圖表的尺寸大小及擺放位置。

[ 圖表大小及位置之設定方式 ] :

        
        [ 程式碼 / 設定圖表大小及位置 ] :
        ActiveSheet.Shapes("KLINE").Left = 100
        ActiveSheet.Shapes("KLINE").Top = 5
        ActiveSheet.Shapes("KLINE").Height = 420
        ActiveSheet.Shapes("KLINE").Width = 1300

[ 語法說明 ] :
ActiveSheet.Shapes(“KLINE”).Left = 100 : 設定圖表 — 左邊界 : 100
ActiveSheet.Shapes(“KLINE”).Top = 5 : 設定圖表 — 上邊界 : 5
ActiveSheet.Shapes(“KLINE”).Height = 420 : 設定圖表 — 高度 : 420
ActiveSheet.Shapes(“KLINE”).Width = 1300 : 設定圖表 — 寬度 : 1300

刪除圖例

※ 根據個人需求,考慮刪與不刪,或者更換展示位置。

[ 刪除圖例畫面 ] :


        [ 程式碼 / 刪除圖例 ] :
        ActiveChart.Legend.Delete 

設定圖表標題

※ 系統預設股票圖,並沒有圖表標題,便自行增加,以凸顯圖表內容。

[ 設定圖表標題畫面 ] :


        [ 程式碼 / 設定圖表標題 ] :
        ActiveChart.SetElement (msoElementChartTitleAboveChart) 
        ActiveChart.ChartTitle.Text = stockCode & " " & [A9] & " K線圖"
        ActiveChart.ChartTitle.Format.TextFrame2.TextRange.Font.Size = 14 

[ 語法說明 ] :
ActiveChart.SetElement (msoElementChartTitleAboveChart) : 設定圖表標題 — 顯示在上方
ActiveChart.ChartTitle.Text = stockCode & ” ” & [A9] & ” K線圖” : 利用文字串接功能,設定圖表標題名稱 ( 2330 台積電 K線圖 )。
ActiveChart.ChartTitle.Format.TextFrame2.TextRange.Font.Size = 14 : 設定圖表標題之字體大小 : 14

變更K棒顏色

※ 系統預設K棒顏色為 / 色,為符合台股看盤習慣 改為 : 上漲K棒 : 紅色 / 下跌K棒 : 綠色

[ 變更K棒顏色畫面 ] :

        
        [ 程式碼 / 變更K棒顏色 ] :
        ActiveChart.ChartGroups(2).UpBars.Format.Fill.ForeColor.RGB = RGB(255, 0, 0)
        ActiveChart.ChartGroups(2).UpBars.Format.Line.ForeColor.RGB = RGB(255, 0, 0)
        ActiveChart.ChartGroups(2).DownBars.Format.Fill.ForeColor.RGB = RGB(0, 176, 80)
        ActiveChart.ChartGroups(2).DownBars.Format.Line.ForeColor.RGB = RGB(0, 176, 80) 

[ 語法說明 ] :
ActiveChart.ChartGroups(2).UpBars.Format.Fill.ForeColor.RGB = RGB(255, 0, 0) : 更改上漲K棒(UpBars)的實體部分(Fill)為 : 紅色(RGB(255, 0, 0))。
ActiveChart.ChartGroups(2).UpBars.Format.Line.ForeColor.RGB = RGB(255, 0, 0) : 更改上漲K棒(UpBars)的框線部分(Line)為 : 紅色(RGB(255, 0, 0))。
ActiveChart.ChartGroups(2).DownBars.Format.Fill.ForeColor.RGB = RGB(0, 176, 80) : 更改下跌K棒(DownBars)的實體部分(Fill)為 : 綠色(RGB(0, 176, 80))。
ActiveChart.ChartGroups(2).DownBars.Format.Line.ForeColor.RGB = RGB(0, 176, 80) : 更改下跌K棒(DownBars)的框線部分(Line)為 : 綠色(RGB(0, 176, 80))。

調整成交量與K棒之展示範圍

※ 系統預設股票圖的成交量為 : 主座標股價K棒為 : 副座標,所以在K線圖的展現上,成交量會與股價K棒產生糾結,此時便要將成交量放大5倍,壓縮成交量直線圖至圖表下方,以避免糾結情況發生。

[ 調整成交量與K棒之展示範圍 ] :


        [ 程式碼 / 調整成交量與K棒之展示範圍 ] :
        MaxVol = Application.Max(Range("C31:C" & [C30].End(xlDown).Row)) * 5
        ActiveChart.Axes(xlValue).MaximumScale = MaxVol
        ActiveChart.Axes(xlValue).MinimumScale = 0  ' 設定主座標顯示下限
        ActiveChart.Axes(xlValue).MajorGridlines.Delete  ' 刪除主座標格線
        MinPrice = Application.Min(Range("G31:G" & [G30].End(xlDown).Row)) * 0.9
        ActiveChart.Axes(xlValue, xlSecondary).MaximumScaleIsAuto = True  ' 設定副座標顯示上限 -- 自動。
        ActiveChart.Axes(xlValue, xlSecondary).MinimumScale = MinPrice  ' 設定主座標顯示下限 -- 自動

[ 語法說明 ] :
MaxVol = Application.Max(Range(“C31:C” & [C30].End(xlDown).Row)) * 5 : 擴大成交量之展示範圍 ( 5倍最大成交量 ) — 將成交量直線圖往下壓縮。
ActiveChart.Axes(xlValue).MaximumScale = MaxVol : 設定主座標軸之顯示上限 = MaxVol ( 5倍最大成交量 )。
ActiveChart.Axes(xlValue).MinimumScale = 0 : 設定主座標軸之顯示下限 = 0
ActiveChart.Axes(xlValue).MajorGridlines.Delete : 刪除主座標軸格線,目的 : 使畫面乾淨。
MinPrice = Application.Min(Range(“G31:G” & [G30].End(xlDown).Row)) * 0.9 : 避免系統將副座標軸下限,預設為 : 0,導致K棒圖形壓縮,故將收盤價最小值(Min) 的 0.9倍 值,設定為顯示下限,以避免壓縮情況發生。
ActiveChart.Axes(xlValue, xlSecondary).MaximumScaleIsAuto = True : 設定副座標軸顯示上限 = 自動
ActiveChart.Axes(xlValue, xlSecondary).MinimumScale = MinPrice : 設定副座標軸顯示下限 = MinPrice

新增均線指標

※ 為求更精緻的展現K線圖的畫面,可以再添加些技術指標,如 : 均線 / KD指標 / MACD指標 等,以強化K線圖功能。

[ 新增均線指標畫面 ] :


        [ 程式碼 / 新增均線指標 ] :
        ActiveChart.FullSeriesCollection(5).Trendlines.Add Type:=xlMovingAvg, Period:=5
        ActiveChart.FullSeriesCollection(5).Trendlines.Add Type:=xlMovingAvg, Period:=20
        ActiveChart.FullSeriesCollection(5).Trendlines(1).Format.Line.ForeColor.RGB = RGB(255, 150, 50)
        ActiveChart.FullSeriesCollection(5).Trendlines(2).Format.Line.ForeColor.RGB = RGB(75, 150, 200)
        ActiveChart.FullSeriesCollection(1).Trendlines.Add Type:=xlMovingAvg, Period:=5
        ActiveChart.FullSeriesCollection(1).Trendlines.Add Type:=xlMovingAvg, Period:=10 
        ActiveChart.FullSeriesCollection(1).Trendlines(1).Format.Line.ForeColor.RGB = RGB(255, 150, 50) 
        ActiveChart.FullSeriesCollection(1).Trendlines(2).Format.Line.ForeColor.RGB = RGB(75, 150, 200) 

[ 語法說明 ] :
ActiveChart.FullSeriesCollection(5).Trendlines.Add Type:=xlMovingAvg, Period:=5 : 根據收盤價(第5圖例項目)數據,新增趨勢線(移動平均線 : xlMovingAvg ),週期 : 55MA
ActiveChart.FullSeriesCollection(5).Trendlines.Add Type:=xlMovingAvg, Period:=20 : 同上,新增一條 20MA (收盤價)。
ActiveChart.FullSeriesCollection(5).Trendlines(1).Format.Line.ForeColor.RGB = RGB(255, 150, 50) : 設定5MA顏色 — 橘色 (RGB(255, 150, 50))。
ActiveChart.FullSeriesCollection(5).Trendlines(2).Format.Line.ForeColor.RGB = RGB(75, 150, 200) : 設定20MA顏色 — 藍色 (RGB(75, 150, 200))。
ActiveChart.FullSeriesCollection(1).Trendlines.Add Type:=xlMovingAvg, Period:=5 : 根據成交量(第1圖例項目)數據,新增趨勢線(移動平均線 : xlMovingAvg ),週期 : 55MA
ActiveChart.FullSeriesCollection(1).Trendlines.Add Type:=xlMovingAvg, Period:=10 : 同上,新增一條 10MA (成交量)。
ActiveChart.FullSeriesCollection(1).Trendlines(1).Format.Line.ForeColor.RGB = RGB(255, 150, 50) : 設定5MA顏色 — 橘色 (RGB(255, 150, 50))。
ActiveChart.FullSeriesCollection(1).Trendlines(2).Format.Line.ForeColor.RGB = RGB(75, 150, 200) : 設定10MA顏色 — 藍色 (RGB(75, 150, 200))。

清除舊歷史交易資料

※ 要順利完成自動化的動作,就要記得清除之前遺留下來的舊資料,才不會因為覆蓋不完全,而產生資料的錯誤。


        [ 程式碼 / 清除舊歷史交易資料 ] :
        ActiveSheet.ChartObjects("KLINE").Delete
        Range("B31:G" & [G31].End(xlDown).Row).ClearContents      
        If [C30] = "成交量" Then
                [C30].Cut  ' 移動成交量標題
                [H30].Insert  ' 移至G30
        End If

[ 語法說明 ] :
ActiveSheet.ChartObjects(“KLINE”).Delete : 刪除名稱為 : KLINE 的圖表。
Range(“B31:G” & [G31].End(xlDown).Row).ClearContents : 清除舊歷史交易資料

[ 注意 ] : 還記得之前曾轉移過成交量的欄位吧 ! 重新再載入新資料時,務必將成交量的標題,回歸G行位置,才不會造成資料誤導。
◎ 公式解說 : 請參考上面程式碼。

建置股票代號

※ 為了優化查詢功能,增加一組 股票代號 工作表,方便查詢時自動帶出股票名稱。

[ 建置股票代號之方法 ] :
◎ 請參考 — 手動整合上市櫃股票代號。( PS. 將上市櫃股票代號置於新增的”股票代號“工作表內。

[ 查詢功能之目的 ] :
◎ 查詢者於A7欄位,鍵入欲查詢之股票代號後,A9欄位會自動帶出股票名稱。

[ 查詢公式 ] :
◎ 於A9欄位輸入公式 : =IFERROR(VLOOKUP(A7,股票代號!A2:B1702,2,FALSE),”無此代號”)

完整程式碼


    [ 程式碼 / 自動繪製K線圖 ] :
    Sub 自動繪製K線圖()
        
        On Error Resume Next      
        Sheets("繪製K線圖").Select
        stockCode = [A7]  ' 股票代號
        xDays = [A24]  ' 擷取天數        

        ActiveSheet.ChartObjects("KLINE").Delete  ' 刪除圖表
        Range("B31:G" & [G31].End(xlDown).Row).ClearContents  ' 清除舊資料       
        If [C30] = "成交量" Then
                [C30].Cut  ' 移動成交量標題
                [H30].Insert  ' 移至G30
        End If

        ' 從XQ取得股票之歷史資料
        Range("B31:G" & xDays + 30).Select
        Application.Wait (Now + TimeValue("00:00:01"))
        Selection.FormulaArray = "=XQLITE|Kline!'" & stockCode & ".TW-Day-" & xDays & "'"
        Application.Wait (Now + TimeValue("00:00:02"))
        
        ' 先將股價陣列資料格式 -- 轉換成表格資料格式,才不會產生錯誤 !
        Range("B30:G" & [G30].End(xlDown).Row).Copy
        [B30].PasteSpecial Paste:=xlPasteValues
        Application.Wait (Now + TimeValue("00:00:01"))

        ' 轉換股票歷史資料位置 -- 成交量移至C行 ( 配合股票圖表格式 -- VOHLC )
        Range("G30:G" & [G30].End(xlDown).Row).Cut
        [C30].Insert Shift:=xlToRight
        Application.Wait (Now + TimeValue("00:00:01"))
        
        ActiveSheet.Shapes.AddChart.Select ' 新增圖表
        ActiveSheet.ChartObjects(1).Name = "KLINE"  ' 設定圖表名稱
        ActiveChart.ChartType = xlStockVOHLC  ' 設定圖表類型 -- 股票圖
        ActiveSheet.Shapes("KLINE").Left = 100  ' 左邊界
        ActiveSheet.Shapes("KLINE").Top = 5  ' 上邊界
        ActiveSheet.Shapes("KLINE").Height = 420  ' 圖表高度
        ActiveSheet.Shapes("KLINE").Width = 1300  ' 圖表寬度
        
        ActiveChart.Legend.Delete  ' 刪除圖列顯示
        
        ActiveChart.SetElement (msoElementChartTitleAboveChart)  ' 圖表標題 -- 顯示在上方。
        ActiveChart.ChartTitle.Text = stockCode & " " & [A9] & " K線圖"  ' 圖表標題名稱。
        ActiveChart.ChartTitle.Format.TextFrame2.TextRange.Font.Size = 14  ' 圖表標題字體大小 -- 14
    
        ActiveChart.ChartGroups(2).UpBars.Format.Fill.ForeColor.RGB = RGB(255, 0, 0)  ' 上漲K棒 -- 實體填滿 : 紅色
        ActiveChart.ChartGroups(2).UpBars.Format.Line.ForeColor.RGB = RGB(255, 0, 0)  ' 上漲K棒 -- 框線顏色 : 紅色
        ActiveChart.ChartGroups(2).DownBars.Format.Fill.ForeColor.RGB = RGB(0, 176, 80)  ' 下跌K棒 -- 實體填滿 : 綠色
        ActiveChart.ChartGroups(2).DownBars.Format.Line.ForeColor.RGB = RGB(0, 176, 80)  ' 下跌K棒 -- 框線顏色 : 綠色
        
        MaxVol = Application.Max(Range("C31:C" & [C30].End(xlDown).Row)) * 5  ' 5倍最大成交量 -- 將成交量圖往下壓縮
        ActiveChart.Axes(xlValue).MaximumScale = MaxVol  ' 設定主座標軸顯示上限 = MaxVol
        ActiveChart.Axes(xlValue).MinimumScale = 0  ' 設定主座標軸顯示下限
        ActiveChart.Axes(xlValue).MajorGridlines.Delete  ' 刪除主座標軸格線
        MinPrice = Application.Min(Range("G31:G" & [G30].End(xlDown).Row)) * 0.9  ' 最小收盤價 * 0.9
        ActiveChart.Axes(xlValue, xlSecondary).MaximumScaleIsAuto = True  ' 設定副座標軸顯示上限 -- 自動。
        ActiveChart.Axes(xlValue, xlSecondary).MinimumScale = MinPrice  ' 設定副座標軸顯示下限 = MinPrice
        
        ActiveChart.FullSeriesCollection(5).Trendlines.Add Type:=xlMovingAvg, Period:=5  ' 新增趨勢線(移動平均線) -- 5MA(收盤價)
        ActiveChart.FullSeriesCollection(5).Trendlines.Add Type:=xlMovingAvg, Period:=20  ' 新增趨勢線(移動平均線) -- 20MA(收盤價)
        ActiveChart.FullSeriesCollection(5).Trendlines(1).Format.Line.ForeColor.RGB = RGB(255, 150, 50)  ' 設定5MA顏色 -- 橘色
        ActiveChart.FullSeriesCollection(5).Trendlines(2).Format.Line.ForeColor.RGB = RGB(75, 150, 200)  ' 設定20MA顏色 -- 藍色
        ActiveChart.FullSeriesCollection(1).Trendlines.Add Type:=xlMovingAvg, Period:=5  ' 新增趨勢線(移動平均線) -- 5MA(成交量)
        ActiveChart.FullSeriesCollection(1).Trendlines.Add Type:=xlMovingAvg, Period:=10  ' 新增趨勢線(移動平均線) -- 10MA(成交量)
        ActiveChart.FullSeriesCollection(1).Trendlines(1).Format.Line.ForeColor.RGB = RGB(255, 150, 50)  ' 設定5MA顏色 -- 橘色
        ActiveChart.FullSeriesCollection(1).Trendlines(2).Format.Line.ForeColor.RGB = RGB(75, 150, 200)  ' 設定10MA顏色 -- 藍色
        
        [A12] = [B31]  ' 查詢起始日
        [A14] = [B30].End(xlDown)  ' 查詢終止日
        [A24].Select
    End Sub

結論

※ K線圖 是技術分析的重要工具,用於判別趨勢和交易機會。本文教學講解 : 如何運用VBA DDE語法爬取個股交易數據,搭配EXCEL繪製股票股的方法,自動繪製個股K線圖,並添加均線指標,這有利於觀察個股多空趨勢 / 轉折點及支撐壓力位置,進而制定投資交易策略。

[ 完成圖 / 自繪K線圖 ] :
K線圖

V B A 資 源

EXCEL & VBA功能 – 綜合筆記
※ EXCEL & VBA功能 筆記 : 將針對文章中所使用的 EXCEL 及 VBA公式 / 工具操作 / 巨集設定 / 控制項的運用,做個整合記錄,方便大家在學習當下的參考與使用。

VBA指令 – 彙整筆記
※ VBA 提供相當多的指令用法,VBA指令 彙整筆記,將會陸續記錄 VBA文章 中,所用過的 VBA指令,方便學員們對照運用。

VBA程式語法 – 彙整筆記
※ 語法就是程式的文法。 使用者要與電腦溝通,就必須遵守這些規則。VBA程式語法 筆記 : 將針對 VBA文章 中所使用的 VBA程式語法,做個整合記錄,方便大家在學習當下參考與使用。