前言
最近在做量化分析的時候 剛好遇到一群"沒有接觸過程式"的朋友
雖然很想請他們用Python 開始做量化分析
但新手小白也是剛接觸阿~~~~
所以不如就從R開始學好了 雖然這是想寫Python的網頁 (慚愧...)
本文是我想要達到的目標是
以最簡單直覺的方式,也就是用excel的方式啦!!
讓大家馬上就能 感受寫程式的快樂
我的介紹方式如下
0.安裝 => 0.1設定路徑=> 1.讀資料 => 2.生成數列 => 3.for 和 if 函數 => 4.輸出資料 => 5.用這幾招來畫股票的MA線(例子)
0.安裝
安裝...其實真的很簡單 就是 在網路上google網站/搜尋載點/下載 一直按 下一步/下一步/下一步就好了~~
google 一下 R 就好了 第一個就是
然後點CRAN 去到載點
載點很多 就點台灣的吧~~
安裝對新手小白來說 當然是裝Windows的囉
點baise 然後就下載安裝程式了
如果你一直按下一步 安裝完成後
桌面應該會出現這兩個 i386的那個是 32 bit的,X64 當然就是給 64 bit 用 (我是用這個)
不過你點哪個應該是都可以使用啦
0.1設定路徑: for 新手小白
因為R要讀寫檔案 總得知道位置
而我們設定現行目錄的話 他就會在我們當前的資料夾找檔案 (而我們也都把檔案放在同個資料夾)
之後就不用每次都跟他說 要去哪裡找資料夾了
方法: 打開R => 檔案 => 變更現行目錄
我是在桌面新增 一個Rtest的資料夾
1.讀入資料
會想寫R程式 大部分的情況是希望對 手裡的資料 作一些處理
所以怎麼吧資料讀進R裡 就是最重要的一步了(廢話)
新手小白們剛開始學的時候 是用一個簡單的指令 read.csv
懂國中英文的人都知道 read 就是讀的意思 那位什麼指令裡有 csv 呢!?
其實 csv 是一種檔案型式 就像EXCEL預設存出來的檔案 就是 xlsx
csv 是比較簡單的檔案型式 讀入的時候比較好處理
我們可以透過EXCEL 的另存新檔 把 xlsx 轉成 csv檔
大家可以試試 這裡有範例檔
大家可以注意他會寫成 逗點分隔檔 也就是csv檔
再來 回到R裡面 鍵入read.csv("範例_轉檔.csv")
就可以看到資料自動顯示在畫面上 只是筆數很多....
我寫了一個 x=read.csv("範例_轉檔.csv") 意思是我把 這些資料存在 x 裡面
注: 我還可以 鍵入 colnames(x) 他會顯示出 [1] "時間" "價錢" 也就是我EXCEL 裡的欄位名稱
如果你要只要價錢那行的話 你可以打 x=x[,2] (因為價錢在第二個欄位) 這樣便可以只取我要的欄出來了
好啦 以上就是 簡單讀入資料的方法
2.生成數列
生成序列 聽起來好像很專業
其實指的就是類似 excel 裡的一行資料
比如說 有一行資料叫時間 那他長得就是 1,2,3,4....,14這個樣子
下面是我們在R 簡單生成出數列的方法
比如我生成一個數列叫qq的數列 可以寫成 qq=1:20 那他就是 1,2,3,4.....,20
這序列總共有20個值 或我們把它想成20 個格子 裡面每個格子裡面放1 個數字
那我們可以用 qq[5] 叫出第 5個格子的值出來 它就是5
另一個寫法是用 c(1:20) 它生出來的東西和 直接寫 1:20 是一樣的
不過 我也可以寫成 qq=c() 那他叫出來的 也會是一個像是數列的東西 只是我們沒有放值進去
所以 當我打qq的時候 它會是NULL
c() 的這個寫法 一般是我還沒決定 這個數列有幾格/要放幾個數字時
我可以先跟R 說 我有一個數列了~ 那之後可以再把數字塞進去
像是 qq[5]=100 就是我把第 5 格塞 100 這個值進去
不過 我只有塞第 5 格 所以其他的當然還是空的囉
關於數列還有一個常用的 指令 length 也就是計算數量的長度(格子數)
如下圖: 我打 length( x ) 那我們就可以知道 x 的長度
其他 R裡邊的 數列,序列或是矩陣 還有很多的東西可以介紹
不過新手小白知道 以上的這些就可以做很多事情了~~~
3.for 和 if 函數
我們先複習一下 EXCEL 的 IF 函數
舉個例 : 下圖在說 C2這攔 是依據條件來給值得 條件:"當B2大於 100" 的時侯
如果滿足條件 那麼 C2會是1 , 反之 C2會是0
注意:這邊的IF 是大寫喔~~
那在R 上如何 實行這件事呢?
我們可以用 if 這個函數 它的用法是 if ( b2>100 ) { c2=1 } else { c2=0 }
稍微正式一點的講法是: if ( 條件式 ) { 條件式滿足時 要做的事 } else { 條件式不滿足時 要做的事 }
注意 : 對R而言 這些 括號是很重要的 不要忘了打喔~~
反之 PYTHON 是注重縮排 多一個空格少一個空格就差很多
R 則是沒什麼影響 你可以多一些 空格或縮排
再來要講 for 函數了, EXCEL 裡面沒有 for 函數
原因是 EXCEL 可以用下拉的方式 把函數都複製上去
例如:
也就是說 我在C2寫的 if 函數 在EXCEL下拉欄位 那C3 也會自動套用 C2的寫法 ( 這就是EXCEL 好用的地方啊.....)
例如 :
稍微正式一點寫成這樣:
for ( 控制變數 in 範圍 )
{
控制變數 在 每一次在範圍要做的事情
}
不過 還是以後多看一點例子 才會知道怎麼用比較好
4.輸出資料
前面講了讀入資料的概念後
其實輸出資料也式只要一個指令就好 : write.csv
我們來試試一個很白癡的例子: 把資料讀入 再原封不動的輸出
x=read.csv("範例_轉檔.csv")
write.csv(x,"範例_輸出.csv",row.names=F)
你會的到一個資料夾 然後資料完全一樣
注意: write.csv 會自動多一欄 1,2,3,4,.... 的index 補上 row.names=F 可以把這功能關掉
如果你想了解更多 可以打 ?write.csv 會有更進一步的說明 其他指令也是
那以上 就是這篇的教學啦~~
5.用這幾招來畫股票的MA線(例子)
關於MA線的算法有很多
我算的是最簡單的SMA 然後是每5日算一次
N=5 #這邊示範 MA 5
x=read.csv("範例_轉檔.csv")
x=x[,2] # 因為價錢是在第二欄
MA=c()
qq=0
for(qq in c(1:length(x)) )
{
if( qq < (N+1) ) { MA[qq]=x[qq] }
else { MA[qq]=( x[qq-1]+x[qq-2]+x[qq-3]+x[qq-4]+x[qq-5] )/N }
}
如何 這邊都是用我們剛剛才學會的招式 就可以簡單地算出MA值了
後記:
打這篇大概花了我超過半天的時間
雖然網路上google 就有很多介紹了
但我是以一個新手小白的立場 並且對量化分析感興趣的人 來寫這篇文章
希望對各位看官們有幫助囉~~ 然後如果你發現有錯誤的地方
請不吝指教 在下方留言吧
未來我也許會介紹更多R語言相關的東西吧......
但我還是比較想寫學最近學Python的心得啦XD