iT邦幫忙

2022 iThome 鐵人賽

DAY 10
1
Software Development

從 Node.js 開發者到量化交易者:打造屬於自己的投資系統系列 第 10

Day 10 - 臺股同時指標:美元兌新臺幣匯率

  • 分享至 

  • xImage
  •  

美元兌新臺幣匯率走勢與臺灣加權指數呈正向關係,時常有 股匯齊漲股匯齊跌 的現象。因為外資要買進臺股,必須將外幣換成新臺幣,因為兌換金額龐大,就會促使新臺幣升值;當外資賣出臺股時,就會將新臺幣換換回外幣,使新臺幣走貶。因此新臺幣的升貶與臺灣股市具有高度的連動性。

新臺幣匯率與臺股的連動關係

我們在 Day 04 - 法人主導的市場:三大法人買賣超 的內容中提到,三大法人中,以外資買買超對大盤的影響最大。根據金管會資料統計,外資持有股票占總市值比例在 2008 年還不及 30%,不過至 2021 年底,外資持股比例已達 40% 以上。

年份 上市外資持股比率 上櫃外資持股比率 全部總計
2008 30.40% 7.43% 28.98%
2009 31.89% 10.11% 30.05%
2010 32.86% 11.30% 31.19%
2011 32.34% 14.35% 31.10%
2012 34.02% 15.51% 32.62%
2013 34.63% 17.46% 33.14%
2014 38.29% 18.02% 36.43%
2015 38.55% 20.10% 36.69%
2016 39.94% 20.16% 38.14%
2017 41.25% 22.60% 39.48%
2018 39.97% 21.48% 38.34%
2019 43.02% 22.21% 41.22%
2020 44.98% 21.69% 42.92%
2021 43.48% 21.39% 41.42%

Source:金融監督管理委員會證券期貨局

隨著外資持股比例上升,外國資金對臺股的影響力也比以往更甚。我們整理了加權指數與美元兌新臺幣匯率從 2008 年至 2022 年 8 月 31 日的走勢圖,美元兌新臺幣走勢下降代表新臺幣升值,因此我們可以看出臺股與新臺幣匯率有正向的連動關係。

自 2020 年因 COVID-19 的黑天鵝,使美國聯準會宣布緊急降息並實施無上限量化寬鬆(Quantitative easing,QE)政策,各國政府亦紛紛實施 QE 使熱錢湧入國際市場,也因低利率環境,股市是比債市更好的投資標的,外資熱錢流入臺股促使新臺幣升值,也造就了 2021 年底至 2022 年初的萬八行情。

https://ithelp.ithome.com.tw/upload/images/20220910/201501501XzlrZUOcT.png

Source:臺灣證券交易所、中央銀行

不過從 2022 年初新臺幣開始走貶,隨著 2022 年 2 月發生俄烏戰爭引爆高通膨,加上美國開始縮減購債並啟動升息循環,美元強勢升值導致外國資金撤離臺灣股市,也造成加權指數向下修正。

年月 上市外資持股比率 上櫃外資持股比率 全部總計
2022/01 43.92 20.83 41.90
2022/02 42.74 20.09 40.76
2022/03 41.71 19.80 39.78
2022/04 40.68 18.72 38.82
2022/05 41.22 19.06 39.30
2022/06 40.03 17.77 38.08
2022/07 40.97 17.61 38.91
2022/08 40.56 17.43 38.38

Source:金融監督管理委員會證券期貨局

從外資持股比例的變化也可以發現,截至 2022 年 8 份,外資持股比率已降至 40% 以下,代表有大量的外國資金撤出臺灣股市。因此,當外國資金匯入,會造成新臺幣升值,資金流入股市,就有利臺股上漲;當外國資金匯出,會造成新臺幣貶值,資金從股市流出,就容易造成股市下跌。當新臺幣匯率在盤中有劇烈升貶時,股市通常也會產生不小的波動。

臺幣的升貶也可以作為產業面選股的參考,因為臺幣升值會使進口成本降低,使仰賴原物料進口的產業如資產營建、傳產內需等概念股受惠;反之,臺幣貶值則對以外銷出口的半導體、IC設計、電子零組件等以美元計價出口的電子產業比較有利,因為臺幣升值反而造成匯兌損失。我們可以留意市場是否炒作這些題材,作為選股的參考。

中央銀行:新臺幣/美元 銀行間收盤匯率

如果想要查詢最新的新臺幣兌美元收盤匯率,可至 中央銀行 網站參考 新臺幣/美元 銀行間收盤匯率

中央銀行首頁 > 外匯資訊 > 新臺幣對美元銀行間成交之收盤匯率 > 最新日資料

https://ithelp.ithome.com.tw/upload/images/20220910/20150150wXITuwXVHb.png

中央銀行會在每一日工作日約下午 4 時至 5 時,提供當日銀行間成交收盤匯率。

如果需要取得新臺幣兌美元收盤匯率的歷史資料,可至 政府資料開放平臺 下載 銀行間市場新臺幣對美元收盤匯率 資料集。該資料集提供了 2008 年至今的每一營業日新臺幣對美元銀行間成交之收盤匯率。

臺灣期貨交易所:每日外幣參考匯率

除了到央行網站查詢 美元兌新臺幣 收盤匯率外,也可以在期交所網站的 交易資訊-每日外幣參考匯率查詢 頁面,查詢包含 美元/新台幣 在內的外幣參考匯率。

期交所首頁 > 交易資訊 > 每日外幣參考匯率查詢

在「交易資訊-每日外幣參考匯率查詢」頁面,選取「日期(起)」、「日期(迄)」(查詢區間不可超過1年)的日期區間,然後點選「送出查詢」後,期交所就會列出該符合選取日期範圍的逐日外幣參考匯率。

https://ithelp.ithome.com.tw/upload/images/20220910/20150150Ajv7LU1MiY.png

期交所雖在「交易資訊-每日外幣參考匯率查詢」頁面下方備註:「本功能查詢結果係本公司每日收盤時點公告執行盤後洗價與保證金計算之匯率資料,與中央銀行(www.cbc.gov.tw)每日公告台北外匯經紀股份有限公司收盤匯率之時點與匯率不同。」不過經筆者核對,期交所提供的美元兌新臺幣參考匯率,自 2015 年 7 月 20 日後,已與中央央行公布的數據一致。

點選「檔案下載」則可以匯出該日期範圍的逐日外幣參考匯率的 CSV 檔案。實際上,這個 HTML Form 表單是使用 POST 方法,向以下位址提交表單請求:

`https://www.taifex.com.tw/cht/3/dailyFXRateDown

這個表單可設定的欄位如下:

  • queryStartDate:日期(起)。接受 yyyy/MM/dd 的日期格式,如 2022/07/01
  • queryEndDate:日期(迄)。接受 yyyy/MM/dd 的日期格式,如 2022/07/01

我們可以打開終端機使用 curl 指令模擬表單請求:

$ curl --request POST \
    --url https://www.taifex.com.tw/cht/3/dailyFXRateDown \
    --header 'Content-Type: multipart/form-data' \
    --form queryStartDate=2022/07/01 \
    --form queryEndDate=2022/07/01

瞭解下載 CSV 檔案的方式後,我們就可以實作程式取得資料。

實作:取得外幣參考匯率

在本系列文前面的篇幅已經示範從期交所取得多項資料,因此我們就用比較熟悉的方式,從期交所提供的 每日外幣參考匯率 來取得 美元兌新臺幣 數據。

開啟 src/scraper/taifex-scraper.service.ts 檔案,在 TaifexScraperService 實作 fetchExchangeRates() 方法,取得外幣參考匯率:

import * as csvtojson from 'csvtojson';
import * as iconv from 'iconv-lite';
import * as numeral from 'numeral';
import { DateTime } from 'luxon';
import { Injectable } from '@nestjs/common';
import { HttpService } from '@nestjs/axios';
import { firstValueFrom } from 'rxjs';

@Injectable()
export class TaifexScraperService {
  constructor(private httpService: HttpService) { }

  ...

  async fetchExchangeRates(date: string) {
    // 將 `date` 轉換成 `yyyy/MM/dd` 格式
    const queryDate = DateTime.fromISO(date).toFormat('yyyy/MM/dd');

    // 建立 FormData
    const form = new URLSearchParams({
      queryStartDate: queryDate,  // 日期(起)
      queryEndDate: queryDate,    // 日期(迄)
    });
    const url = 'https://www.taifex.com.tw/cht/3/dailyFXRateDown';

    // 取得回應資料並將 CSV 轉換成 JSON 格式及正確編碼
    const responseData = await firstValueFrom(this.httpService.post(url, form, { responseType: 'arraybuffer' }))
      .then(response => csvtojson({ noheader: true, output: 'csv' }).fromString(iconv.decode(response.data, 'big5')));

    // 若該日期非交易日或尚無資料則回傳 null
    const [fields, row] = responseData;
    if (fields[0] !== '日期') return null;

    // 將 string 型別數字轉換成 number
    const raw = row.slice(1).map(data => numeral(data).value());

    const [
      usdtwd, // 美元/新台幣
      cnytwd, // 人民幣/新台幣
      eurusd, // 歐元/美元
      usdjpy, // 美元/日幣
      gbpusd, // 英鎊/美元
      audusd, // 澳幣/美元
      usdhkd, // 美元/港幣
      usdcny, // 美元/人民幣
      usdzar, // 美元/南非幣
      nzdusd, // 紐幣/美元
    ] = raw;

    return {
      date,
      usdtwd,
      cnytwd,
      eurusd,
      usdjpy,
      gbpusd,
      audusd,
      usdhkd,
      usdcny,
      usdzar,
      nzdusd,
    };
  }
}

fetchExchangeRates() 方法中,需要指定 date 參數,表示要取得外幣參考匯率的日期。我們定義回傳的物件欄位包含如下:

  • date:日期
  • usdtwd:美元/新台幣
  • cnytwd:人民幣/新台幣
  • eurusd:歐元/美元
  • usdjpy:美元/日幣
  • gbpusd:英鎊/美元
  • audusd:澳幣/美元
  • usdhkd:美元/港幣
  • usdcny:美元/人民幣
  • usdzar:美元/南非幣
  • nzdusd:紐幣/美元

完成後,我們只要使用 TaifexScraperServicefetchExchangeRates() 方法,就可以按日期取得外幣參考匯率。以日期 2022-07-01 為例:

{
  date: '2022-07-01',
  usdtwd: 29.755,
  cnytwd: 4.435875,
  eurusd: 1.0452,
  usdjpy: 135.375,
  gbpusd: 1.21095,
  audusd: 0.6797,
  usdhkd: 7.84665,
  usdcny: 6.7078,
  usdzar: 16.38805,
  nzdusd: 0.6171
}

本日小結

  • 美元兌新臺幣匯率與臺股表現呈正向關,亦是同時指標。
  • 當外國資金匯入,會造成新臺幣升值,資金流入股市,就有利臺股上漲。
  • 當外國資金匯出,會造成新臺幣貶值,資金從股市流出,就容易造成臺股下跌。
  • 暸解如何在中央銀行網站上查詢「新臺幣/美元 銀行間收盤匯率」。
  • 瞭解如何在期交所網站上查詢並實作取得取得外幣參考匯率的方法。

Node.js 量化投資全攻略:從資料收集到自動化交易系統建構實戰
本系列文已正式出版為《Node.js 量化投資全攻略:從資料收集到自動化交易系統建構實戰》。本書新增了全新內容和實用範例,為你提供更深入的學習體驗!歡迎參考選購,開始你的量化投資之旅!
天瓏網路書店連結:https://www.tenlong.com.tw/products/9786263336070


上一篇
Day 09 - 散戶期貨指標:小台散戶多空比
下一篇
Day 11 - 全球經濟火車頭:美股四大指數
系列文
從 Node.js 開發者到量化交易者:打造屬於自己的投資系統31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言