2013年10月2日 星期三

★四種必學的部位縮放程式邏輯(含程式碼)

     常見的策略模型多半以單口為基礎,當策略完成開發之後,專業的程式交易員最後會把資金的配置及部位的縮放的邏輯也寫進策略目的只有一個就是希望策略表現很優秀的時候,可以依照一定的邏輯自動縮放部位,文章最後我會提供我自己常用的四種資金控管及部位縮方程式碼及一個WhiteSugar範例策略,供進階的讀者下載使用。



     上面這個是某個程式策略的歷史回測資料,在中間紅色的虛線左邊,採用單口策略的執行,紅線的右邊則是將程式語法啟動部位縮放的邏輯,我要的表達的東西很簡單,就是當我賺到一定程度後,在固定的MDD%之下,我要策略依照邏輯自動幫我加碼,一方面可以省去我資金控管的時間,另一方面又能有效擴大績效。單口策略是用等差累計的方式進行績效累積,獲利曲線呈緩慢的線性成長(圖中左邊);而增加部位縮放邏輯之後,獲利曲線則會呈現指數成長(如圖中右邊)。

     下圖為加入部位縮放語法後的當沖範例策略,當連續幾次獲利達到策略中的邏輯,彈性增加部位。




     這種部位縮放(Position Sizing或稱PZ)邏輯屬於資金控管策略的一種,一般比較專業的程式交易人員都會在此有所著墨,我所見過的部位縮放邏輯大概有數十種,其中我篩選出四種我認為比較有價值的,建議讀者無論如何至少學會這四種部位縮放邏輯,可以把程式碼加入自己的策略,練習寫看看,相信可以幫你把對程式交易的知識再提升一個層次。

     為了要讓讀者更進一步深入了解,我提供一個當沖範例策略(WhiteSugar)作為練習使用,這是一個開盤價區間突破的策略,區間大小的決定方式為參考網路上大陸白糖期貨策略的語法,只是我測試的不是白糖而是台指期的歷史資料而已。首先我們先測試這個策略最原始的版本(進出都是1),不設交易成本,測試數據為台指期30分鐘K線,回測摘要如下:

  • 策略名稱/商品:WhiteSugar @ 台指期30分鐘K線 (示範策略未設手續費)
  • 淨利(Net Profit):  4,948,200
  • 獲利因子(Profit Factor):1.67
  • 歷史最大平倉虧損(c-c Max Drawdown): 99,400 (-16.86%)  →記住這個百分比
  • 最大持倉口數:1
  • 起始成本設定:100,000


(1) 固定收益部位縮放法(Fixed Profit position sizing)

完整邏輯: 每當賺取到一個定額利潤後,則增加1口。首先我們將上面的當沖範例策略加進固定收益部位縮放法來看看結果,不設交易成本,測試數據為台指期30分鐘K線,參數一樣不變,最大口數上限設定為20,開始執行部位縮放法統一時間為2009/1/5,每獲利取得10(一個原始保證金,就加入1)

參數設定: 
  下圖為此次測試式示範設定,讀者可自己下載程式碼並修改內容或測試於自己的策略中。

測試摘要:
  • 策略名稱/商品:WhiteSugar + 固定收益部位縮放法 @ 台指期30分鐘K線 
  • 淨利(Net Profit):  11,180,000
  • 獲利因子(Profit Factor):1.32
  • 歷史最大平倉虧損(c-c Max Drawdown): ,1,452,000 (-16.86%) 
  • 最大持倉口數:20
  • 起始成本設定:100,000

(2) 固定總資金風險部位縮放法(Fixed risk% position sizing)

完整邏輯:  接著我們再將原始範例策略加進另一種部位縮放語法「固定總資金風險部位縮放法」來看看結果如何,這種方式的邏輯就是限定總資金的風險,在固定每日資金風險的情況下進行加減碼。

參數設定: 
  我們一樣不設交易成本,測試數據為台指期30分鐘K線,參數同樣,最大口數上限設定為20,開始執行部位縮放法統一時間為2009/1/5,設定每日單口最大風險為6000元,期初投入資金為500,000(假設2009/1/5才投入此資金做第1),每日最大的風險不可以超過總資金之2%,舉例來說,假設目前的獲利加上成本已經到達200萬,當日最大的資金風險設定為不得超過200 × 2% = 4萬元,因為每口有設固定停損點6000元,要控制總風險小於4萬元意思就是當本金達200萬時,最高只能做6下圖為此次測試式示範設定,讀者可自己下載程式碼並修改內容或測試於自己的策略中,這個策略最大的好處就是限定單日最大的風險值。

測試摘要:
  • 策略名稱/商品:WhiteSugar + 固定總資金風險部位縮放法 @ 台指期30分鐘K線 
  • 淨利(Net Profit):  8,723,800
  • 獲利因子(Profit Factor):1.36
  • 歷史最大平倉虧損(c-c Max Drawdown): ,1,128,600 (-16.86%) 
  • 最大持倉口數:20口 
  • 起始成本設定:100,000  (2001開始的回測預設值,不是很重要),在2009/1/5正式投入500,000進行部位縮放的起始金額。


(3) 保證金目標部位縮放法(Fixed Margin position sizing)

完整邏輯:  這個邏輯很符合一般人對固定桿槓的需求,假設某商品的原始保證金不用10萬元,但是為了保險起見,我用50萬只做1口單,其中只有20%真實被用在保證金上,其餘80%為預備緩衝金,這個保證金目標部位縮放法就是用這個邏輯發展出來的,首先先預設總資金可投入原始保證金的百分比,先把槓桿固定住,再去換算合理的部位縮放時機。

參數設定: 
  我們一樣不設交易成本,測試數據為台指期30分鐘K線,參數同樣,最大口數上限設定為20,開始執行部位縮放法統一時間為2009/1/5設定每日單口最大風險為6000元,期初投入資金為500,000(假設2009/1/5才投入此資金做第1),只願意拿出總資金的30%作為原始保證金使用,剩下的70%為預備金,在固定只有30%總資金的情行下(固定槓桿)進行部位縮放,假設目前的獲利加上成本已經到達100萬,當日可用的最大的資金設定不得超過100 × 30% = 30萬元,設定每口大台的原始保證金為8.3萬元,所以30萬元最高只能做3口單,以此類推
測試摘要:
  • 策略名稱/商品:WhiteSugar + 保證金目標部位縮放法 @ 台指期30分鐘K線 
  • 淨利(Net Profit):  8,898,600
  • 獲利因子(Profit Factor):1.34
  • 歷史最大平倉虧損(c-c Max Drawdown): ,1,241,200 (-16.86%) 
  • 最大持倉口數:20口 
  • 起始成本設定:100,000  (2001開始的回測預設值,不是很重要),在2009/1/5正式投入500,000進行部位縮放的起始金額。


(4) 最大連續虧損資金部位縮放法(MaxDD position sizing)

完整邏輯:  這個部位縮放法利用策略MDD及原始保證金換算出來每新增口數所需的資金,當獲利超過這筆資金時,就會順勢加碼,反整則減碼。

參數設定: 
       最後我們再將原始範例策略加進上述所教大家的最大連續虧損資金部位縮放法來看看結果如何,一樣不設交易成本,測試數據為台指期30分鐘K線,參數同樣,最大口數上限設定為20,開始執行部位縮放法統一時間為2009/1/5,設定每日單口最大風險為6000元,期初投入資金為500,000(假設2009/1/5才投入此資金),單口MDD已知約10(設定在參數),總資金達2倍保證金+1口原始保證金時才開始第1口交易;資金金達4倍的保證金+2口的原始保證金才開始加碼,以此類推。(在這裡要注意,如果一開始輸入的期初投入資金就超過可作2口所需的資金,一開始就會用2口進場唷,除非你自己增加MDDRatio這個參數)

每口所需的資金的公式 = MDDRatio × MaxDD + 原始保證金


測試摘要:
  • 策略名稱/商品:WhiteSugar + 保證金目標部位縮放法 @ 台指期30分鐘K線 
  • 淨利(Net Profit):  8,521,600
  • 獲利因子(Profit Factor):1.35
  • 歷史最大平倉虧損(c-c Max Drawdown): ,1,160,600 (-16.86%) 
  • 最大持倉口數:20口 
  • 起始成本設定:100,000  (2001開始的回測預設值,不是很重要),在2009/1/5正式投入500,000進行部位縮放的起始金額。

     從上面這些測試的結果可以發現,如果是在有獲利到達一定程度的情況才開始加碼的話,MDD佔當時的總資金(包含淨損益+初始資金)的百分比一樣是16.86%,說穿了就是用類似這種部位縮放邏輯,可以在不擴加MDD的情況下,讓績效以等比的方式成長,如果你認為自己的策略非常長效,不妨自行撰寫並測試此種邏輯,以便讓你在很有紀律的情況下把利潤放大。以上的範例為日內當沖策略的資金控管程式語法教學,波段會有跳空風險,因此MDD不一定可以守得住,不過你可以試著寫寫看,在這裡提供開放程式碼目的為希望讀者可以學到進階的程式邏輯。

     為了讓使用者可以用最快的方式練習此程式語法及背後的邏輯,我這裡提供上述所有邏輯的開放程式碼,目的是希望讀者透過此一教材學習部位縮放的語法,使用者可以任意修改語法內容,或加入自己的想法及參數,但僅限個人學習使用,請勿用於商業用途或串接帳戶交易。

-------------------------------------------------------------------------------------
下載檔案:

「四種必學的部位縮放法---開放程式碼(完整版)」

內容包括:

(1) 1組範例當沖策略開放程式碼(開盤區間突破策略)。
(2) 四種必學的部位縮放法之開放程式碼。
     →固定收益部位縮放法(Fixed Profit position sizing)
     →固定總資金風險部位縮放法(Fixed risk% position sizing)
     →保證金目標部位縮放法(Fixed Margin position sizing)
     →最大連續虧損資金部位縮放法(MaxDD position sizing)


下載方式:

下載連結(需取得權限後可閱讀):


[程式碼使用須知]
1. 所有程式碼及測試結果僅供個人撰寫程式碼學習使用,請勿轉作商業用途或串接交易帳戶。
2. 程式碼為開放式程式碼,使用者可任意修改語法、調整參數及搭配自己撰寫的策略進行多商品測試,使用者應以學習為目的。


======================================================================
●未來只要我找到市場上具有價值的學習教材,站長我都會統一收藏到下面的頁面中,有免費的基礎教材,也會有比較進階且專業的付費學習教材,供不同層次的讀者研究。另外最近我加入一些新的教材,包括GM Price全球商品的交易策略開放程式碼,提供給有單一策略應用於多商品的進階讀者學習語法。

● 重要權限文章/學習教材專區





5 留言:

Pochou 提到...

MC有辦法執行這種加減碼嗎?好像有bug不是?需要自己找下單機? 謝謝

WEN 提到...

我自己這裡ok。

Pochou 提到...

請教一下, mc不是只能單一次出場, 這樣減碼單怎麼執行呢? 還有加碼的部分, 如果有重新連線, 不管你之前已經下了幾口, mc都會當做一口而已, 會幫你重複下單, 此position size可以避開這些問題嗎? 謝謝您

WEN 提到...

MC可以多口數進出,例如…Buy 1 contracts=買1口……以此類推。

GO GA 提到...

感謝大大分享

張貼留言

如果有私人問題想請教,請透過網站右方『與站長聯絡』之表單,謝謝!

----------------------------------------------------------------------------------------------------
網站聲明(Disclaimer)
本教學網站內所提供之程式碼(包括函數、指標、訊號)屬開放程式碼,用意在於讓使用者學習程式語法之撰寫,使用者可以任意修改語法內容並調整參數。本網站所有之內容(包括文章、影片、歷史紀錄、程式碼、教材)限用於個人學習使用,請勿轉寄、濫用,嚴禁私自串接帳戶交易。
-------------------------------------------------------------------------------------------------