2017年2月26日 星期日

多策略多商品分散了風險?


程式交易小學堂─期貨投機事業的王道
我們堅持用簡單規則來開發交易訊號的話,幾乎難以避免的:很難取得看起來很漂亮的 Equity curve,即便只存在於回測不理會未來都很困難。於是,我們走向了不管是多策略或是多商品的組合(Portfolio)來產生更加線性的回測績效曲線,原因在於不同的商品或是交易規則,往往能因為各個策略的 Drawdown 發生的時間區間錯開(也許因為規則本身、也許因為商品本身),得到整體組合的 Drawdown 並不是各個策略的直接加總;但在每個交易訊號都被忠實執行的前提下,獲利會被直接加總,因而我們就看到了組合的報酬風險比上升,相對於單一策略。

或許是金融業的廣宣效果,又或許是學校的研究報告?我不知道何時開始,讓資金分散到不同的策略或是商品,被解釋成風險的分散。是因為 Portfolio 的 報酬風險比 遠較單一訊號、單一商品的更佳嗎?只是,過去幾年我也就這麼接受多商品多策略等於風險分散的論點。

直到最近兩年吧?我對把交易分散到多商品、多策略是否就是把風險分散的論點,越來越感到懷疑。

最主要的理由是,在回測中我們的確是能看到因為分散而得到單一投入的風險對資產傷害的百分比下降(這並不是指因為投入的錢從 100% 變成 10%,而使得 Drawdown 就從 50% 變 5% 的意思)。但是在 Outiade sample,我們要怎麼知道當某個策略在 drawdown 時,會有別的策略正在獲利來抵消而降低帳戶的 drawdown?我們能多信賴這樣的...巧合?

一如在開發策略的時候,我們幾乎都需要遵照 Inside / Outside sample 的規則,當我把 Portfolio 的內容定住不動的隨後幾年,或者在開發 Portfolio 就做 Inside / Outside sample 測試,應該都不難發現在 Outside sample 帳戶資產的風險似乎沒有因為交易動作的分散而被分散?如果只是為了降低單一訊號破產風險,降低槓桿可能更為有效。

換言之,在面對真實交易的未來,我們能倚賴多策略、多商品來做為風險分散的功用嗎?想要以交易動作的分散來達到風險分散的效果,會不會只是我們... 幻想?又或者說:我們能否透過怎樣的檢測去證實 ─ 交易動作分散在帳戶資產風險的分散(控制)上起到多大程度的作用:機率?改善程度?

2017年1月28日 星期六

函數(_MonthlyProfit):取得過去第N個月的當月損益


程式交易小學堂─期貨投機事業的王道
這一篇文章根本就是用過去的一篇來做的修改,算是相同邏輯下的不同週期切割而已。

做個函數來取得以月為單位的損益數值。
函數名稱:_MonthlyProfit,參數 為 monthsAgo。參數輸入 0 可取得這個月的損益變化,輸入 1 則是上個月,2 則是上上個月... and so on。

函數(
數值、序列)程式碼如下:
input: monthsAgo(Numeric);
var: equity(0);
array: monthEquity[](0);


equity= i_OpenEquity;
array_setmaxindex(monthEquity, monthsAgo+1);


if month(D)<>month(D)[1] then
begin
  _arrayShift(monthEquity);
  monthEquity[1]= equity[1];
end;


if monthsAgo=0 then
  _monthlyProfit = equity - monthEquity[1]
else
  _monthlyProfit = monthEquity[monthsAgo] - monthEquity[monthsAgo+1];


效果:


2016年8月24日 星期三

日權益記錄檔(Excel)單位權益版下載


程式交易小學堂─期貨投機事業的王道
目前我用來記錄自己帳戶績效的 Excel 檔,是用 單位淨值(就是仿效基金淨值那種)的觀念為記錄的基礎,這是為了方便如果有在帳戶做入出金的需要,也不會影響到績效的評估。並且把每日單位淨值自動畫成走勢圖,就是我每增加一筆資料它就會多畫一筆上去。

如下圖,當我要從帳戶出金的時候,先把出金前的權益總值記錄下來,然後才填入出金的金額(出金用負值,入金用正值)。隔日再填入權益總值就會把出入金的因素去除後,計算單位淨值的變化。單位淨值起始值為 10,會以左上角的 期初權益 為基準點。

2016年8月8日 星期一

交易訊號穿透性


程式交易小學堂─期貨投機事業的王道
要談論穿透性這個題目之前,得先說一下什麼是穿透性。簡單的定義是,當你以某一種 pattern 而去開發出來的交易訊號(通常我們會是為了某一個商品去開發、測試訊號),不做任何修改、不改參數直接套用到別種商品,也能看到回測上的獲利的話,這樣的現象被稱為:穿透。而穿透性是指具有穿透這個現象的程度。

舉例來說,一開始我以某商品為標的,寫了個當價位在 30分線圖表的 30EMA 上時,觸及當天高點買進、價位在 30EMA 下時,觸及當天低點放空,回測顯示能夠獲利。接著我再把這個訊號套用到其他的商品去,看到有任何第二個商品也能夠回測獲利,這就是穿透的表現,而如果能夠看到獲利的商品數越多,就是更強的穿透能力,也就是比較好的穿透性(適應性)。

2016年7月30日 星期六

投資組合回測:相同參數在多商品的最佳化


程式交易小學堂─期貨投機事業的王道
我忘記了過去在哪個論壇(很有可能是 Kway),有人曾經問過如何在投資組合的回測中,做多商品都使用同參數的最佳化?有點饒舌,是嗎?容我先解釋一下這是怎樣的狀況。

因為越來越多人強調、認同,訊號應該要對不同的商品具有穿透性,以同一個訊號(參數一致)套用到多商品去看看是否其他商品(尤其是同類型)也能獲利,用來檢測這個訊號本身的穩健性的良莠如何?而在檢測訊號對參數選擇的依賴程度時,我們也會透過最佳化報表來看看是否有參數績效高原的現象存在?於是... 我們就很直覺的這麼做,讓多個商品直接執行同一個訊號,掛在同一個策略中。它會是這樣的:

2016年4月24日 星期日

進出場的方法也能最佳化


程式交易小學堂─期貨投機事業的王道
承繼自上篇「函數:十進位轉二進位」。
說實在的,這篇文章在我自己的心中就像是在引導讀者走向 Curve over fitting。這個方法,基本上這麼做跟把圖表攤出來,搞 DataMining 也滿接近了 XD

過去,我們會在策略的測試中使用"參數"最佳化,但是不同的交易方法,就寫很多個訊號,一個一個慢慢對個別交易訊號做參數最佳化,不論你的目的是找出在歷史上表現最優秀的參數,還是為了檢查參數對績效的敏感度。現在,我們可以把所有你知道的進出場"方法",做各種可能組合的最佳化。當然,個別方法中的參數也能一併最佳化。

2016年4月22日 星期五

函數:最近第N個交易時段的日線最高價


程式交易小學堂─期貨投機事業的王道
在上一篇文章(http://www.yctseng.net/2016/04/n.html),我們有了正確計算目前 K棒是該交易時段內的第幾根,接著要來引用它做出取代 highD(N) 的函數:抓取最近第N個交易時段的最高價,名稱: _highSession(N),參數:第N個交易時段,回傳值類型:數值。

熱門文章