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

Post on 21-Apr-2017

8.891 Views

Category:

Data & Analytics

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

資料科學系列活動—

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

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

Date: 2016.09.24(六)

2016/09 1

你為何報名這堂課?

•想賺錢?

•想用R寫回測程式?

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

•想用R下單?

• 如果你是工程背景?

• 如果你是數理背景?

• 如果你是金融背景?

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

2016/09 2

先自我介紹一下

• 大家好,我是牧恩!

• 部落格 (Bituzi)

• 筆名:牧清華

• 數學

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

2016/09 3

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

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

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

• 傑西李佛摩

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

2016/09 4

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

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

2016/09 5

加上量放大的條件?

2016/09 6

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

2016/09 7

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

2016/09 8

今天想帶給大家的內容

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

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

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

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

2016/09 9

哪裡下載R語言?

2016/09 10

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

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

安裝quantmod

• install.packages("quantmod")

• library(quantmod)

參考網站:

• http://www.quantmod.com/

2016/09 13

下載資料 getSymbols

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

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

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

2016/09 14

畫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

技術分析指標

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

回測前置作業

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

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

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

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

2016/09 17

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

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

損益績效

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

簡單的績效分析

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

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

2016/09 21

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

最大回檔(maximum drawdown, MDD)

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

• 例如:定存最好!?

•絕對最大回檔(MDD)

•比例最大回檔(MDD%)

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

2016/09 23

獲利因子(profit factor)

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

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

• 賺小賠大無所謂? Why?

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

2016/09 24

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

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

2016/09 25

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

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

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

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

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

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

甚至…..宏 達 電 !><

2016/09 29

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

扣掉交易成本

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

• 證券交易稅:0.3%

• fee=STK[m,4]*0.006

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

2016/09 31

台積電:聖盃靠盃

2016/09 32

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

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

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

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

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

2016/09 33

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

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

2016/09 34

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

贏: 翻倍;輸: 賠光

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

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

輪盤賭場優勢

2016/09 36

一種天真浪漫的賭法~(勝率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

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

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

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

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

2016/09 38

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

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

2016/09 39

(馬丁格爾模擬) 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/

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

2016/09

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

Beginner’s Luck 確認!

模擬10000次

41

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

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

2016/09 42

交易的馬丁格爾

• 產生一個計算每次部位大小的向量• 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

將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

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

2016/09 45

PZ大法:輸縮贏衝

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

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

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

2016/09 46

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

2016/09 47

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

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

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

• PZ大法

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

2016/09 49

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

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

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

2016/09 51

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

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

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

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

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

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

2016/09 52

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

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

2016/09 53

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

2016/09 54

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

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

2016/09 55

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

台指期貨隨機交易統計

• 不停損,停利30點

• 停損145點,停利35點

• 停損140點,停利40點

• …

• 停損35點,停利145點

• 停損30點,不停利

2016/09 56

順勢、動量、違反人性!

2016/09 57

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

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

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

1%停損,不停利

v.s.

1%停利,不停損

2016/09 58

Momentum v.s. Mean Reverse

2016/09 59

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

黃金交叉、死亡交叉

箱型突破、箱型跌破

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

2016/09 60

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

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

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

只有大小波動是真的!!

2016/09 62

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

2016/09 63

20日標準差

2016/09 64

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

2016/09 65

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

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

原策略

}

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

•找出最好的波動門檻?

2016/09 66

拿廢話當濾網…..

2016/09 67

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

世間萬物都是遵循此道!

2016/09 68

2016/09 69

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

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

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

2016/09 70

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

2016/09 71

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

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

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

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

2016/09 72

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

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

2016/09 73

Buy

原始策略(單口當沖)績效與累計損益: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

加碼規則:

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

2016/09 75

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

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

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

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

2016/09 79

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

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

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

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

等比加碼 (1248瘋子!)

2016/09 83

等差加碼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

等比加碼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

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

好的原始策略加碼更好;

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

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

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

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

哪裡一樣? 哪裡不一樣?

何謂賭局? 何謂交易?

2016/09 87

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

•勝率50%,賠率為2

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

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

2016/09 88

賠光

WIN

LOSE

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

但這樣就夠了嗎?

2016/09 89

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

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

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

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

• 用R語言模擬一下~

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

• Output: 資金成長曲線!

2016/09 90

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

2016/09

資金100元

100元

91

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

2016/09

資金100元,如果下注20元

80元

20元

92

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

2016/09

資金100元,如果下注20元

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

20元

20元

20元

93

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

2016/09

資金100元,如果下注20元

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

20元

20元

140元

20元

94

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

2016/09

資金100元,如果下注20元

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

100元

20元

80元

95

賭局設定:

• 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

銅板賭局模擬

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

2016/09 98

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

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

2016/09 99

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

理論、模擬、分析

2016/09 100

定義問題!!

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

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

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

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

2016/09 101

凱利公式推導•勝率為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

求 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

2016/09 104

凱利騙局

•到底是誰騙了誰?

• Kelly

• Thorp

• Larry William

• Ralph Vince

2016/09 105

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

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

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

2016/09

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

106

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

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

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

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

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

2016/09

-1

107

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

•賭局給定機率、賠率

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

2016/09 108

In Sample Out Sample

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

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

2016/09 110

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

沒有連續,只有離散

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

2016/09 111

2016/09 112

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

10次50%

500次24%

40次31%

100次21%

1000次26%

5000次25%

2016/09 113

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

10次52%

500次38%

40次35%

100次46%

1000次36%

5000次38%

三個層級的先知

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

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

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

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

2016/09 114

再來我才要解釋這件事!

下面策略,你選哪一個?

2016/09 115

100萬230萬 100萬1642萬

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

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

2016/09 116

2016/09 117

1% 3% 5% 8%

單口 風險比例

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

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

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

還是只能控制虧損!!

2016/09 118

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

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

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

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

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

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

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

• 勝率: 39.07 %

• 賠率:平均賺/平均賠

• 平均賺: 43.8

• 平均賠: -23.56

• 凱利比例: 11.5 %

2016/09 124

固定比例 (Fixed Ratio)

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

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

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

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

2016/09 125

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

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

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

2016/09 128

凱利公式用於選擇權

2016/09 129

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

買買權Long Call

賣買權Short Call

賭大漲! 賭不會漲!

2013/10/21

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

買賣權Long Put

賣賣權Short Put

賭大跌! 賭不會跌!

2013/10/21

7950

8000

-1750

750

損益

大盤結算位置

大盤結算位置

-1750

損益

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

機率

<7950

機率20%

>8000

機率50%7950~8000

機率30%

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

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

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

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

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

大盤結算位置損益

2013/10/21

機率分佈 f(x)

-1750

750

損益

大盤結算位置損益

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

機率

7950 80007985 大盤結算位置

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

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

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

2013/10/21

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

(Leverage Space Model)

2016/09 134

多策略、多商品、多市場

2016/09 135

多策略、多商品、多市場

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

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

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

2016/09 136

10倍 90倍

報酬再多9倍!

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

2016/09 137

10倍 90倍622倍

報酬再多62倍!

2016/09 138

2016/09 139

小結: LSM告訴我們什麼?

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

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

2016/09 140

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

2016/06 141

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

2016/06 142

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

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

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

2016/06 143

看功夫學交易!

2016/09 144

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

2016/09 145

Thank You!未來有緣再見!

2016/09 146

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

林佳緯

課程綱要

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

2. R計量交易套件介紹

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

交易系統架構

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

交易的手與腦策略開發

策略執行

商品交易資訊

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

事件驅動

決策引擎

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

交易執行規則

執行

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

作業風險管理

歷史資料

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

資料庫

決策引擎

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

校準

回測

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

風險評估

交易執行系統架構

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

5

完整交易系統架構圖

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

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

7

報價API 程式下單API 程式

券商API 資訊流

中斷連線

帳務查詢

建立連線

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

海外期貨

國內期貨

手動委託

委託回報

手動回報

成交回報

台灣券商 API 比較

2014年Julian Lin整理

9

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

10

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

IB API架構圖

12

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

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

13

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

交易系統化的優點

• 情緒影響最小化

• 可反覆回測驗證

• 維持交易紀律

• 一致性結果

• 提升下單速度

• 交易多角化

14

交易系統化的缺點

• 軟硬體失靈故障

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

• 過度優化

15

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

R計量分析套件階層分類

應用範圍 R 套件

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

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

PortfolioAnalytics - 投資組和分析與優化

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

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

表quantmod - 量化財務模型框架

TTR - 技術分析規則

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

zoo - 時間排序觀察

18

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

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

• 問題必須自己找解答

• 免費

• 開放原始碼

• 客製化自由度高

• 多幣別多商品多策略

19

quantstrat 安裝說明

安裝計量套件指令

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

先安裝R 開發工具套件

install.packages("devtools")

22

逐一安裝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

安裝後檢查

24

測試結果

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

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

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

source_https.R

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

26

交易回測step by step

quantstrat 策略回測流程

讀取資料檔

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

產生指標 產生訊號

交易進出場的執行規則

更新交易帳戶資料

回測結果產出

參數優化

28

quantstrat 基本的回測流程

29

幣別、商品、

歷史資料載入起始

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

起始化

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

策略回測

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

產生投資績效報告與圖表

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

策略商品的啟始化

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

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

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

定義指標

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

定義訊號

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

訂定交易規則

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

開始回測

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

交易帳戶資料更新

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

回測結果報表

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

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

37

回測結果報表

38

交易過程訊息

book = getOrderBook('macross')

stats = tradeStats('macross')

ptstats = perTradeStats('macross')

rets = PortfReturns('macross')

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

getOrderbook:交易單所有記錄

tradeStats:所有交易統計資訊

perTradeState:每筆交易統計資訊

PortfReturns:投資報酬

getTxns :交易明細帳

39

交易單資料總表

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

交易績效總覽

textplot(t(stats))

41

策略的累積報酬率

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

42

R下單機設計說明與展示

下單機程式架構

44

Ticks清整模組 動態回測模組

C# 控制介面

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

(交易明細報表)

回測歷史數據

儲存預測結果

儲存歷史數據

取得即時交易Tick

E-mail

即時軟體手機App

(元大API)

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

開發工具 toolchains 與步驟

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

• 下載 R.NET

• 設定券商API與憑證

45

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

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

• R born to count

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

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

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

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

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

46

C# - 系統的語言

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

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

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

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

47

R 統計的語言

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

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

• 完全免費

48

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

49

執行Visual Studio 2013 Express

50

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

51

確認專案參考檔

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

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

52

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

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

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

53

複製API相關檔案

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

54

註冊OCX元件

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

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

55

API測試

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

那恭喜! API就此連通了。

56

下單程式流程

登入帳號

註冊商品代碼

設定進出場條件

執行交易 終止交易

57

完整畫面

58

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

即時報價

所有狀態訊息顯示

R 整合圖表

交易啟動與關閉

1. 登入設定區

59

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

帳號

密碼

2. 設定商品代碼

60

3.設定進出場條件

61

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

4.啟動關閉交易

62

開/關切換

模擬/實單切換

報價畫面

63

R tick點位分佈圖

6464

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

交易執行畫面

65

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

• 交易策略• 市場風險

• 模型風險

• 交易執行• 流動性風險

• 作業風險

66

程式常見的錯誤 - 內部

• 程式語法錯誤

• 邏輯錯誤

• 未預期的例外未處理

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

67

解決辦法

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

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

• Divide & conquer 二分法釐清問題

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

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

68

程式常見的錯誤 –外部

• 網路延遲斷線問題

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

69

解決辦法

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

• ping

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

• 隨時預防部位避險

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

• 固定線路與4G

70

資料處理問題

• Garbage in, garbage out

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

• 即時資料防錯處理

• 回測資料清整與驗證

71

即時系統回報機制

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

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

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

72

部位限制與管理

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

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

73

風險管理案例

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

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

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

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

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

74

風險管理案例

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

• 固定收益債券套利交易

• 作空S&P長期波動率

• 併購套利

75

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

閃崩(Flash Crash) 案例

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

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

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

Q & A

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

• R 主程式軟體

• Rtools34

• RStudio

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

下載 R 3.3.1

base下載主安裝檔

下載Rtools 3.4

安裝R 與Rtools

R 主程式安裝

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

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

程式集裡,確認安裝完成

執行 R 64bit

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

Rtools 安裝

Rtools 安裝

其餘保持預設值

開發工具介紹

• 安裝

• 基本功能介紹

安裝RStudio

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

選擇Windows Vista/7/8/10

安裝RStudio

90

選擇Windows Vista/7/8/10

安裝RStudio

91

確定安裝完成

92

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

大功告成!

Studio 整合開發環境(IDE)

93

工作區域

主控台區

繪圖區域

top related