摘要
嚴格來說馬丁格爾是一種倉位管理方法,最早可以追溯到十八世紀,歷經幾百年經久不衰,直到現在還有很多馬丁格爾或者類似的策略。人們對此策略也是褒貶不一,本節利用發明者量化(fmz.cn)以圖表的方式進行論證。
什么是馬丁格爾
馬丁格爾起源於法國,英文直譯為:martegal,最初是指控制馬車的馬具。后來馬丁格爾代表一種賭博策略。最初應用在輪盤賭博中,逐漸延伸到金融交易中,直到今天在股票、期貨、外匯,還能看到馬丁格爾的影子。之所以經久不衰,是因為從理論上講,這是一種永不虧錢的策略。
正向馬丁格爾
這種永不虧錢的秘訣在於,在每次賠錢后,將賭注加倍,而在任何一次贏錢之后,將賭注回歸到初始單位。無論在贏錢之前輸了多少次,只要概率讓下注者贏一次,不但能贏回之前所有的損失,還外加一次賭注的收益。馬丁格爾在金融市場中,創造了很多盈利奇跡和滑鐵盧的虧損。
以拋硬幣為例,出現正反面的概率約等於 50%,連續出現正面或反面的次數,都是以 50%的概率開始遞減,也就是說在任何一次拋硬幣中,出現正面的概率是 50%,連續 2 次出現正面的概率是 25%,連續 3 次出現正面的概率是 12.5%等等以此類推。
如果最開始賭注是 1 元,連續輸錢的賭注以 2 的倍數增加,也就是:1、2、4、8、16、32、64、128、256、512 等等,直到贏錢為止,一個回合才結束,所以每個回合都能贏得 1 元。雖然在紙面上,馬丁格爾可以做到永不虧錢,但是隨着一連串的損失發生,賭注的規模會呈幾何倍的速度增加。為了避免資金雄厚的賭徒運用這個策略,幾乎所有的賭場對每一次賭局有最高的下注限制。
用代碼驗證正向馬丁格爾
/*backtest start: 2020-01-01 00:00:00 end: 2020-01-02 00:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}] */ var chart = { __isStock: true, tooltip: { xDateFormat: '%Y-%m-%d %H:%M:%S, %A' }, title: { text: '資金曲線' }, rangeSelector: { buttons: [{ type: 'hour', count: 1, text: '1h' }, { type: 'hour', count: 2, text: '3h' }, { type: 'hour', count: 8, text: '8h' }, { type: 'all', text: 'All' }], selected: 0, inputEnabled: false }, xAxis: { type: '' }, yAxis: { title: { text: '' }, opposite: false, }, series: [{ name: "", id: "", data: [] }] }; // 畫圖對象 // 策略入口函數 function main() { var ObjChart = Chart(chart); // 繪圖對象 ObjChart.reset(); // 啟動前先清空繪圖 var now = 0 // 隨機次數 var bet = 1 var maxBet = 0 // 記錄最大倍數 var lost = 0 var maxLost = 0 // 最大連續虧損次數 initialFunds = 10000 // 初始資金 var funds = initialFunds // 實時資金 while (true) { if (Math.random() > 0.5) { // 勝率為50% funds = funds + bet // 賺錢 bet = 1 // 每次賺錢后,就把下注倍數重置為1 lost = 0 } else { funds = funds - bet // 賠錢 bet = bet * 2 // 失敗就把下注倍數翻倍 lost++ } if (bet > maxBet) { maxBet = bet // 計算最大倍數 } if (lost > maxLost) { maxLost = lost // 計算連續虧損次數 } ObjChart.add([0, [now, funds]]) // 添加畫圖數據 ObjChart.update(chart) // 畫圖 now++ // 隨機次數加1 if (funds < 0) { // 如果破產結束程序 return Log("初始資金:" + initialFunds + " 隨機次數:" + now + " 最大連續虧損次數:" + maxLost + " 最大倍數:" + maxBet + " 最終資金:" + funds) } } }
測試結果
反向馬丁格爾
與正向馬丁格爾相反,反向馬丁格爾則是每次贏的時候,將賭注加倍,直到出現賠錢的時候將賭注回歸到初始單位。這是馬丁格爾策略的延伸,理論上這種策略更適合用在趨勢行情中,因為順勢而為的操作有很高的成功率。成功率的提高伴隨的是逐步加倉獲取的超額收益。
用代碼驗證反向馬丁格爾
/*backtest start: 2020-01-01 00:00:00 end: 2020-01-02 00:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}] */ var chart = { __isStock: true, tooltip: { xDateFormat: '%Y-%m-%d %H:%M:%S, %A' }, title: { text: '資金曲線' }, rangeSelector: { buttons: [{ type: 'hour', count: 1, text: '1h' }, { type: 'hour', count: 2, text: '3h' }, { type: 'hour', count: 8, text: '8h' }, { type: 'all', text: 'All' }], selected: 0, inputEnabled: false }, xAxis: { type: '' }, yAxis: { title: { text: '' }, opposite: false, }, series: [{ name: "", id: "", data: [] }] }; // 畫圖對象 // 策略入口函數 function main() { var ObjChart = Chart(chart); // 繪圖對象 ObjChart.reset(); // 啟動前先清空繪圖 var now = 0 // 隨機次數 var bet = 1 var maxBet = 0 // 記錄最大倍數 var lost = 0 var maxLost = 0 // 最大連續虧損次數 initialFunds = 10000 // 初始資金 var funds = initialFunds // 實時資金 while (true) { if (Math.random() > 0.5) { // 勝率為50% funds = funds + bet // 賺錢 bet = bet * 2 // 賺錢就把下注倍數翻倍 lost = 0 } else { funds = funds - bet // 賠錢 bet = 1 // 每次賠錢后,就把下注倍數重置為1 lost++ } if (bet > maxBet) { maxBet = bet // 計算最大倍數 } if (lost > maxLost) { maxLost = lost // 計算連續虧損次數 } ObjChart.add([0, [now, funds]]) // 添加畫圖數據 ObjChart.update(chart) // 畫圖 now++ // 隨機次數加1 if (funds < 0) { // 如果破產結束程序 return Log("初始資金:" + initialFunds + " 隨機次數:" + now + " 最大連續虧損次數:" + maxLost + " 最大倍數:" + maxBet + " 最終資金:" + funds) } } }
測試結果
馬丁格爾在期貨市場上的應用
雖然在期貨市場並沒有最高下單量的限制,但與賭場不同的是,期貨的漲跌並不是完全隨機賭大小,真實的金融交易市場要比賭場更加復雜。如果將馬丁格爾策略用在期貨交易中,一旦市場按照反方向趨勢行情運行,后面隨着行情的發展,頭寸翻倍增加會越來越大,風險也隨之加大。那么對於想要使用馬丁格爾策略用於期貨市場的交易者來說,至少需要解決 3 個問題:
1、起始倉位
2、加倉倍數
3、加倉距離
起始倉位需要根據你的資金量而定,也就是在交易之前計算好資金能承受的最大連續虧損次數。如果起始倉位過高,會導致每次翻倍加倉后投入過大的資金量。另外加倉倍數太高也會導致同樣的問題,馬丁格爾默認是雙倍加倉,如果設置成 3 倍加倉,破產的速度會更快,但如果設置成 1.5 倍加倉,就會出現另一種結果。最后需要考慮的是加倉的距離,比如在 5000 點開多單,價格下跌 15 點加倉,和價格下跌 30 點加倉,也是不一樣的。這點完全取決於交易者的風險承受能力和交易習慣偏好。