More Related Content Similar to [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單 (11) [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單3. 先自我介紹一下
• 大家好,我是牧恩!
• 部落格 (Bituzi)
• 筆名:牧清華
• 數學
• 資金管理 理論模擬策略回測
2016/09 3
https://www.youtube.com/watch?v=i5uCWL0nsFA
11. R Basic
• 加減乘除四則運算:1+2^3
• 向量產生的幾種方式:
• a=1:100
• b=100:1
• c=rep(3,5)
• d=seq(3,51,2)
• 向量運算:a=a+1,a+b,a*b
• 和:sum(a)
• 累積和:cumsum(a)
• 畫圖:plot(cumsum(a),col="red",type="l")
2016/09 11
12. R Basic
• a=0
• for (i in 1:100){a=a+1}
• a=0
• while (a<=100){a=a+1}
• a=0
• for (i in seq(1,99,by=2)){a=a+i}
2016/09 12
1+1+1+…+1=?
1+1+1+…+1=?
1+3+5+…+97+99=?
14. 下載資料 getSymbols
• 下載資料(預設Yahoo Finance)
• 蘋果: getSymbols("AAPL")
• 台積電: STK=get(getSymbols("2330.tw"))
• 不同的資料源:
• getSymbols('MSFT',src='google')
• getSymbols("DEXJPUS",src="FRED")
• 資料格式
• 使用head、tail
• 五個欄位:開高低收、量、還原權值
2016/09 14
15. 畫K線圖: chartSeries
• 時間週期
• 日K: Default
• 週K: STK_week=to.weekly(STK)
• 月K: STK_mon=to.monthly(STK)
• 自行定義? 週三K
• 時間範圍
• STK["2013"]
• to.weekly(STK["2013::2015"])
• STK["2013-01-01::2013-03-02"]
• 畫圖(Charting)
• barChart(STK["2015-01-01::2015-02-03"])
• chartSeries(STK, subset="2015-12-1::2016-03-21",theme="white")
2016/09 15
16. 技術分析指標
• 均線
• SMA(Cl(STK))
• addTA(SMA(Cl(STK)), on=1, col="blue") ## default: n=10
• addTA(SMA(Cl(STK),n=20), on=1, col="red")
• MACD
• addMACD()
• 不靈通道(Bollinger band)
• addBBands()
2016/09 16
17. 回測前置作業
• STK.week的列名稱
• rownames(STK)
• 有多少個日期?
• length(rownames(STK))
• 產生紀錄每筆交易損益的向量
• numeric(length(rownames(STK)))
• 產生紀錄每筆交易損益的向量,並附上日期
• profit=setNames(numeric(length(rownames(STK))), rownames(STK))
2016/09 17
18. 台積電: 週一開盤買,週五收盤賣
• 每周損益:周收盤價-周開盤價
• profit[m]=STK[m,4]-STK[m,1]
• 每週都要計算?
• for (m in rownames(STK)) {
• profit[m]=STK[m,4]-STK[m,1]
• }
• 練習
• 1: 若是開盤賣,收盤買
• 2: 月K架構?
2016/09 18
19. 損益績效
• 損益向量
• profit
• 總損益
• sum(profit)
• paste("Profit:",sum(profit))
• 累計損益
• cumsum(profit)
• 畫出累計損益
• plot(cumsum(profit), type="l",col="red",lwd=2)
• abline(h=0,col="green")
2016/09 19
20. 簡單的績效分析
• 贏的次數
• length(profit[profit>0])
• 勝率
• length(profit[profit>0])/length(profit[profit!=0])
• 平均賺
• mean(profit[profit>0])
• 平均賠
• mean(profit[profit<0])
• 賺賠比
• mean(profit[profit>0])/abs(mean(profit[profit<0]))
2016/09 20
22. 台積電: 週一開盤買,週五收盤賣!
績效模組: performance.R
2016/09 22
• Total Profit: 96685
• Trading Days: 488
• Profit Per Trade: 204.4091
• # of Win: 250
• Win Rate: 52.85412 %
• Winning Average: 2287.299
• Lossing Average: -2130.669
• Maximum Draw Down: 31800
• The Periods of MDD: 16 18 20 48 282
• Profit Factor: 1.203489
• Total Profit/MDD: 3.040425
24. 獲利因子(profit factor)
• 賺的和 / |賠的和|
• sum(profit[profit>=0])/sum(profit[profit<0])
• 意義:每輸1單位,必可再換來?單位的獲利
• 勝率很低無所謂? Why?
• 賺小賠大無所謂? Why?
• 交易次數很少無所謂? Why?
2016/09 24
26. 週一開低買,開高賣,週五收盤前出
• 第一週是否可以交易?
• 先紀錄第一週收盤
• lastC=STK[1,4] ## 或lastC=Cl(STK)[1]
• 交易邏輯回測
• for (m in rownames(STK)[-1]) {
if(STK[m,1]<=lastC){profit[m]=STK[m,4]-STK[m,1]}else(
profit[m]=STK[m,1]-STK[m,4])
lastC=STK[m,4]
}
• 練習
• 開低1%買,開高1%賣,收盤前空手
2016/09 26
27. TSMC: 開低買,開高賣
• Total Profit: 160638
• Trading Days: 488
• Profit Per Trade: 340.3358
• # of Win: 260
• Win Rate: 55.08475 %
• Winning Average: 2320.59
• Losing Average: -2088.278
• Maximum Draw Down: 25500
• The Periods of MDD: 20 22 39 50 89
• Profit Factor: 1.362849
• Total Profit/MDD: 6.299549
2016/09 27
28. 練習:開低1%買,開高1%賣,收盤前空手
lastC=STK[1,4]
for (m in rownames(STK)[-1]) {
if(STK[m,1]<=lastC*0.99){profit[m]=STK[m,4]-STK[m,1]}
if (STK[m,1]>=lastC*1.01){profit[m]=STK[m,1]-STK[m,4]}
lastC=STK[m,4]
}
• 最佳化參數:開低?%買,開高?%賣,收盤前空手
2016/09 28
30. HTC: 開高賣,開低買
• Total Profit: 37470
• Trading Days: 488
• Profit Per Trade: 79.55541
• # of Win: 228
• Win Rate: 48.40764 %
• Winning Average: 21658.89
• Lossing Average: -20167.72
• Maximum Draw Down: 591000
• The Periods of MDD: 5 7 19 41 151
• Profit Factor: 1.007646
• Total Profit/MDD: 0.06340203
2016/09 30
31. 扣掉交易成本
• 股票手續費
• 成交金額*0.1425% ,
• 買賣各一次
• 小數點以下無條件捨去,不足20元以20元計
• 證券交易稅:0.3%
• fee=STK[m,4]*0.006
• 期貨滑價+手續費扣5點
• 傳統回測:2+2+1?
• 經驗平均滑價約1.5點
2016/09 31
33. 尋找0050成份股哪隻股票最會獲利?
• 你可以考慮下面規則?
• 1. 周K架構 or 月K架構哪個好?
• 2. 開高(?%)賣,開低(?%)買
• 3. 開低(?%)買,開高(?%)賣
• 4. 是否可做到停損 & 停利?
• 停損不停利
• 停利不停損
• 請扣掉手續費:fee=STK[m,4]*0.006
• 試找出2007年至今,誰的 “profit”最高? 或是誰的PF最大?
2016/09 33
50. 濾網:去蕪存菁,拆解成…
輸了買2張,贏了買1張 = 買1張+ 輸了才買1張
2016/09 50
Total Profit: 70978.7
Trading Days: 488
Profit Per Trade: 292.0934
# of Win: 135
Win Rate: 55.55556 %
Winning Average: 2195.129
Lossing Average: -2086.701
Maximum Draw Down: 15423
The Periods of MDD: 27 35 41 48 107
Profit Factor: 1.314952
Total Profit/MDD: 4.602133
輸了“才”買1張
52. 動量策略 v.s.均值回歸
• 動量策略 (順勢交易,買高賣低,違反人性):
• 因為過去漲,所以現在買進;因為過去跌,所以賣出
• 均值回歸 (逆勢交易,買低賣高,大家都愛):
• 漲多了該回跌,跌深了該反彈
• 牛頓第二運動定律:動者恆動,靜者恆靜?
• 股價漲未來是否會繼續漲?股價跌未來是否會繼續跌?
• 進場、加碼、停損、停利 屬於哪一種?
• 在交易裡,大部分違反人性的事,都是好事!
• 不正常的人才會獲利!!!
2016/09 52
61. “突破”10日高點買進,3日後賣出
• 何謂突破?
• Cl(STK)[m]>max(Hi(STK)[(m-10):(m-1)]) ##今天收盤>前10日高點
• Cl(STK)[(m-1)]<max(Hi(STK)[(m-10-1):(m-2)]) ##昨天收盤<昨天前10日高點
• 前10日跟最後3日是否可交易?
• for (m in (10+1):(length(rownames(STK))-3)){
profit[m]=Cl(STK)[m+3]-Cl(STK)[m]-fee
}
• 停損
• SL=0.95 #5%停損
• if (min(Lo(STK)[m:(m+3)])<Cl(STK)[m]*SL){profit[m]=Cl(STK)[m]*(SL-1)-fee}
2016/09 61
72. 加碼的奧義: 成也加碼,敗也加碼!!
• 摩天大樓 (1,1,1,1….)
• 海龜
• 金字塔 (5,4,3,2,1)
• 正常人
• 倒金字塔(1,2,3,4,5)
• 瘋子
2016/09 72
投票表決一下你覺得哪個加碼法好?
76. 加碼第一口後: X+X1
2016/09
損益: 1670 2951
總交易天數: 1375
實際交易次數: 199
平均每次損益: 14.82915
獲利次數: 75
勝率: : 40.40 % 37.69%
平均賺: 92.96
平均賠: -32.42742
最大連續虧損: 375
最大連續虧損區間(天): 75 94 197 261 313
獲利因子: 1.59136 1.733897
總獲利/MDD: 6.68 7.869333
76
77. 加碼第二口後: X+X1+X2
2016/09
損益: 29513880
總交易天數: 1375
實際交易次數: 199
平均每次損益: 19.49
獲利次數: 75
勝率: 37.69% 37.64 %
平均賺: 111.68
平均賠: -36.25
最大連續虧損: 425
最大連續虧損區間(天): 79 93 96 197 257
獲利因子: 1.733897 1.862989
總獲利/MDD: 7.869333 9.129412
77
78. 加碼第三口後: X+X1+X2+X3
2016/09
損益: 3880 4439
總交易天數: 1375
實際交易次數: 199
平均每次損益: 22.30653
獲利次數: 75
勝率: 37.64 % 37.68 %
平均賺: 120.8
平均賠: -37.26613
最大連續虧損: 425
最大連續虧損區間(天): 89 93 94 200 257
獲利因子: 1.862989 1.960615
總獲利/MDD: 9.129412 10.4447
78
80. 第一次加碼: X1
2016/09
損益: 1281
總交易天數: 1375
實際交易次數: 103
平均每次損益: 12.43689
獲利次數: 47
勝率: 45.63107 %
平均賺: 55.12766
平均賠: -23.39286
最大連續虧損: 215
最大連續虧損區間(天): 93 96 98 114 345
獲利因子: 1.977863
總獲利/MDD: 5.95814
80
81. 第二次加碼 :X2
2016/09
損益: 1281 929
總交易天數: 1375
實際交易次數: 46
平均每次損益: 20.19565
獲利次數: 24
勝率: 45.63107 % 52.17391 %
平均賺: 60.66667
平均賠: -23.95455
最大連續虧損: 102
最大連續虧損區間(天): 93 96 110 269 305
獲利因子: 1.977863 2.762808
總獲利/MDD: 5.59 9.107843
81
82. 第三次加碼: X3
2016/09
損益: 929 559
總交易天數: 1375
實際交易次數: 24
平均每次損益: 23.29167
獲利次數: 14
勝率: 52.17391 % 58.33333 %
平均賺: 56.21429
平均賠: -22.8
最大連續虧損: 100
最大連續虧損區間(天): 56 63 91 110 871
獲利因子: 2.762808 3.451754
總獲利/MDD: 9.107843 5.59
82
88. 給你一枚銅板,人頭輸,數字贏2倍!
• 勝率50%,賠率為2
• 期望獲利
• 50%*(1+2)-1=0.5
• 平均來說,每賭1元,可獲利0.5元,50%報酬。
• 你有100元,可以玩無限多次,你會怎麼賭?
• 如果連這麼好的賭局,你都不會賭,你憑什麼在交易上獲利?
• 你可能會有其他說法,交易跟賭局不一樣?
• 交易勝率不固定,賠率不固定
• 交易次數有限次,賭局無限次
2016/09 88
賠光
WIN
LOSE
89. 要玩 “期望淨利 > 0”
的賭局,這個大家都知道!
但這樣就夠了嗎?
2016/09 89
90. 做個賭徒模擬實驗就知道….
• 勝率50%,賠率為2
• 1. 玩40次下注多少比例f會最好?
• 不同下注比例10%,20%,…,60%
• 2. 玩很多次下注多少比例f會最好?
• 玩100次、500次、1000次、5000次
• 用R語言模擬一下~
• Input: 勝率、賠率、下注比例
• Output: 資金成長曲線!
2016/09 90
96. 賭局設定:
• nbet=40 ## 賭幾局?
• Odds=2 ## odds (賠率)
• Pwin=0.5 ## win rate (勝率)
• initM=100 ## initial capital (初始資金)
• f=0.3 ## bidding fraction (下注比例)
• capital=rep(initM,1) ## current capital (紀錄每一局資產)
2016/09 96
97. 銅板賭局模擬
• 開始賭!
• for(i in 2:nbet){ ## 每一局
dice=sample(0:1,size=1,prob=c(0.5,0.5),replace=T) ## 模擬賭局輸贏
capital[i]=dice*capital[i-1]*f*(1+odds)+capital[i-1]*(1-f)} ## 資金成長
• 畫累計損益
• plot(capital,type="l",col="red",lwd=3,font=2
,xlab="The # of Bidding",ylab="The Growth of Capital"
,main=paste("WinRate",pwin*100,"%,","Odds",odds,", Play",nbet,"Games, "
,"Bidding",f*100,"%"))
• abline(h=initM,col="green",lty=2,lwd=3)
2016/09 97
103. 求 f 使得 AT= A1(1+bf)W(1-f)L 最大 ?
• Rearranging:
1
𝑇
log
𝐴 𝑇
𝐴1
=
𝑊
𝑇
log(1 + 𝑏𝑓) +
𝐿
𝑇
log(1 − 𝑓)
• As 𝑇 → ∞, we have 𝑝 log(1 + 𝑏𝑓) + (1 − 𝑝) log(1 − 𝑓)
𝒇 =
𝒑 𝟏 + 𝒃 − 𝟏
𝒃
• 什麼時候 f=1? (Showhand!)
• 勝率99%,賠率10000的賭局,要你全壓,你賭不賭?
2016/09 103
109. HPR: Holding Period Return
• Idea: HPR= 1 + f (-profit/biggest loss)
• Example: 16、-8、+4
• TWR (f)
= HPR1 * HPR2 * HPR3
= [1 + f (-16/-8)] * [1 + f (-(-8)/-8)] * [1 + f (-4/-8)]
= (1 + 2f ) * (1 – f) * (1 + 0.5f)
• How to find optimal f to maximize TWR(f)?
• Brute method: from f=1%, f=2%, f=3%,…,f=98%,f=100%
2016/09 109
114. 三個層級的先知
• 第一層 (神):不用知道勝率,因為他知道下一場會贏還是會輸!
• 可以梭哈(ShowHands)
• 第二層(半仙):知道未來10次,”一定會贏5次,輸5次“
• 可以下最佳比例(Optimal f)
• 第三層(智者):知道未來10次發生的機率“確實是50%”。(不容易)
• 一旦遇到偏差,錯誤的下注比例很有可能讓你受傷慘重。
•賭小一點(1%~2%)
2016/09 114
再來我才要解釋這件事!
119. 開盤突破昨日波動(高低)*k1
• 開盤突破昨日波動*k1買進
• 20點停損,收盤平倉
• 回測標的:台指期貨
• 回測時間:2010.05.25~2015.09.10
2016/09
程式碼: 7_TX_HL.R
Total Profit: 1140
Trading Days: 1543
Profit Per Trade: 2.76699
# of Win: 161
Win Rate: 39.07767 %
Winning Average: 43.81366
Lossing Average: -23.56175
Maximum Draw Down: 312
The Periods of MDD: 107 112 171 188 254
Profit Factor: 1.192763
Total Profit/MDD: 3.653846
119
120. 輸贏濾網:輸了一次再進場!
2016/09 120
Total Profit: 1140
# of Win: 161
Win Rate: 39.07767 %
Maximum Draw Down: 312
Profit Factor: 1.192763
Total Profit/MDD: 3.653846
Total Profit: 1427
# of Win: 106
Win Rate: 42.23108 %
Maximum Draw Down: 235
Profit Factor: 1.419582
Total Profit/MDD: 6.07234
121. 固定分數 (以台指期貨為例,固定風險比例2%)
• 每口最大損失: 200*(30+5)=7,000
• loss=7000
• 初始資金: 1000,000
• initM=1000000
• 風險比例: 2% = 0.02
• risk=0.02
• 設定目前總資金
• capital=initM
• 計算第m天的下單口數
• PZ.FF=floor(capital*risk/loss)
• 初始下單口數:floor(1000000*0.02/7000)
• 如果資金成長到1500,000,下單口數??
2016/09 121
程式碼:8_Fixed_Fraction.R
每次交易最多損失總資金的2%
假設你有100萬,每次交易最多可損失
100萬*2%=20000
則你最多下 (下高斯20000/7000) =2 口
122. • 設定固定分數向量
• PZ.FF=setNames(rep(1,length(profit)),names(profit))
• PZ.FF[1]=floor(capital*risk/loss)
• 計算每一時期的固定分數
• for (m in 2:length(profit)){
PZ.FF[m]=floor(capital*risk/loss)
capital=capital+PZ.FF[m]*profit[m]*200
}
• 程式碼檢查
• head(cbind(profit,PZ.FF,"P&L"=profit*PZ.FF,"Cap"=initM+cumsum(profit*PZ.F
F*200)),1000)
2016/09 122
123. 2016/09
Total Profit: 3054
# of Win: 161
Win Rate: 39.07767 %
Maximum Draw Down: 1273
The Periods of MDD: 112 171 188 204 254
Profit Factor: 1.150466
Total Profit/MDD: 2.399057
Total Profit: 1140
# of Win: 161
Win Rate: 39.07767 %
Maximum Draw Down: 312
The Periods of MDD: 107 112 171 188 254
Profit Factor: 1.192763
Total Profit/MDD: 3.653846 123
125. 固定比例 (Fixed Ratio)
• 瑞恩.瓊斯(交易的遊戲,1999)
• 固定分數的缺點:最初合約的增速很慢,一但累積到一定數額後,
合約的速度會突然增加很快。
• 固定比例
• 試圖平等對待每份合約,使資金的增長速率相同。
• 1. 假設資金X,從一個單位做起,例如1口。
• 2. 固定每份合約的增長量(Delta)
2016/09 125
126. 初始資金100萬,做1口;Delta = 8萬。
•做2口的資金 = 做1口的資金 + 1*Delta = 108萬。
做3口的資金 = 做2口的資金 + 2*Delta = 124萬。
做4口的資金 = 做3口的資金 + 3*Delta = ? 萬。
•做n口的資金 = 做n-1口的資金 + (n-1)*Delta = ?。
2016/09 126
127. 固定比例:做n口的資金 = 做n-1口的資金 + (n-1)*Delta
• = 做n-2口的資金 + (n-2)*Delta + (n-1)*Delta
• = 做n-3口的資金 + (n-3)*Delta + (n-2)*Delta + (n-1)*Delta
...
• = 做2口的資金 + 2*Delta + 3*Delta +... + (n-1)*Delta
• = 做1口的資金 + 1*Delta + 2*Delta + 3*Delta +... + (n-1)*Delta
• = 初始資金+ (n(n-1)/2)*Delta
2016/09 127
152. 完整交易系統架構圖
Application
Order Manager
Market Data
Complex Event Processing
engine
Exchange
1
Storage
Application Server Exchange
Strategy
Settings
UI
State
Mgmt (PnL
+ Position)
Order /
Execution
Monitor
Within
application
TMS
Maths
Calc
OMS
Admin
Monitor
Exchange
2
F
I
X
F
I
X
Data
Normalizer
Order
Router
Back
office
record
MktData
Store
Event
History
Adaptor for
third party
apps – R,
Matlab, etc
Data
Retrieval
Data Vendor
Replay
of stored
data
Simulator
exchange
API
軟
體
6
157. IB Trader Workstation 系統資訊流
Establish
Connection
ibtws
Get Info
accounts
contractdetails
portfolio
Get Data
getdata
timeseries
history
realtime
marketdepth
Create Orders
orderid
createorder
orders
executions
Close
Connection
close
163. R 計量財務套件規劃圖
Cran Task View: Empirical Finance
https://cran.r-project.org/web/views/Finance.html
Big data
High Frequency
High Frequency
Sendrequeststheserver
Downloadandload
Data Mining
quant mod
Raw Data
A web application
Online
Shiny
Price Data
TTR
Techical Trading
Candlestick Chart
Additions of different
lines to the chart
* Moving Average
* Bollinger Bands
* Moving Average
Convergence
Divergence
Demonstration
framework for R
Statistics
* Downside risk
measures
* Risk-adjusted
performance
Plots
* Density plot
* Time series plot
* Drawdown plot
Return Data
Performance Analytics
Performance Analysis
Data Journcy
ExamplesofUsingRinFinanceExtensions
Datacleansing
Datatransformation
Webpages
Files
Database
RCurl
httr
rvest
17
164. R計量分析套件階層分類
應用範圍 R 套件
績效度量表及圖表 PerformanceAnalytics - 投資績效與風險分析
投資組合優化與
計量交易策略
PortfolioAnalytics - 投資組和分析與優化
quantstrat - 規則為基礎的交易系統開發
blotter - 交易系統帳務基礎結構
歷史資料存取與財務圖
表
quantmod - 量化財務模型框架
TTR - 技術分析規則
時間序列物件
xts - 時間序列物件延伸功能
zoo - 時間排序觀察
1
8
171. 測試結果
install.package(“RCurl”)
source_https <- function(url, ...) {
# load package
require(RCurl)
# parse and evaluate each .R script
sapply(c(url, ...), function(u) {
eval(parse(text = getURL(u, followlocation = TRUE, cainfo = system.file("CurlSSL",
"cacert.pem", package = "RCurl"))), envir = .GlobalEnv)
})
}
寫一段直接到git_hub載入程式碼的程式碼:
2
5
176. 策略商品的啟始化
library(quantstrat)
ttz<-Sys.getenv('TZ')
Sys.setenv(TZ='UTC‘)
if (!exists('.blotter')) .blotter <- new.env()
if (!exists('.strategy')) .strategy <- new.env()
suppressWarnings(rm("order_book.macross",pos=.strategy))
suppressWarnings(rm("account.macross","portfolio.macross",pos=.blotter))
suppressWarnings(rm("account.st","portfolio.st","stock.str","stratMACROSS",'start_t','end_t')
stock.str='AAPL'
currency('USD')
stock(stock.str,currency='USD',multiplier=1)
startDate="2000-12-31“
initEq=1000000
3
0
178. 定義指標
stratMACROSS <- add.indicator(
strategy = stratMACROSS, name = "SMA", arguments = list(x=quote(Cl(mktdata)), n=50),label= "ma50" )
stratMACROSS <- add.indicator(
strategy = stratMACROSS, name = "SMA", arguments = list(x=quote(Cl(mktdata)), n=200),label= "ma200")
3
2
179. 定義訊號
stratMACROSS <- add.signal(
strategy = stratMACROSS,
name="sigCrossover",
arguments = list(columns=c("ma50","ma200"), relationship="gte"),
label="ma50.gt.ma200")
stratMACROSS <- add.signal(
strategy = stratMACROSS,
name="sigCrossover",
arguments = list(column=c("ma50","ma200"),relationship="lt"),
label="ma50.lt.ma200")
3
3
180. 訂定交易規則
stratMACROSS <- add.rule(
strategy = stratMACROSS,
name='ruleSignal',
arguments = list(sigcol=“ma50.gt.ma200", sigval=TRUE, orderqty=100, ordertype='market',
orderside='long'),
type='enter')
stratMACROSS <- add.rule(
strategy = stratMACROSS,
name='ruleSignal',
arguments = list(sigcol="ma50.lt.ma200",sigval=TRUE, orderqty='all', ordertype='market',
orderside='long'),
type='exit')
3
4
185. 交易過程訊息
book = getOrderBook('macross')
stats = tradeStats('macross')
ptstats = perTradeStats('macross')
rets = PortfReturns('macross')
txns = getTxns('macross', stock.str)
getOrderbook:交易單所有記錄
tradeStats:所有交易統計資訊
perTradeState:每筆交易統計資訊
PortfReturns:投資報酬
getTxns : 交易明細帳
3
9
192. API程式為何選擇 C# + R?
• 各有特長,也各有缺點
• R 缺乏有效率的Asynchronous Event-Driven機制
• R born to count
• C#先進的物件導向語言特性 與.Net緊密結合網路作業環境
• 券商必定提供之語言類型 : VBA/Java/C/C#
• C# 逐漸變成開放標準(open standard) 開放原始碼(Open Source)
• 爭取時效,縮短開發時間,減化程式複雜度
系統介面與數學演算模型間互相妥協與專業分工
4
6
193. C# - 系統的語言
• C# 先進的物件導向語言特性
• 與.Net緊密結合網路作業環境
• 券商必定提供之語言類型 VBA Java C C#
• C# 逐漸變成開放標準(open standard) 開放原始碼(Open Source)
4
7
194. R 統計的語言
• R 完整的數學與財務分析套件
• 豐富且免費的參考學習資源
• 完全免費
4
8
213. 程式常見的錯誤 - 內部
• 程式語法錯誤
• 邏輯錯誤
• 未預期的例外未處理
• 作業風險 -> 肥手指、邏輯炸彈、漏網之魚
6
7
222. 閃崩(Flash Crash) 案例
2014年10月15日 歐洲股市9:33到9:45 之間,
因為泛歐斯托克銀行指數(EURO STOXX® Banks)
期貨喪失流動性,導致價格急速攀升
(連帶導致利率短期利率驟貶)
五分鐘後,又急速回升到9:33時的價位水準
瞬時湧入的交易量,超過2008雷曼風暴
2011美債降等所引發的崩盤
225. R 安裝 台灣 R Project 映射網站
http://cran.csie.ntu.edu.tw/
下載 R 3.3.1