網頁

2020年12月29日 星期二

R:各國指數比較

     2020因為新冠疫情的關各國經濟受到不小衝擊,連帶股價也跳水,不過自3月疫情爆發以來到現在12月底幾個重要的指數到底恢復的如何,這篇就用R來統計一下。
    我舉美國道瓊(代碼:DJI),台灣加權(代碼:TWII),新加坡海峽(代碼:STI),越南指數(代碼:VNI),香港恆生(代碼:HSI)來當例子說明。
程式碼如下:

#載入所需套件
library(quantmod)
library(PerformanceAnalytics)

#開始統計的起始日期
d_from <- "2020-01-01"
#自Yahoo資料庫抓取資料
index_symbol <- c("^DJI", "^TWII", "^STI", "^HSI")
getSymbols(index_symbol, src="yahoo", from=d_from)

#將每日收盤調整價放入變數
TW_DR <- dailyReturn(Ad(TWII))
DJ_DR <- dailyReturn(Ad(DJI))
ST_DR <- dailyReturn(Ad(STI))
HS_DR <- dailyReturn(Ad(HSI))

#將各指數的股價資料合併,缺少資料的不列出
m1 <- merge(DJ_DR, TW_DR, ST_DR, HS_DR, all = F)
#設定欄位名稱
colnames(m1) <- c("Dow Jones", "Taiwan", "Singaport", "HangSeng")
#畫出圖表
charts.PerformanceSummary(m1, event.labels = T, main = "Performance Summary")

如下圖:


 顏色依序是:黑色線條是道瓊指數,紅色線條是台灣加權指數,綠色線條是新加坡海峽指數,藍色線條是香港恆生指數。

#計算標準差夏普值
table.AnnualizedReturns(m1, scale = 252, Rf = 0.01/252)
 

可以看出新加坡海峽指數是最差,台灣加權指數表現最好。

#計算年報酬率
DJ <- annualReturn(DJI)
TW <- annualReturn(TWII)
ST <- annualReturn(STI)
HS <- annualReturn(HSI)

df <- data.frame(DJ, TW, ST, HS)
colnames(df) <- c("DJI%", "TWI%", "STI%", "HSI%"); df*100


自2020/01/01開始到12/28日止,各大指數回報率最好是台灣加權20.4%,新加坡海峽指數最差-12.0%。


2020年12月10日 星期四

R:KDJ 指標的計算


 KDJ指標中文名隨機指標,由喬治·萊恩(GeorgeLane)創立,是目前期貨和股票市場上常用的技術分析指標。KDJ指標在設計過程中主要是研究最高價、最低價和收盤價之間的關系,體現市場情緒,可以用來測度超買或超賣現象,被廣泛應用於中短期趨勢分析中。

     一般說來,KD線超過80意味著超買,KD線低於20意味著超賣;K線在低位上穿D線為“金叉”是買入信號,K線在高位下穿D線為“死叉”是賣出信號。由此可見KDJ是非常簡單實用的技術指標。但是在R語言常用的幾個量化套件(如quantmod、PerformanceAnalytics 和 TTR)中都沒有用於計算KDJ指標的函數。這篇就根據 KDJ 的定義總結 KDJ 的計算方法。

  計算 KDJ 首先要計算周期的 RSV值,就是未成熟隨機指標值,然後再依次計算K值、D值及J值。以 KDJ 日線數據的計算為例,其計算公式為:(圖片摘自理財周刊)

J值 = (3 * 當日K值) - (2 * 當日D值)

那我就以特斯拉(美股代號:TSLA)來說明,
首先我們先抓取2020/03/01 到 2020/12/09 TESLA的股價資訊
library(quantmod)
library(PerformanceAnalytics)
d_from <- "2020-03-01"
symbo <- c("TSLA")
s <- symbo
col <- c("white", "black")
getSymbols(s, src="yahoo", from=d_from, col=col[2])
stock <- get(s)
 

接著根據股價資訊來計算 KDJ 值
stock_length <- nrow(stock)        # 數據長度
KDJ <- matrix(NA, stock_length, 3) # 構建存放數據的矩陣
KDJ <- as.data.frame(KDJ)          # 轉換為data.frame
colnames(KDJ) <- c("K", "D", "J")  # 1-3列的名稱為K,D,J
KDJ[1:8, ] <- 50                   # 前8天的K,D,J均設為50
high_max <- runMax(Hi(stock), n=9) # 計算9日內最高價
low_min <- runMin(Lo(stock), n=9)  # 計算9日內最低價
rsv <- (Cl(stock) - low_min)/(high_max - low_min) * 100 #計算rvs
for(i in 9:stock_length) {
  KDJ[i, 1] <- 2/3 * KDJ[(i-1), 1] + 1/3 * rsv[i, ]  #計算K值
  KDJ[i, 2] <- 2/3 * KDJ[(i-1), 2] + 1/3 * KDJ[i, 1]
#計算D值
  KDJ[i, 3] <- 3 * KDJ[i, 1] - 2 * KDJ[i, 2]         #計算J值
}

KDJ <- as.xts(KDJ, order.by=index(rsv)) #將KDJ轉化為xts格式
cols <- c("red","blue","darkcyan")      #KDJ線顏色分別為紅
、藍、暗青色
chartSeries(stock, theme=col[1], name=s, TA="addTA(KDJ, col=cols)")

執行結果如下:

和看盤軟體比對一下,結果正確:

也可以輸入 tail(KDJ, n=10)來看最後10天的KDJ值:


難怪小摩昨天說 Tesla只值90美元,股價馬上就修正了7%。

使用圖表、圖形和把數據進行可視化,可以幫你更容易的解釋數據模式、趨勢、統計規律和數據的相關性。至於投資還是要注意風險,就如廣告所說:「投資一定有風險,基金投資有賺有賠,申購前應詳閱公開說明書」

 

2020年11月23日 星期一

R:股價年度報酬率計算

這篇介紹一下利用 PerformanceAnalytics 程式庫分析股價年度(月或日)報酬然後製成報表。
程式碼如下:

library(quantmod)
library(PerformanceAnalytics)
d_from <- "2010-01-01"
getSymbols("SPY", src="yahoo", from=d_from)
getSymbols("XLK", src="yahoo", from=d_from)
getSymbols("QQQ", src="yahoo", from=d_from)
getSymbols("SOXX", src="yahoo", from=d_from)
getSymbols("XLE", src="yahoo", from=d_from)

我們從 yahoo 取得 SPY(標普500)XLK(美國科技股)QQQ(納斯達克100)SOXX(費城半導體)XLE(能源類股)的資訊。

SPY_MR <- monthlyReturn(SPY)
XLK_MR <- monthlyReturn(XLK)
QQQ_MR <- monthlyReturn(QQQ)
SOX_MR <- monthlyReturn(SOXX)
XLE_MR <- monthlyReturn(XLE)

然後利用 monthlyReturn 計算月報酬率。

m1 <- merge(SPY_MR, XLK_MR, QQQ_MR, SOX_MR, XLE_MR, all = F)
colnames(m1) <- c("SPY", "XLK", "QQQ", "SOXX", "XLE")
df <- t(table.CalendarReturns(m1)); df

將上面的股價資訊合併,並轉置矩陣,執行結果如下:

我們可以看到10年來 SPY、XLK、QQQ、SOXX、XLE 的年度績效。
註:2020 只有計算到11月

也可以利用View函數將報表用表格方式呈現:
View(t(table.CalendarReturns(m1)))


2020年11月22日 星期日

R:股價年化標準差及股價比較

上一篇介紹了如何獲取股價資訊,這些都是單一的資料,如果想要做合併比較以便查看綜合比例該怎麼做?在 Google 財經上面也有提供比較的功能,不過只能比較 2 檔股價稍微少了點。


這篇就介紹一下如何比較個股的表現,程式碼如下:

library(quantmod)
library(PerformanceAnalytics)
d_from <- "2020-01-01"
getSymbols("SPY", src="yahoo", from=d_from)
getSymbols("SOXX", src="yahoo", from=d_from)
getSymbols("XLE", src="yahoo", from=d_from)
SPY2 <- dailyReturn(Ad(SPY))
SOX2 <- dailyReturn(Ad(SOXX))
XLE2 <- dailyReturn(Ad(XLE))

首先載入 quantmodPerformanceAnalytics 這2個程式庫
獲取資料的日期從 2020-01-01 開始
取得 SPY(標普500指數),SOXX(費城半導體指數),XLE(能源指數)資料,來源從 yahoo
dailyReturn(Ad(SPY)) 將SPY每日的調整價格 Ad (Adjusted)放到變數SPY2。
也可以用收盤價 (Cl)來計算。

m1 <- merge(SPY2, SOX2, XLE2, all = F)
colnames(m1) <- c("SPY", "SOXX", "XLE")
charts.PerformanceSummary(m1, event.labels = T, main="標普vs費半vs能源指數")

將 SPY2,SOX2,XLE2 合併資料
m1 的列名稱為"SPY","SOXX","XLE"
根據 m1 的資料來畫出圖形:

我們可以看到紅色線條是費半指數黑色線條是標普500指數綠色是能源類指數;這也就是說自 2020/ 1月到現在表現最好的是費城半導體指數(+38%),再來是標普500指數(+10%),最差的是石油能源類指數(-40%)。

接下來可以計算年化標準差:

table.AnnualizedReturns(m1, scale = 252, Rf = 0.01/252)

Annualized Return:年化報酬率
Annualized Std Dev:年化標準差
Annualized Sharpe (Rf=1%):夏普值2

其中夏普率= [(每日報酬率平均值- 無風險利率) / (每日報酬的標準差)]x (252平方根)
252平方根是因為一年大約有252天交易日,意思是將波動數值從每日調整成年


代表意思是,例如夏普率 0.5,表示在承受1%的波動風險下,長期可以創造0.5%的報酬率。
也可以說想得到5%的報酬,可以預期過程有10%的上下波動。

至於夏普值更詳細的說明網路上都可以查到我就不說明了。當你遇到一個投資組合,不知道如何檢視成效時,夏普率會是一個很好的輔助指標。


2020年11月20日 星期五

R語言:簡易爬蟲(財經新聞)

 這一篇介紹 MoneyDJ 新聞頭條的爬蟲,所需要的套件有2個:

library(rvest)   #爬蟲相關套件
library(stringr) #處理字串的套件

以 MoneyDJ 即時新聞網站為例,我們要先讀取它的首頁,運用套件的函數將該網頁的資料下載下來。

(1)讀取目標網頁:

url <- "http://blog.moneydj.com/news/"
doc <- read_html(url, encoding = "UTF-8")

(2)爬取目標網頁內容:

這部分需要爬取新聞標題新聞標題子連結網址發佈時間 三個部分

首先,爬取新聞標題

 header <- doc %>%
  html_nodes("#MainContent_Contents_sl_gvList a") %>%
  html_text()
head(header, n = 5) #檢查前5個標題內容

其中 "#MainContent_Contents_sl_gvList a" 可以利用 Selector Gadget 來取得 CSS 的標題,


執行結果:

 

再來是爬取文章子連結

link <- doc %>%
  html_nodes("#MainContent_Contents_sl_gvList a") %>%
  html_attr("href")
head(link, n = 5)

執行結果:


 再來是發佈時間

post_d <- doc %>%
  html_nodes("#MainContent_Contents_sl_gvList td:nth-child(1)") %>%
  html_text()
post_d <- gsub("\r\n|\\s", "", post_d)
head(post_d, n = 5)

 用 Selector Gadget 圈選時要記得排除不需要的CSS,

執行結果:

我們可以看到第1筆的發佈時間是"11/2014:22",正確是"11/20 14:22",爬蟲套件把空白刪掉了,我們再用正規式補一個"-"給 post_d 的每一筆資料:

post_d <- gsub("^(\\d{2})/(\\d{2})(\\d{2})", "\\1/\\2-\\3", post_d)

可以看到這20筆資料已經是正確的日期格式。

註:會在月份與時間中間加上"-"是因為如果放一個空白,最後存成 csv 檔案時還是會被刪去,所以用"-"來分隔月份與時間。

最後就是利用剛剛爬取的文章子連結再去把文章內容爬下來:

article.all <- c()
for(i in 1:length(link)) {
  url <- paste0("https://www.moneydj.com", link[i])
  doc.a <- read_html(url)
  article <- doc.a %>%
    html_nodes("#MainContent_Contents_mainArticle") %>%
    html_text() %>%
    str_c(collapse = "")
  article.all <- append(article.all, article)
}; article.all[20] #檢視第20筆文章內容

最後把這3筆資料(發布時間,文章標題,文章內容)整合成 data frame格式然後儲存成 csv 檔:

df <- data.frame(date = post_d, title = header, content = article.all)
df[1:5, 1:2]
write.csv(df, file="news.csv")

開啟 news.csv:

大功告成。

完整程式碼如下:
library(rvest)
library(stringr)
url <- "https://www.moneydj.com/KMDJ/News/NewsRealList.aspx?a=MB010000"
url <- "http://blog.moneydj.com/news/"
doc <- read_html(url, encoding = "UTF-8")
# 取得新聞標題
header <- doc %>%
  html_nodes("#MainContent_Contents_sl_gvList a") %>%
  #html_nodes("a") %>%
  html_text()
head(header, n = 5) #檢查前5個標題內容
# 取得新聞的文章子連結
link <- doc %>%
  html_nodes("#MainContent_Contents_sl_gvList a") %>%
  #html_nodes("a") %>%
  html_attr("href")
head(link, n = 5)
# 取得發布時間
post_d <- doc %>%
  html_nodes("#MainContent_Contents_sl_gvList td:nth-child(1)") %>%
  html_text()
post_d <- gsub("\r\n|\\s", "", post_d)
head(post_d, n = 5)
post_d <- gsub("^(\\d{2})/(\\d{2})(\\d{2})", "\\1/\\2-\\3", post_d); post_d

# 先創造一個空的物件,將所有文章內容合併在同一個物件中
article.all <- c()
for(i in 1:length(link)) {
  url <- paste0("https://www.moneydj.com", link[i])
  doc.a <- read_html(url)
  article <- doc.a %>%
    html_nodes("#MainContent_Contents_mainArticle") %>%
    html_text() %>%
    str_c(collapse = "")
  article.all <- append(article.all, article)
}; article.all[20] #檢視第20筆文章內容
df <- data.frame(date = post_d, title = header, content = article.all)
df[1:5, 1:2] #檢視前5筆,1~2欄的資料
write.csv(df, file="news.csv") #寫入 news.csv 檔案




2020年11月18日 星期三

R語言:簡易爬蟲(股價資訊)

這篇我想透過安裝和使用quantmod這個套件,用它來簡單分析股票作為R的入門介紹。

 quantmod是什麼?
quantmod是一個R的套件,全名是 Quantitative Financial Modelling and Trading Framework for R ,它是一個用來做股價相關分析的套件。

接下來我試著用quantmod來獲取台灣加權指數的資訊。

(1).首先安裝和載入quantmod套件

於 R console輸入: install.packages("quantmod")
安裝好之後輸入:
library(quantmod)
getSymbols("^TWII", src="yahoo", from="2020-02-01", to="2020-11-17")
head(TWII)

getSymbols 這個是quantmod提供的方法,^TWII 是 Yahoo 財經的股票代號,src 表示這個資料來源是yahoo資料庫。


head() 函數可以將資料印出前6筆方便檢視內容

執行後結果如下:


這個資料row(行)是表示日期,col(列)有6個欄位分別是Open(開盤價) High(盤中最高)、Low(盤中最低)、Close(收盤價)Volume(交易量)、Adjusted(還原權值)

有了這些資料我們就可以畫一個簡單的 Barchart,輸入 barChart(TWII)


簡單吧!

有了這些資料我們就可以進一步做分析,就拿最近最紅的護國神山台積電(2330)當例子好了。

要獲取台股資訊必須用"台股代號"+".TW"來給 quantmod,以台積電來說嘅票代號2330那我們就要給2330.TW、聯發科就是2454.TW,依此類推。

getSymbols("2330.TW", src="yahoo", from="2020-02-01", to="2020-11-17") #TSMC
TSMC.TW <- get("2330.TW")
chartSeries(TSMC.TW, theme = "white")
ma20 <- runMean(TSMC.TW[,4], n=20)
ma60 <- runMean(TSMC.TW[,4], n=60)
addTA(ma20, on=1, col="blue")
addTA(ma60, on=1, col="red")

TSMC.TW <- get("2330.TW") 因為台股代號是以數字開頭,無法直接給barchart或是chartseries 繪圖, 所以將取得的代號資訊給定一個名稱。

ma20 <- runMean(TSMC.TW[,4], n=20) 20日平均值,已便畫出20日均線

addTA(ma20, on=1, col="blue") 將20日平均值資料疊上圖表

執行結果


還可以疊上

addWPR():威廉指標,

addDPO():DPO 是一個排除價格趨勢的震蕩指標。DPO>0,表明目前處於多頭市場;DPO<0,表明目前處於空頭市場。

再舉一個聯發科(2454.TW) 當例子:

library(quantmod)
getSymbols("2454.TW", src="yahoo", from="2020-02-01", to="2020-11-17")
MTEK.TW <- get("2454.TW")
chartSeries(MTEK.TW, theme = "white")
ma05 <- runMean(TSMC.TW[,4], n=5) #計算5日平均綫值
ma20 <- runMean(TSMC.TW[,4], n=20)
ma60 <- runMean(TSMC.TW[,4], n=60)
addTA(ma05, on=1, col="cyan") #畫出5日平均綫,青色
addTA(ma20, on=1, col="blue")
addTA(ma60, on=1, col="red")
addSAR() #畫出SAR拋物線指標

SAR指標的一般研判標準:

1.當股票股價從SAR曲線下方開始向上突破SAR曲線時,為買入信號,預示著股價一輪上升行情可能展開,投資者應迅速及時地買進股票。

2.當股票股價從SAR曲線上方開始向下突破SAR曲線時,為賣出信號,預示著股價一輪下跌行情可能展開,投資者應迅速及時地賣出股票。

執行結果:

 

最後舉一個美股當例子,特斯拉 (TESLA美股代碼:TSLA):

library(quantmod)
getSymbols("TSLA", src="yahoo", from="2020-02-15", to="2020-11-18")
TSLA_price <- TSLA[, 4] #第4欄收盤價放到變數 TSLA_price
barChart(TSLA_price) #畫出2020-02-15~2020-11-18收盤線圖
addCCI() #加上順勢指標CCI

超賣超買指標:專門測量股價是否已經超出常態分布範圍。

一般來說,CCI上升超過100時,買入;當CCI下降低於-100,賣出。

 執行結果:


有了
quantmod 套件包在分析金融數據會變得很簡單,對於不懂網頁技術的人來說是一大利器,對初學R的人來說也是很好入門。

quantmod其他一些技術指標:

addCMF():Chaikin資金流量指標CMF

addCMO():Chande動量擺動指標CMO

addEMA():指數平均數指標EMA

addEnvelope():包絡線指標Envelope

addEVWMA():彈性成交量加權移動平均線指標EVWMA

addMACD():移動平均收斂發散指標MACD

addMomentum():動量指標Momentum

addExpiry()合約終止線Expiry

addSMI()隨機動量指標SMI

addDEMA()雙指數移動平均指標DEMA

addROC()變動率指標ROC

addRSI()相對強弱指標RSI

addWMA()加權移動平均線指標WMA

addZLEMA()零滯後指數移動平均ZLEMA

2020年11月16日 星期一

R語言:簡易爬蟲(統一發票中獎號碼)

 首先需安裝2個爬蟲套件:rvest 與 magrittr,其中 magrittr 是為了使用 %>% 搭配 rvest 中的函數。

#安裝 rvest 與 magrittr
pkgs <- c("rvest", "magrittr")
install.packages(pkgs)

最近一期統一發票中獎號碼網址:

https://www.etax.nat.gov.tw/etw-main/web/ETW183W2_10907/ 

我將日期的部分分開用一個變數代替 ,以便可以修改成其他日期

library(rvest)
library(magrittr)
date_s <- "10907"
url <- paste0("https://www.etax.nat.gov.tw/etw-main/web/ETW183W2_", date_s)

爬取整個網頁的程式碼:

doc <- read_html(url, encoding = "UTF-8")
number <- doc %>%
  html_nodes("#tablet01") %>%
  html_nodes("td") %>%
  html_text()
head(number, n = 1); #檢查資料

其中 "tablet01" 可以用  Selector Gadget 來定位,這是一個CSS 選擇器,方便在複雜的CSS網頁定位所要資料的CSS,依 Selector Gadget 提供的步驟將Selector Gadget至於書籤欄,點選Selector Gadget後網頁下方會出現一個功能列:

接著點選要爬取的 "109年 07-08月" ,"13362795",這時下方的CSS選擇器會出現td 數量23,因為包含了一些不必要資料所以要排除掉。

 

用滑鼠點選來排除不需要的CSS:

 

這時資料已經剩下14筆應該就是我們所需要的,將"#tablet01 td"填入我們的程式碼:

doc <- read_html(url, encoding = "UTF-8")
number <- doc %>%
  html_nodes("#tablet01") %>%
  html_nodes("td") %>%
  html_text()
head(number, n = 1); #檢查資料

我們可試著執行一次看看結果是什麼:

 我們把 number 資料 1~13 筆列出,比對網頁的資料正確:


 接下來用 Selector Gadget 將獎別的 CSS 填入程式碼中:

bonus_name <- doc %>%
  html_nodes("th") %>%
  html_text()
head(bonus_name, n = 1); bonus_name[1:11]

執行上面的程式碼結果:

 

到這邊已經算是都正確了,如果要取用中獎號碼來做兌獎處理,必須還要做一些步驟,

我們可以看到 number 向量中獎號碼的索引是 2, 4, 6, 13,印出來的結果是:


 其中的號碼包含了空白還有特殊符號,利用正規式將這些字元過濾掉:

num <- gsub("^\\s|\\s$", "", number[c(2, 4, 6, 13)])
num <- unlist(strsplit(num, " ")); num

 

特別號"987" 和 "614" 中間還有一個逗號也要過濾掉:

ext_6 <- unlist(strsplit(num[6],"、")); ext_6

這樣就完成了,特別獎~頭獎存於 num[1:5],特別號存於變數 ext_6,這樣就可以利用這些來做兌獎的處理。

完整的程式碼如下:

library(rvest)
library(magrittr)
date_s <- "10907"
url <- paste0("https://www.etax.nat.gov.tw/etw-main/web/ETW183W2_", date_s)

doc <- read_html(url, encoding = "UTF-8")
number <- doc %>%
  html_nodes("#tablet01") %>%
  html_nodes("td") %>%
  html_text()
head(number, n = 1); #檢查資料

bonus_name <- doc %>%
  html_nodes("th") %>%
  html_text()
head(bonus_name, n = 1); bonus_name[1:11]

num <- gsub("^\\s|\\s$", "", number[c(2, 4, 6, 13)])
num <- unlist(strsplit(num, " ")); num

lotto_n <- num[1:5]; lotto_n
ext_6 <- unlist(strsplit(num[6],"、")); ext_6


2020年9月6日 星期日

解決 csv檔數字前綴0無法顯示的問題

 當我們將資料匯出成 csv 檔後再用Excel開啟會發現數字前綴0會無法顯示,但是用文字編輯軟體去看檔案內容其實是包含0的,要解決這個問題方法如下:






 

1. 首先不要用開啟檔案的方式,於檔案下拉選單選擇【匯入】:









匯入檔案類型點選【文字檔】:








2. 選擇【分隔符號】: 









3. 分隔符號選擇【逗號】,文字識別符用 " :








 

4. 欄資料格式選擇【文字】,在下方預覽選取的資料區點選有數字的欄位:


 

 

 

 

 

 

 

5.  選擇資料放置儲存格位置:






6. 出來的結果如下:









2020年7月13日 星期一

Android上好用的 wifi分析儀

最近家裡的 Wifi 感覺很不穩定,在手機上裝了【Wifi 分析儀】這個 App來檢測無線網路
訊號,這個App是用圖表方式呈現,讓你可以很直觀地看出每個 Wi-Fi 基地台所使用的
頻道與占用的頻段。

下圖是家中 Wifi 2.4GHz 頻段的分佈,可以看到和鄰居的分享器很多頻段是重疊的,這對家中
的藍芽設備有時會造成干擾,換了一個雙頻2.4G/5G 的雙頻分享器,開啟5G的頻段看看。

下圖是用5GHz的頻段檢測的結果,這個頻段就只有2個頻率有使用(5710鄰居,5755我的),
看起來使用的頻段就少很多,相對干擾就會少。

 開啟通道評級功能可以看到2.4G/5G 的各個通道信號評比,藉由這功能可以選擇較好的通道
 (分享器設定)。
另外一個儀表的功能可以檢測信號強度。

使用無線網路5GHz與2.4GHz的差異:
(1) 5GHz的無線網路覆蓋範圍比2.4GHz小
(2) 2.4GHz頻率比5GHz擁擠,且2.4GHz的設備比5GHz的設備容易收到干擾。
(3) 與2.4GHz頻道相比,較少的設備能夠使用5GHz頻道。
如果周圍有太多無線干擾並且您的設備支援5GHz,建議使用5GHz無線網路,否則您最好
選擇2.4GHz。

在OSX上可以使用【無線診斷】這個應用程式來掃描 wifi 的頻段:
Windows 的使用者可以用 Acrylic WiFi Free 來分析 wifi 信號: