[dsc 2016] 系列活動:吳牧恩、林佳緯 / 用 r 輕鬆做交易策略分析及自動下單

239
資料科學系列活動— 用 R 輕鬆做交易策略分析自動下單 Speaker: 吳牧恩、林佳緯(Julian) Date: 2016.09.24(六) 2016/09 1

Post on 21-Apr-2017

8.891 views

Category:

Data & Analytics


4 download

TRANSCRIPT

Page 1: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

資料科學系列活動—

用 R 輕鬆做交易策略分析及自動下單

Speaker: 吳牧恩、林佳緯(Julian)

Date: 2016.09.24(六)

2016/09 1

Page 2: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

你為何報名這堂課?

•想賺錢?

•想用R寫回測程式?

•覺得自己是百年難得一見的交易奇才?

•想用R下單?

• 如果你是工程背景?

• 如果你是數理背景?

• 如果你是金融背景?

• 如果你什麼背景都沒有?

2016/09 2

Page 3: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

先自我介紹一下

• 大家好,我是牧恩!

• 部落格 (Bituzi)

• 筆名:牧清華

• 數學

• 資金管理理論模擬策略回測

2016/09 3

https://www.youtube.com/watch?v=i5uCWL0nsFA

Page 4: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

你是百年難得一見的交易奇才嗎!?

•主觀交易• 市場上的眾多老師

• 傑西李佛摩

•計量交易• 西蒙斯(Jame Simons)

2016/09 4

過去:得民心者得天下!!現在:得“計量”者得天下!?

Page 5: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

過去股市名嘴喊盤,現在資料科學說話

2016/09 5

Page 6: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

加上量放大的條件?

2016/09 6

Page 7: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

烏雲罩頂: n天後的機率分佈

2016/09 7

Page 8: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

空頭吞噬: n天後的漲跌分佈

2016/09 8

Page 9: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

今天想帶給大家的內容

• 第一次使用R語言做回測就上手• 下載資料、讀取資料、畫K線、簡單回測

• 如何研發好的交易策略?• 績效:勝率、賠率、MDD、獲利因子• 策略:濾網、動量、加碼

• 交易的聖盃:資金管理的理論與實務• 理論:凱利賭徒、最佳化比例、槓桿空間模型• 實務:固定分數、固定比例、選擇權價差交易實務

• 用R語言串接API下單• Julian

2016/09 9

Page 10: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

哪裡下載R語言?

2016/09 10

Page 11: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

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

Page 12: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

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=?

Page 13: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

安裝quantmod

• install.packages("quantmod")

• library(quantmod)

參考網站:

• http://www.quantmod.com/

2016/09 13

Page 14: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

下載資料 getSymbols

•下載資料(預設Yahoo Finance)• 蘋果: getSymbols("AAPL")• 台積電: STK=get(getSymbols("2330.tw"))

•不同的資料源:• getSymbols('MSFT',src='google')• getSymbols("DEXJPUS",src="FRED")

•資料格式• 使用head、tail• 五個欄位:開高低收、量、還原權值

2016/09 14

Page 15: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

畫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

Page 16: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

技術分析指標

•均線• 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

Page 17: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

回測前置作業

• STK.week的列名稱• rownames(STK)

•有多少個日期?• length(rownames(STK))

•產生紀錄每筆交易損益的向量• numeric(length(rownames(STK)))

•產生紀錄每筆交易損益的向量,並附上日期• profit=setNames(numeric(length(rownames(STK))), rownames(STK))

2016/09 17

Page 18: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

台積電: 週一開盤買,週五收盤賣

•每周損益:周收盤價-周開盤價• 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

Page 19: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

損益績效

• 損益向量• 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

Page 20: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

簡單的績效分析

•贏的次數• 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

Page 21: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

如何研發好的交易策略?最大回檔、獲利因子、動量策略、加碼

2016/09 21

Page 22: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

台積電: 週一開盤買,週五收盤賣!績效模組: 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

Page 23: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

最大回檔(maximum drawdown, MDD)

•回檔(DD)• 最好不要有回檔(虧損、風險)

• 例如:定存最好!?

•絕對最大回檔(MDD)

•比例最大回檔(MDD%)

•穩定度的表現:• 總獲利/MDD

2016/09 23

Page 24: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

獲利因子(profit factor)

•賺的和 / |賠的和|• sum(profit[profit>=0])/sum(profit[profit<0])

•意義:每輸1單位,必可再換來?單位的獲利• 勝率很低無所謂? Why?

• 賺小賠大無所謂? Why?

• 交易次數很少無所謂? Why?

2016/09 24

Page 25: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

台積電這幾年都在多頭,每週開盤買當然賺!

考慮多空: 開低買,開高賣

2016/09 25

Page 26: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

週一開低買,開高賣,週五收盤前出

•第一週是否可以交易?• 先紀錄第一週收盤• 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

Page 27: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

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

Page 28: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

練習:開低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

Page 29: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

當然你也可以試試其他股票

中鋼、中華電、鴻海、統一、國泰金、

甚至…..宏 達 電 !><

2016/09 29

Page 30: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

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

Page 31: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

扣掉交易成本

• 股票手續費• 成交金額*0.1425% ,• 買賣各一次• 小數點以下無條件捨去,不足20元以20元計

• 證券交易稅:0.3%

• fee=STK[m,4]*0.006

• 期貨滑價+手續費扣5點• 傳統回測:2+2+1?• 經驗平均滑價約1.5點

2016/09 31

Page 32: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

台積電:聖盃靠盃

2016/09 32

Page 33: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

尋找0050成份股哪隻股票最會獲利?

•你可以考慮下面規則?• 1.周K架構 or 月K架構哪個好?• 2. 開高(?%)賣,開低(?%)買• 3. 開低(?%)買,開高(?%)賣• 4. 是否可做到停損 &停利?

• 停損不停利• 停利不停損

•請扣掉手續費:fee=STK[m,4]*0.006

•試找出2007年至今,誰的 “profit”最高?或是誰的PF最大?

2016/09 33

Page 34: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

沒轍了嗎?開始發揮人類愛賭的天性!!

凹~ 再凹~~~ 無止境的凹!!!

2016/09 34

Page 35: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

馬丁格爾的聖盃!? (以輪盤為例~)

贏: 翻倍;輸: 賠光

勝率18/37,賠率為1 (1:1)

2016/09 35https://www.youtube.com/watch?v=RldNUWT2pyY

Page 36: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

輪盤賭場優勢

2016/09 36

Page 37: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

一種天真浪漫的賭法~(勝率18/37,賠率1)

• Martingale: 贏了下注1單位,輸了就加倍。

• 只要贏一次,就能賺一個單位。

• 輸衝贏縮,賺小賠大。

連輸次數

第一次

第二次

第三次

第四次

第五次

第六次

第七次

第八次

第九次

第十次

第十一次

投注 1 2 4 8 16 32 64 128 256 512 ???

已輸金額

-1 -3 -7 -15 -31 -63 -127 -255 -511 -1023

2016/09 37

Page 38: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

記得當時…PM 06:00進賭場,AM 11:00出賭場

10枚籌碼進去,50枚籌碼出來!

假設每3~4分鐘可玩1局,

1小時約玩16局,5小時大約玩80局

2016/09 38

Page 39: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

Beginner’s Luck!?我們就用R語言來模擬…

10枚籌碼,最多玩80次,超過50枚的機率?

2016/09 39

Page 40: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

(馬丁格爾模擬) 100枚籌碼,最多玩1000次

2016/09 40http://www.letyourmoneygrow.com/2016/09/04/mystery-and-misery-of-the-martingale-betting-system-why-it-will-not-make-you-rich/

Page 41: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

10枚籌碼,最多玩80次,最後超過50枚的機率!

2016/09

輸錢離場的機率為81.106%賺超過50枚的機率為5.322%

Beginner’s Luck 確認!

模擬10000次

41

Page 42: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

現在,我們開始 ”玩” 策略…

馬丁格爾: 贏了交易一張,輸了加倍交易

2016/09 42

Page 43: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

交易的馬丁格爾

• 產生一個計算每次部位大小的向量• PZ=setNames(rep(1,length(profit)),names(profit))

• 如果上次輸,下次加倍買• if (sign(profit)[m-1]<0){PZ[m]=2*PZ[m-1]}

• 如果上次贏,下次買一張• If (sign(profit)[m-1]<0){PZ[m]=1}

• 計算每一次的PZ• for (m in 2:length(profit)){

if (sign(profit)[m-1]<0){PZ[m]=2*PZ[m-1]} if (sign(profit)[m-1]>0){PZ[m]=1} If (sign(profit)[m-1]==0){PZ[m]=PZ[m-1]}

}

2016/09 43

Page 44: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

將PZ前與PZ後畫在一起比較

• source(“performance.R”)

• par(mfrow=c(1,3)) ##三張圖畫同一個畫面

• performance(profit) ##PZ前

• performance(profit*PZ) ##PZ後

• ProfitBar(PZ) ##PZ大小

• max(PZ) ##最大使用部位

• mean(PZ) ##平均使用部位

2016/09 44

Page 45: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

馬丁格爾:輸了加倍買,贏了買1張

2016/09 45

Page 46: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

PZ大法:輸縮贏衝

•練習:類馬丁格爾 (1234…)

•練習:贏了交易一張,輸了交易兩張

•或是找出你認為最好的輸贏PZ?• 輸輸贏、輸輸輸贏、贏?

2016/09 46

Page 47: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

類馬丁格爾(1234):輸了多交易1張,贏了只交易1張

2016/09 47

Page 48: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

為了控制風險: 輸了交易2張,贏了交易1張

2016/09 48輸了“多”買1張

Page 49: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

濾網:輸了才交易1張,贏了就休息

• PZ大法

•練習:連輸兩次再交易是否更好?

2016/09 49

Page 50: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

濾網:去蕪存菁,拆解成…

輸了買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張

Page 51: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

輸贏濾網好不好? 會不會是OverFitting?

2016/09 51

Page 52: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

動量策略 v.s.均值回歸• 動量策略 (順勢交易,買高賣低,違反人性):

• 因為過去漲,所以現在買進;因為過去跌,所以賣出

• 均值回歸 (逆勢交易,買低賣高,大家都愛):• 漲多了該回跌,跌深了該反彈

• 牛頓第二運動定律:動者恆動,靜者恆靜?• 股價漲未來是否會繼續漲?股價跌未來是否會繼續跌?

• 進場、加碼、停損、停利屬於哪一種?

• 在交易裡,大部分違反人性的事,都是好事!• 不正常的人才會獲利!!!

2016/09 52

Page 53: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

我們使用“隨機交易”概念!度量停損停利帶來的影響~

策略:開盤隨機交易,停損?停利?。

2016/09 53

Page 54: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

開盤隨機交易,不停損不停利,收盤平倉

2016/09 54

開盤隨機交易,停損30, 停利30,收盤平倉

Page 55: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

隨機交易,停損30 ,停利60,收盤平倉

2016/09 55

隨機交易,停損30,不停利,收盤平倉

Page 56: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

台指期貨隨機交易統計

• 不停損,停利30點

• 停損145點,停利35點

• 停損140點,停利40點

• …

• 停損35點,停利145點

• 停損30點,不停利

2016/09 56

順勢、動量、違反人性!

Page 57: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

2016/09 57

隨機交易,停損30,不停利,收盤平倉

隨機交易,不停損,停利30,收盤平倉

Page 58: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

隨機交易,其他股票如何?

1%停損,不停利

v.s.

1%停利,不停損

2016/09 58

Page 59: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

Momentum v.s. Mean Reverse

2016/09 59

Page 60: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

進場的動量策略突破n日高點、跌破n日低點

黃金交叉、死亡交叉

箱型突破、箱型跌破

均線糾結後多頭排列,空頭排列

2016/09 60

Page 61: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

“突破”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

Page 62: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

策略改進,使用波動濾網:

金融市場,什麼都是假的!

只有大小波動是真的!!

2016/09 62

Page 63: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

最簡單的波動…. 如果這是股價的波動?

2016/09 63

Page 64: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

20日標準差

2016/09 64

Page 65: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

日波動:每日開盤與收盤的漲跌幅

2016/09 65

Page 66: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

將目前的策略,增加波動濾網

•採用10日標準差當波動,門檻值0.7• if (sd(Cl(STK)[(m-10):(m-1)])<0.7){

原策略

}

•波動小策略品質好?還是波動大策略品質好?

•找出最好的波動門檻?

2016/09 66

Page 67: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

拿廢話當濾網…..

2016/09 67

Page 68: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

天下之大: 合久必分,分久必合金融市場: 波大必小,波小必大

世間萬物都是遵循此道!

2016/09 68

Page 69: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

2016/09 69

順勢策略:波動大小決定策略品質好壞?

波動<100 波動介在100~150 波動>150

Page 70: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

亂入策略波小當濾網輸了才交易

2016/09 70

Page 71: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

加碼的奧義成也加碼,敗也加碼!!

2016/09 71

Page 72: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

加碼的奧義: 成也加碼,敗也加碼!!

•摩天大樓 (1,1,1,1….)• 海龜

•金字塔 (5,4,3,2,1)• 正常人

•倒金字塔(1,2,3,4,5)• 瘋子

2016/09 72

投票表決一下你覺得哪個加碼法好?

Page 73: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

考慮台指期動量策略: 開盤+門檻值突破(用了濾網,採用順勢)

2016/09 73

Buy

Page 74: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

原始策略(單口當沖)績效與累計損益:X

2016/09

損益: 1670

總交易天數: 1375

實際交易次數: 199

平均每次損益: 8.434343

獲利次數: 80

勝率: 40.40404 %

平均賺: 56.175

平均賠: -23.9322

最大連續虧損: 250

最大連續虧損區間(天): 108

114 197 254 302

獲利因子: 1.59136

總獲利/MDD: 6.6874

Page 75: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

加碼規則:

進場後5分鐘後仍有獲利,加碼 1 口!

2016/09 75

Page 76: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

加碼第一口後: 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

Page 77: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

加碼第二口後: 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

Page 78: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

加碼第三口後: 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

Page 79: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

一口一口加碼,你就滿足嗎?策略拆解: 分別”獨立”看每次的加碼!

2016/09 79

Page 80: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

第一次加碼: 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

Page 81: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

第二次加碼 :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

Page 82: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

第三次加碼: 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

Page 83: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

觀察:越加碼品質越好!等差加碼 (1234神經病!)

等比加碼 (1248瘋子!)

2016/09 83

Page 84: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

等差加碼1234

2016/09

損益: 9255

總交易天數: 1375

實際交易次數: 199

平均每次損益: 46.50754

獲利次數: 72

勝率: 36.1809 %

平均賺: 229.7083

平均賠: -57.35433

最大連續虧損: 858

最大連續虧損區間(天): 93 94 98 114 257

獲利因子: 2.270593

總獲利/MDD: 10.78671

84

Page 85: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

等比加碼1248

2016/09

損益: 12420

總交易天數: 1375

實際交易次數: 199

平均每次損益: 62.41206

獲利次數: 72

勝率: 36.1809 %

平均賺: 289.1389

平均賠: -66.12598

最大連續虧損: 1079

最大連續虧損區間(天): 93 94 114 157 257

獲利因子: 2.478924

總獲利/MDD: 11.51066

85

Page 86: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

結論:加碼是放大器,同時放大”風險”與”利潤”

好的原始策略加碼更好;

壞的原始策略加碼就完蛋!!! (overfitting)2016/09 86

Page 87: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

交易的聖盃:資金管理的理論與實務凱利、最佳化比例、槓桿空間模型

固定分數、固定比例、Ranking賭小一點

交易 v.s. 賭局 是否一樣?

哪裡一樣? 哪裡不一樣?

何謂賭局? 何謂交易?

2016/09 87

Page 88: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

給你一枚銅板,人頭輸,數字贏2倍!

•勝率50%,賠率為2

•期望獲利• 50%*(1+2)-1=0.5• 平均來說,每賭1元,可獲利0.5元,50%報酬。

•你有100元,可以玩無限多次,你會怎麼賭?• 如果連這麼好的賭局,你都不會賭,你憑什麼在交易上獲利?• 你可能會有其他說法,交易跟賭局不一樣?• 交易勝率不固定,賠率不固定• 交易次數有限次,賭局無限次

2016/09 88

賠光

WIN

LOSE

Page 89: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

要玩 “期望淨利 > 0”的賭局,這個大家都知道!

但這樣就夠了嗎?

2016/09 89

Page 90: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

做個賭徒模擬實驗就知道….

• 勝率50%,賠率為2• 1. 玩40次下注多少比例f會最好?

• 不同下注比例10%,20%,…,60%

• 2. 玩很多次下注多少比例f會最好?• 玩100次、500次、1000次、5000次

• 用R語言模擬一下~

• Input: 勝率、賠率、下注比例

• Output: 資金成長曲線!

2016/09 90

Page 91: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

考慮 勝率50%,賠率為2 的賭局

2016/09

資金100元

100元

91

Page 92: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

考慮 勝率50%,賠率為2 的賭局

2016/09

資金100元,如果下注20元

80元

20元

92

Page 93: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

考慮 勝率50%,賠率為2 的賭局

2016/09

資金100元,如果下注20元

贏:100*(1+2*20%) 80元

20元

20元

20元

93

Page 94: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

考慮 勝率50%,賠率為2 的賭局

2016/09

資金100元,如果下注20元

贏:100*(1+2*20%) 100元

20元

20元

140元

20元

94

Page 95: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

考慮 勝率50%,賠率為2 的賭局

2016/09

資金100元,如果下注20元

贏:100*(1+2*20%)輸:100*(1-20%)

100元

20元

80元

95

Page 96: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

賭局設定:

• 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

Page 97: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

銅板賭局模擬

• 開始賭!• 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

Page 98: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

2016/09 98

Page 99: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

身為一個賭徒(交易員)“賭” 最佳化!

身為一個數學家“資金管理” 最佳化!

2016/09 99

Page 100: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

凱利賭徒“理論上”的最佳下注比例

理論、模擬、分析

2016/09 100

Page 101: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

定義問題!!

•勝率50%,賠率2的賭局

•初始資金100元,玩無限多次• 假設人生可以天長地久

•每次決定下注比例f (0% < f < 100%)• 假設資金可以無限分割

•問題:f選多少可讓資金成長最快速!

2016/09 101

Page 102: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

凱利公式推導•勝率為50%,賠率為2的賭局

• 賭1元,輸了賠光,贏了拿回3(=1+2)元。

•假設每次下注為f比例• 如果贏: At= At-1(1+2f)

• 如果輸:At= At-1 (1-f)

•假設在T次的賭局中,一共贏了W次,輸了L次 (W+L=T)• 結論:AT= A1(1+bf)W(1-f)L

• 我們想要最大化AT

• 如果玩無限多次會怎樣?

2016/09 102

Page 103: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

求 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

Page 104: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

2016/09 104

Page 105: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

凱利騙局

•到底是誰騙了誰?

• Kelly

• Thorp

• Larry William

• Ralph Vince

2016/09 105

Page 106: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

不同的部位配置(position sizing, PZ),會造成不同的報酬損益!!

不是老師帶你上天堂、住套房,而是

”資金管理” 帶你上天堂、住套房!!

2016/09

一句話談交易:用風險換報酬

106

Page 107: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

•勝率固定(50%),賠率固定(2)的賭局

•不管如何Sample (10個取,20個取,50個取,100個取) 都一樣!!

•我以為的交易是上面這樣…

•實際的交易損益是:不知道機率、不知道賠率!?

博弈理論 v.s. 交易實務

2016/09

-1

107

Page 108: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

交易賭局:機率未知,但可 “預估”….???

•賭局給定機率、賠率

•交易回測給定”歷史損益” (Ralph Vince’s Optimal F)

2016/09 108

In Sample Out Sample

Page 109: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

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

Page 110: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

HPR理論 (玩1次的損益期望值 v.s.下注比例)

2016/09 110

Page 111: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

然而,人生並不像銅板賭局那麼簡單…交 易 也 是!

沒有連續,只有離散

沒有永恆(無限),只有曾經(有限)

2016/09 111

Page 112: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

2016/09 112

一場勝率50%、賠率為2的賭局,賭起來天南地北!

10次50%

500次24%

40次31%

100次21%

1000次26%

5000次25%

Page 113: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

2016/09 113

TWR模擬:從 (16,-8,4) 取樣也天南地北!

10次52%

500次38%

40次35%

100次46%

1000次36%

5000次38%

Page 114: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

三個層級的先知

•第一層 (神):不用知道勝率,因為他知道下一場會贏還是會輸!• 可以梭哈(ShowHands)

•第二層(半仙):知道未來10次,”一定會贏5次,輸5次“• 可以下最佳比例(Optimal f)

•第三層(智者):知道未來10次發生的機率“確實是50%”。(不容易)• 一旦遇到偏差,錯誤的下注比例很有可能讓你受傷慘重。

•賭小一點(1%~2%)

2016/09 114

再來我才要解釋這件事!

Page 115: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

下面策略,你選哪一個?

2016/09 115

100萬230萬 100萬1642萬

Page 116: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

原始策略: 想要Fitting,又怕OverFitting然而,這些都不是最重要的….

交易聖盃: 資金管理!! https://www.youtube.com/watch?v=yVQWJeLUxSk

2016/09 116

Page 117: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

2016/09 117

1% 3% 5% 8%

單口 風險比例

Page 118: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

最常用的資金管理:固定分數(Fixed Fraction)

•凱利賭局的勝率已知,賠率已知控制虧損

•交易的勝率未知,賠率未知?????

還是只能控制虧損!!

2016/09 118

Page 119: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

開盤突破昨日波動(高低)*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

Page 120: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

輸贏濾網:輸了一次再進場!

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

Page 121: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

固定分數 (以台指期貨為例,固定風險比例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 口

Page 122: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

•設定固定分數向量• 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

Page 123: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

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

Page 124: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

再來看一下Kelly是不是真的那麼神?

• 勝率: 39.07 %

• 賠率:平均賺/平均賠

• 平均賺: 43.8

• 平均賠: -23.56

• 凱利比例: 11.5 %

2016/09 124

Page 125: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

固定比例 (Fixed Ratio)

•瑞恩.瓊斯(交易的遊戲,1999)• 固定分數的缺點:最初合約的增速很慢,一但累積到一定數額後,合約的速度會突然增加很快。

•固定比例•試圖平等對待每份合約,使資金的增長速率相同。

• 1. 假設資金X,從一個單位做起,例如1口。

• 2. 固定每份合約的增長量(Delta)

2016/09 125

Page 126: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

初始資金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

Page 127: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

固定比例:做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

Page 128: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

HW: 實做固定比例,並與固定分數比較

2016/09 128

Page 129: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

凱利公式用於選擇權

2016/09 129

Page 130: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

買權買方 v.s. 買權賣方

買買權Long Call

賣買權Short Call

賭大漲! 賭不會漲!

2013/10/21

Page 131: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

賣權買方 v.s. 賣權賣方

買賣權Long Put

賣賣權Short Put

賭大跌! 賭不會跌!

2013/10/21

Page 132: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

7950

8000

-1750

750

損益

大盤結算位置

大盤結算位置

-1750

損益

我認為的大盤結算位置機率

機率

<7950

機率20%

>8000

機率50%7950~8000

機率30%

選擇權的多頭價差 v.s. 個人認為的機率分佈

買7950CALL; 賣8000CALL期望獲利:

−𝟏𝟕𝟓𝟎 × 𝟐𝟎%+ −𝟏𝟕𝟓𝟎+𝟕𝟓𝟎𝟐

× 𝟑𝟎%+ 𝟕𝟓𝟎 × 𝟓𝟎%

= −𝟏𝟐𝟓 < 𝟎 (不要賭!)

大盤結算位置損益

2013/10/21

Page 133: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

機率分佈 f(x)

-1750

750

損益

大盤結算位置損益

我認為的大盤結算位置機率

機率

7950 80007985 大盤結算位置

p*(1+b)-1 > 0 ?

1. 計算市場賠率2. 預測市場分佈!

3. 如何驗證此分佈是否正確?

2013/10/21

Page 134: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

如何操爆你的資金!?槓桿空間模型

(Leverage Space Model)

2016/09 134

多策略、多商品、多市場

Page 135: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

2016/09 135

多策略、多商品、多市場

若下注40次,每次下f比例(理論)A 𝒇 = 𝟏 + 𝟐𝒇 𝟐𝟎 𝟏 − 𝒇 𝟐𝟎

…𝒇 = 𝟐𝟓%剩下的75%資金要幹麻? 玩另一場?

Page 136: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

同時玩2場,每場各壓23%,資金運用達46%!

2016/09 136

10倍 90倍

報酬再多9倍!

Page 137: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

同時玩3場,每場各壓21%,資金運用達63%!

2016/09 137

10倍 90倍622倍

報酬再多62倍!

Page 138: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

2016/09 138

Page 139: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

2016/09 139

Page 140: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

小結: LSM告訴我們什麼?

尋找”最好的”市場、商品、策略!?

分配最適當、有效率的資金運用比例!

2016/09 140

Page 141: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

然而…有時候你只需要一點想像力!!!

2016/06 141

你可以分析全球各個金融市場資料,運用各種高深的數學模型

Page 142: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

2016/06 142

2016年02月22日 (週一)你覺得主力在幹什麼?

我覺得主力閒閒在家沒事做,很無聊,畫 蝙 蝠 俠!

Page 143: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

自從出現蝙蝠俠後,10個交易日裡,有6個交易日都是類似走勢,早盤衝高後又急速拉回!!!

2016/06 143

Page 144: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

看功夫學交易!

2016/09 144

Page 145: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

火雲邪神的啟示:天下武功,無堅不破,唯快不破!

2016/09 145

Page 146: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

Thank You!未來有緣再見!

2016/09 146

Page 147: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

用R語言串接API下單交易執行與API系統架構

林佳緯

Page 148: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

課程綱要

1. 交易執行與API系統架構

2. R計量交易套件介紹

3. R下單機設計說明與展示

Page 149: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

交易系統架構

多算勝,少算不勝,而況無算乎孫子兵法始計篇 第一

Page 150: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

交易的手與腦策略開發

策略執行

商品交易資訊

即時資料源-----------------

事件驅動

決策引擎

計量模型-----------------

交易執行規則

執行

交易單-----------------

作業風險管理

歷史資料

跨日/日內資料-----------------

資料庫

決策引擎

研究方法/演算法-----------------

校準

回測

損益模擬-----------------

風險評估

Page 151: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

交易執行系統架構

交易系統的基本要求:1. 即時 (延遲低於微秒)2. 零誤差 (小於 6 Sigma)3. 同時處理大量資料4. 高可用性與熱機備援

5

Page 152: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

完整交易系統架構圖

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

AP

I

軟體

6

Page 153: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

台灣券商 API - 元大期貨為例

7

報價API 程式下單API 程式

Page 154: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

券商API 資訊流

中斷連線

帳務查詢

建立連線

商品註冊 行情資料 取銷註冊

海外期貨

國內期貨

手動委託

委託回報

手動回報

成交回報

Page 155: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

台灣券商 API 比較

2014年Julian Lin整理

9

Page 156: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

海外券商 API –盈透(Interactive Brokers)為例

10

Page 157: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

IB Trader Workstation 系統資訊流

EstablishConnection

ibtws

Get Info

accounts

contractdetails

portfolio

Get Data

getdata

timeseries

history

realtime

marketdepth

Create Orders

orderid

createorder

orders

executions

CloseConnection

close

Page 158: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

IB API架構圖

12

資料來源: http://www.bearcave.com/software/market_trading/resources_and_notes/Architecture%20of%20an%20Interactive%20Brokers%20Based%20Trading%20System.html

Page 159: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

IB API 透過程式進行自動交易

13

資料來源: http://holowczak.com/ib-api-java-realtime/3/

Page 160: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

交易系統化的優點

• 情緒影響最小化

• 可反覆回測驗證

• 維持交易紀律

• 一致性結果

• 提升下單速度

• 交易多角化

14

Page 161: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

交易系統化的缺點

• 軟硬體失靈故障

• 必須持續性監看,預防技術性異常的處理

• 過度優化

15

Page 162: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

R計量交易套件介紹

Page 163: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

R 計量財務套件規劃圖

Cran Task View: Empirical Finance

https://cran.r-project.org/web/views/Finance.html

Big data

High Frequency

High Frequency

Sen

d r

equ

ests

th

e se

rver

Do

wn

load

and

load

Data Mining

quant mod

Raw Data

A web application

Online

Shiny

Price Data

TTR

Techical Trading

Candlestick Chart

Additions of differentlines to the chart* Moving Average* Bollinger Bands* Moving Average

ConvergenceDivergence

Demonstration

framework for R

Statistics

* Downside riskmeasures

* Risk-adjustedperformance

Plots

* Density plot* Time series plot* Drawdown plot

Return Data

Performance Analytics

Performance Analysis

Data Journcy

Examp

les o

f Usin

g R in

Finan

ceExten

sion

s

Data cle

ansin

g

Data tran

sform

ation

Webpages

Files

Database

RCurlhttrrvest

17

Page 164: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

R計量分析套件階層分類

應用範圍 R 套件

績效度量表及圖表 PerformanceAnalytics - 投資績效與風險分析

投資組合優化與計量交易策略

PortfolioAnalytics - 投資組和分析與優化

quantstrat - 規則為基礎的交易系統開發

blotter - 交易系統帳務基礎結構歷史資料存取與財務圖

表quantmod - 量化財務模型框架

TTR - 技術分析規則

時間序列物件xts - 時間序列物件延伸功能

zoo - 時間排序觀察

18

Page 165: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

R 回測套件的優缺點• 仍在持續開發中,難免有些小瑕疵

• 回測速度慢 (相較 Python, C, MATLAB)

• 問題必須自己找解答

• 免費

• 開放原始碼

• 客製化自由度高

• 多幣別多商品多策略

19

Page 166: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

quantstrat 安裝說明

Page 167: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

安裝計量套件指令

install.packages("devtools")require(devtools)

install.packages("FinancialInstrument", repos="http://R-Forge.R-project.org")

install.packages("blotter", repos="http://R-Forge.R-project.org", type=“source”)

install.packages("quantstrat", repos="http://R-Forge.R-project.org", type=“source”)

install.packages("PortfolioAnalytics")

21

Page 168: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

先安裝R 開發工具套件

install.packages("devtools")

22

Page 169: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

逐一安裝quantstrat相關套件install.packages("FinancialInstrument", repos="http://R-Forge.R-project.org")

install.packages("blotter", repos="http://R-Forge.R-project.org", type=“source”)

install.packages("quantstrat", repos="http://R-Forge.R-project.org", type=“source”)

install.packages("PortfolioAnalytics")

23

Page 170: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

安裝後檢查

24

Page 171: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

測試結果

install.package(“RCurl”)

source_https <- function(url, ...) {# load packagerequire(RCurl)

# parse and evaluate each .R scriptsapply(c(url, ...), function(u) {eval(parse(text = getURL(u, followlocation = TRUE, cainfo = system.file("CurlSSL",

"cacert.pem", package = "RCurl"))), envir = .GlobalEnv)})

}

寫一段直接到git_hub載入程式碼的程式碼:

25

Page 172: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

直接載入github內quanstrat的範例程式碼

bbands.R為quantstrat 在 Github 上的一個布林通道策略範例

source_https.R

source_https("https://raw.githubusercontent.com/R-Finance/quantstrat/master/demo/bbands.R")

26

Page 173: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

交易回測step by step

Page 174: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

quantstrat 策略回測流程

讀取資料檔

設定啟始的參數與變數因子

產生指標 產生訊號

交易進出場的執行規則

更新交易帳戶資料

回測結果產出

參數優化

28

Page 175: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

quantstrat 基本的回測流程

29

幣別、商品、

歷史資料載入起始

投資組合、帳戶、交易單、交易策略

起始化

加入交易指標、交易訊號、交易規則

策略回測

更新投資組合、帳戶、權益資料

產生投資績效報告與圖表

起始化動作 策略定義 回測處理 帳務更新 報表產生

Page 176: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

策略商品的啟始化

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

30

Page 177: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

策略的帳戶、下單、投資組合啟始化

portfolio.st='macross' account.st='macross‘initPortf(portfolio.st,symbols=stock.str

initAcct(account.st,portfolios=portfolio.st, initEq=initEq) initOrders(portfolio=portfolio.st)

stratMACROSS <- strategy(portfolio.st)

31

Page 178: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

定義指標

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")

32

Page 179: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

定義訊號

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")

33

Page 180: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

訂定交易規則

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')

34

Page 181: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

開始回測

start_t<-Sys.time()out<-applyStrategy(strategy=stratMACROSS , portfolios=portfolio.st) [1] "2002-01-07 00:00:00 AAPL 100 @ 1.50565" [1] "2003-05-16 00:00:00 AAPL 100 @ 1.23608" [1] "2006-09-26 00:00:00 AAPL 100 @ 10.205548" [1] "2008-05-19 00:00:00 AAPL 100 @ 24.143005" [1] "2009-05-14 00:00:00 AAPL 100 @ 16.16766" [1] "2013-09-11 00:00:00 AAPL 100 @ 63.238555"

end_t<-Sys.time()

print(end_t-start_t) Time difference of 0.234004 secs

35

Page 182: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

交易帳戶資料更新

start_t<-Sys.time()

updatePortf(Portfolio='macross',Dates=paste('::',as.Date(Sys.time()),sep='')) [1] "macross“end_t<-Sys.time()

print("更新交易帳")[1] "更新交易帳“

print(end_t-start_t)Time difference of 0.07900095 secs

36

Page 183: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

回測結果報表

chart.Posn(Portfolio='macross',Symbol=stock.str)

add_SMA(n=50 , on=1,col='blue')add_SMA(n=200, on=1)

37

Page 184: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

回測結果報表

38

Page 185: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

交易過程訊息

book = getOrderBook('macross')

stats = tradeStats('macross')

ptstats = perTradeStats('macross')

rets = PortfReturns('macross')

txns = getTxns('macross', stock.str)

getOrderbook:交易單所有記錄

tradeStats:所有交易統計資訊

perTradeState:每筆交易統計資訊

PortfReturns:投資報酬

getTxns :交易明細帳

39

Page 186: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

交易單資料總表

names(book)[1] "macross“

names(book$macross)[1] "AAPL”

names(book$macross$AAPL)[1] "Order.Qty" "Order.Price" "Order.Type" [4] "Order.Side" "Order.Threshold" "Order.Status" [7] "Order.StatusTime" "Prefer" "Order.Set" [10] "Txn.Fees" "Rule" "Time.In.Force"

textplot(book$macross$AAPL[, 1:5])

40

Page 187: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

交易績效總覽

textplot(t(stats))

41

Page 188: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

策略的累積報酬率

chart.CumReturns(rets, legend.loc = "topleft", main="累積報酬率", minor.ticks=FALSE)

42

Page 189: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

R下單機設計說明與展示

Page 190: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

下單機程式架構

44

Ticks清整模組 動態回測模組

C# 控制介面

預測模組預測當天收盤點位 雲端資料庫

(交易明細報表)

回測歷史數據

儲存預測結果

儲存歷史數據

取得即時交易Tick

E-mail

即時軟體手機App

(元大API)

email 參考自: http://www.slideshare.net/newmanchurch/r-56476014

Page 191: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

開發工具 toolchains 與步驟

• 開發工具下載與安裝• 下載Visual Studio 2013 Express

• 下載 R.NET

• 設定券商API與憑證

45

Page 192: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

API程式為何選擇 C# + R?

• 各有特長,也各有缺點• R 缺乏有效率的Asynchronous Event-Driven機制

• R born to count

• C#先進的物件導向語言特性與.Net緊密結合網路作業環境

• 券商必定提供之語言類型 : VBA/Java/C/C#

• C# 逐漸變成開放標準(open standard) 開放原始碼(Open Source)

• 爭取時效,縮短開發時間,減化程式複雜度

系統介面與數學演算模型間互相妥協與專業分工

46

Page 193: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

C# - 系統的語言

• C# 先進的物件導向語言特性

• 與.Net緊密結合網路作業環境

• 券商必定提供之語言類型 VBA Java C C#

• C# 逐漸變成開放標準(open standard) 開放原始碼(Open Source)

47

Page 194: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

R 統計的語言

• R 完整的數學與財務分析套件

• 豐富且免費的參考學習資源

• 完全免費

48

Page 195: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

Visual studio express 2013下載https://www.microsoft.com/zh-tw/download/details.aspx?id=44914

49

Page 196: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

執行Visual Studio 2013 Express

50

Page 197: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

關鍵字R.NET搜尋 Nuget元件庫左邊線上選擇netget.org,右上角搜尋框內打入 “R.NET”

51

Page 198: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

確認專案參考檔

如圖安裝R.NET C#套件,結果應如右圖所示

參考套件裡,多了三個套件RDotNet, RDOtNet.NativeLibrary, DynamicInterop

52

Page 199: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

API檔下載 http://easywin.yuantafutures.com.tw/api/download.html

元大行情API,請選擇:國內行情API元件及說明文件國內行情API C# 範例

元大交易API,請選擇:交易API元件及說明文件交易API C# 範例

53

Page 200: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

複製API相關檔案

分別把交易API元件與行情API元件解開底下所有檔案到特定目錄

54

Page 201: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

註冊OCX元件

命令式窗下切換到API 元件放置目錄cd c:\API

執行註冊報價元件與下單元件

55

Page 202: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

API測試

如果看到連線成功商品代號為 TXFJ6, 也註冊成功

那恭喜! API就此連通了。

56

Page 203: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

下單程式流程

登入帳號

註冊商品代碼

設定進出場條件

執行交易 終止交易

57

Page 204: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

完整畫面

58

登入設定區 設定商品區 進出場條件區

即時報價

所有狀態訊息顯示

R 整合圖表

交易啟動與關閉

Page 205: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

1. 登入設定區

59

要先設定好R 安裝目錄位置

帳號

密碼

Page 206: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

2. 設定商品代碼

60

Page 207: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

3.設定進出場條件

61

以時間進場或選擇以價位進場

Page 208: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

4.啟動關閉交易

62

開/關切換

模擬/實單切換

Page 209: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

報價畫面

63

Page 210: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

R tick點位分佈圖

6464

C# tick價位資料傳送給RR plot 點位分佈圖貼在C#上

Page 211: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

交易執行畫面

65

Page 212: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

計量與程式交易面臨的風險

• 交易策略• 市場風險

• 模型風險

• 交易執行• 流動性風險

• 作業風險

66

Page 213: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

程式常見的錯誤 - 內部

• 程式語法錯誤

• 邏輯錯誤

• 未預期的例外未處理

• 作業風險 -> 肥手指、邏輯炸彈、漏網之魚

67

Page 214: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

解決辦法

• 耐心的除錯與練習• 一個完整交易系統必經過程

• 嚴謹程式開發流程• 先驗證測試觀察上線後監控

• Divide & conquer 二分法釐清問題

• 善用除錯工具• 網路除錯

• 券商API 元大除錯工具範例程式

68

Page 215: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

程式常見的錯誤 –外部

• 網路延遲斷線問題

• 券商伺服器本身穩定性問題

69

Page 216: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

解決辦法

• 網路封包測速工具指令• traceroute

• ping

• 多券商備援• 觀察報價與下單回應時間差異

• 隨時預防部位避險

• 雙網路備援• 不同ISP之寬頻連網

• 固定線路與4G

70

Page 217: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

資料處理問題

• Garbage in, garbage out

• 不乾淨資料就導致從源頭就錯誤

• 即時資料防錯處理

• 回測資料清整與驗證

71

Page 218: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

即時系統回報機制

• 狀態回報是能否自動交易的關鍵。

• 好的系統不在於多聰明,在於少犯錯

• 系統大小事都要存log, 做重點性回報

72

Page 219: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

部位限制與管理

• 部位保證金限制• 限制帳戶不放策略設定部位之最大資金之1.5倍

• 證券帳戶在自動交易上,要非常小心!

73

Page 220: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

風險管理案例

• 騎士資本的教訓• 曾經是美國股票交易市場最大造市與高頻交易商,一度佔NYSE

17.3%與NASDAQ 16.9% 的市場交易量

• 2012年8月,因內部流程疏忽,沒有經過嚴格測試的造市程式直接上線進行交易

• 軟體臭蟲導致30分鐘內損失4.4億美金,兩天內自動交易接近150檔不同的各式股票,隔日公司市值因此損失75%

• 2012年12月,同意競爭對手Getco, Virtu Financial收購

74

Page 221: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

風險管理案例

• LTCM的教訓• 匯集所有世界級數學與金融財務的精英團隊

• 固定收益債券套利交易

• 作空S&P長期波動率

• 併購套利

75

低利差高槓桿,累積缺乏流動性商品,導致在金融風暴下虧損一發不可收拾

Page 222: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

閃崩(Flash Crash) 案例

2014年10月15日歐洲股市9:33到9:45 之間,因為泛歐斯托克銀行指數(EURO STOXX® Banks)期貨喪失流動性,導致價格急速攀升(連帶導致利率短期利率驟貶)

五分鐘後,又急速回升到9:33時的價位水準

瞬時湧入的交易量,超過2008雷曼風暴2011美債降等所引發的崩盤

Page 223: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

Q & A

Page 224: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

附註: R 相關工具安裝說明

• R 主程式軟體

• Rtools34

• RStudio

Page 225: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

R 安裝 台灣 R Project 映射網站http://cran.csie.ntu.edu.tw/

下載 R 3.3.1

Page 226: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

base下載主安裝檔

Page 227: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

下載Rtools 3.4

Page 228: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

安裝R 與Rtools

Page 229: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

R 主程式安裝

記得32bit 與 64bit都要安裝!

Page 230: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

R 主程式安裝其他都用預設設定

程式集裡,確認安裝完成

Page 231: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

執行 R 64bit

看到主控台畫面,那就完成了!

Page 232: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

Rtools 安裝

Page 233: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

Rtools 安裝

其餘保持預設值

Page 234: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

開發工具介紹

• 安裝

• 基本功能介紹

Page 235: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

安裝RStudio

https://www.rstudio.com/products/RStudio/

選擇Windows Vista/7/8/10

Page 236: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

安裝RStudio

90

選擇Windows Vista/7/8/10

Page 237: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

安裝RStudio

91

Page 238: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

確定安裝完成

92

執行安裝後,可看到程式集上多了RStudio程式

大功告成!

Page 239: [DSC 2016] 系列活動:吳牧恩、林佳緯 / 用 R 輕鬆做交易策略分析及自動下單

Studio 整合開發環境(IDE)

93

工作區域

主控台區

繪圖區域